Чем хорош LuaJIT?

РЕДАКТИРОВАТЬ: к сожалению, LuaJIT был исключен из сравнения по ссылке ниже.

Это сравнение языков программирования показывает, что LuaJIT имеет более чем десятикратное улучшение по сравнению с обычной реализацией Lua. Почему изменение так велико? Есть ли что-то особенное в Lua, которое сильно выигрывает от JIT-компиляции? Python динамически типизируется и компилируется в байт-код, так почему же PyPy (который, я полагаю, теперь имеет JIT) не показывает такой большой скачок в производительности?


person Mihai    schedule 06.02.2011    source источник
comment
простой ответ: Майк Пол - бог :)   -  person Necrolis    schedule 06.02.2011


Ответы (1)


Майк Полл говорил об этом в нескольких местах:

Как и в случае с любой производительной системой, ответ в конечном итоге сводится к двум вещам: алгоритмам и инженерии. LuaJIT использует передовые методы компиляции, а также имеет очень тонко спроектированную реализацию. Например, когда причудливые методы компиляции не могут обработать фрагмент кода, LuaJIT возвращается к очень быстрому интерпретатору, написанному на ассемблере x86.

LuaJIT получает двойные баллы в инженерном аспекте, потому что не только сам LuaJIT хорошо спроектирован, но и сам язык Lua имеет более простой и согласованный дизайн, чем Python и JavaScript. Это (незначительно) упрощает реализацию для обеспечения стабильно хорошей производительности.

person Ben Karel    schedule 06.02.2011
comment
LuaJIT однозначно является прекрасным примером отличных алгоритмов и отличной инженерии. Считается ли это (или это) маркетинговым текстом, не имеет значения. Циклы интерпретатора, написанные вручную на ассемблере, значительно быстрее, чем версия интерпретатора на языке C, что является примером хорошей инженерии. Анализ псевдонимов, загрузка хранилища, переадресация нагрузки, нанометки, выделение регистров и эффективное объединение / выход трассировки - вот примеры отличных алгоритмов (и инженерии). - person Eloff; 01.01.2014