Pregunta Al usar Luajit, ¿es mejor utilizar FFI o ligaduras normales de lua?


Acabo de empezar a jugar con Luajit con C ++ y veo que FFI es muy fácil de usar, pero no estoy seguro de que sea la mejor solución para todos (o al menos la mayoría) de los casos.

Entonces, ¿es mejor usar uno u otro, o es simplemente una preferencia?


5
2018-04-21 13:45


origen


Respuestas:


Como se indica en el sitio web de LuaJIT, las llamadas a las funciones de C enlazadas a través de FFI pueden compilarse mediante JIT (a diferencia de las llamadas a través de Lua C / API), por lo que, en términos de rendimiento, FFI es definitivamente mejor. Además, al usar FFI puede usar tipos C nativos para cálculos en Lua, lo que puede beneficiar aún más el rendimiento en ciertos casos (ejemplo)

Un problema que puede tener al usar FFI (si está acostumbrado a C / API) es cuando desea que una función C devuelva más de un valor. En Lua C / API es sencillo, pero en el caso de FFI esto requiere algunos trucos (por ejemplo, escribir funciones de envoltura para llamadas de FFI C). Pero creo que este es un pequeño inconveniente si se tiene en cuenta la facilidad de uso y el rendimiento.

También hay algunas consideraciones de seguridad, si su aplicación permite la creación de secuencias de comandos de terceros, por ejemplo, como el uso indebido de FFI por parte de ellos, felizmente bloqueará su aplicación sin una advertencia.


10
2018-04-21 15:11



WRT a C ++, aquí hay un hilo en la lista de lua-l sobre cómo llamar a C ++ que toca esto: http://lua-users.org/lists/lua-l/2011-07/threads.html#00492

Además de la respuesta de WB: depende de si está utilizando el compilador JIT o el intérprete. No puede ejecutar el JIT en algunas plataformas (por ejemplo, iOS, debido a restricciones de licencia). Por lo tanto, puede que no sea mucho más rápido usar el LuaJit FFI (ya que es ~ 8-10x más lento cuando se usa el intérprete), pero luego el intérprete LuaJit es 2-3 veces más rápido que el Lua VM.

También estoy interesado en llamar a C ++ desde Lua y actualmente estoy evaluando LuaJit. Genero enlaces Lua usando Reflexionar.


1
2017-10-13 13:21