При использовании Luajit лучше использовать FFI или обычные привязки lua?

Я только начал возиться с Luajit с C ++ и вижу, что FFI действительно прост в использовании, но я не уверен, является ли это лучшим решением для всех (или, по крайней мере, для большинства) случаев.

Так что лучше использовать один или другой, или это просто предпочтение?

5

Решение

Как указано на веб-сайте LuaJIT, вызовы функций C, связанных через FFI, могут быть скомпилированы JIT (в отличие от вызовов через Lua C / API), поэтому с точки зрения производительности FFI определенно лучше. Более того, используя FFI, вы можете использовать нативные типы C для вычислений в Lua, что может в некоторых случаях повысить производительность (пример).

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

Есть также некоторые соображения безопасности, если ваше приложение допускает использование сторонних сценариев, например, так как неправильное использование ими FFI приведет к аварийному завершению работы вашего приложения без предупреждения.

10

Другие решения

WRT to C ++, вот список в списке lua-l о вызове C ++, который касается этого:
http://lua-users.org/lists/lua-l/2011-07/threads.html#00492

В дополнение к ответу WB: это зависит от того, используете ли вы JIT-компилятор или интерпретатор. Вы не можете запустить JIT на некоторых платформах (например, iOS, из-за лицензионных ограничений). Следовательно, использование FFI LuaJit может быть не намного быстрее (так как при использовании интерпретатора это происходит в ~ 8-10 раз медленнее), но тогда интерпретатор LuaJit в 2-3 раза быстрее, чем виртуальная машина Lua.

Я также заинтересован в вызове C ++ из Lua и сейчас оцениваю LuaJit. Я генерирую привязки Lua, используя Вдумайтесь.

1

По вопросам рекламы [email protected]