Запуск занимает много времени, это самая большая жалоба - однако, это не такая большая проблема, если вы сделали то, что делает Java, и запустили в режиме интерпретатора, и использовали LLVM для компиляции наиболее часто используемых частей программа.
Кроме того, хотя подобные аргументы разбросаны по всему Интернету, Mono уже некоторое время успешно использует LLVM в качестве JIT-компилятора (хотя стоит отметить, что по умолчанию он работает быстрее, но меньше). эффективный бэкэнд, и они также модифицировали части LLVM).
Для динамических языков LLVM, возможно, не является подходящим инструментом только потому, что он был разработан для оптимизации языков системного программирования, таких как C и C ++, которые строго / статически типизированы и поддерживают функции очень низкого уровня. В целом, оптимизация, выполняемая на C, на самом деле не делает динамические языки быстрыми, потому что вы просто создаете эффективный способ запуска медленной системы. Современные динамические языковые JIT делают такие вещи, как встраивание функций, которые известны только во время выполнения, или оптимизацию на основе того, какой тип переменной имеет большую часть времени, для чего LLVM не предназначен.