2010-04-06 5 views
44

В соответствии с компьютерной игрой на языке программирования реализация LuaJIT seems to beat every other JIT-ed dynamic language (V8, Tracemonkey, PLT Scheme, Erlang HIPE) на на порядок.Действительно ли LuaJIT быстрее, чем у всех других динамических языков JIT-ed?

Я знаю, что эти тесты не являются репрезентативными (как они говорят: «Какие реализации на языке программирования имеют самые быстрые тестовые программы?»), Но это все равно действительно впечатляет.

На практике это действительно так? Кто-то протестировал эту реализацию Lua?

+2

>> Я знаю, что эти критерии не являются репрезентативными. << Вы? Напоминаем, что они не претендуют на то, чтобы быть представителем всего, что вы, возможно, захотите сделать. Вам решать, как эти крошечные программы похожи (или не любят) программы, которые вы пишете. – igouy

+4

@igouy: Если бы он считал, что контрольные показатели являются репрезентативными, он бы не задал этот вопрос. Этот вопрос требует подтверждения этих результатов. – Mud

ответ

30

Хорошее обсуждение в Lambda the Ultimate. LuaJIT очень хорош.

Многие люди сообщили о впечатляющих ускорениях на lua-l (список рассылки lua). Ускорение является самым впечатляющим для чистого кода Lua; составитель трассировки не так эффективен, когда в загружаемых библиотечных модулях много вызовов функций C. Не

6

Я сделал эксперимент с уроком узнал здесь: http://www.sampalib.org/luajit2.0_tunning.html Некоторые данные не то, что действует больше (maxmcode = 1024 достаточно), но LuaJIT приносит надежное улучшение на 600 строк кода чистого Lua скрипта (без вызова C нанести удар по функциям ...), который не является крупномасштабным приложением или встроенным прецедентом, а гораздо больше, чем эталоном.

16

В моем случае (разработка прототипа игры) я не наблюдал улучшения производительности вообще. Я использую lua для встраивания, поэтому есть много вызовов функций библиотеки C++. Несмотря на то, что основной цикл находится в сценарии lua, и вся важная логика реализована в lua, общая производительность была определена с помощью движков рендеринга и физических движков, реализованных на C++. Оригинальный lua уже достаточно быстр для таких приложений.

+0

Я сделал аналогичный опыт. Да, luajit намного быстрее для чистых lua, но это не ускорит ваши вызовы C. Я использовал luabind для упаковки (вероятно, плохую идею), и я закончил тем, что тратил больше времени на вызовы обертки объектов, чем в моих функциях lua , – cib

+16

Если вы используете интерфейс ffi LuaJIT для вызова функций C, они получаются изначально компилятором jit, и это будет намного быстрее. Я вызывал системные вызовы Linux с той же скоростью, что и C. –

+0

Для tbear и cib проблема заключается не в накладных вызовах на C, а в том, что все время проводилось внутри функций C. Конечно, в этом случае Lua не является частью узкого места и ускорение его не улучшит ситуацию. – Eloff

-1

Производительность JIT зависит от двух факторов: производительности исходного языка сценариев и производительности компилятора.

Компилятор - довольно зрелая техника, и большинство JIT-компиляторов имеют сопоставимую производительность. Однако сам lua, то есть lua-without-JIT, вероятно, является одним из самых быстрых языков сценариев.

lua быстрее, чем Java-без-JIT. lua быстрее, чем Javascript-без-JIT. lua быстрее, чем большинство скриптовых языков, без JIT.

так,

Lua-JIT быстрее, чем Java-с-JIT (солнце Java), Lua-JIT быстрее, чем V8 (Javascript-с-JIT), и т.д., ...

+5

Большинство компиляторов JIT не имеют сравнимой производительности. Lua по большей части хорошо подходит для интерпретатора и производительности JIT, но это не тот решающий фактор, который он сделал. LuaJIT не «быстрее», чем Sun JVM, хотя он сопоставим. Также интерпретатор LuaJIT полностью отличается от PUC Lua's. – jsimmons