"Just in time compiled Foreign function Interface: what is it that gets "runtime" compiled"的翻译:即时编译的外部函数接口:究竟是什么被“运行时”编译了。

我的问题是关于一般情况下 JIT 编译外部函数接口的,但我会以 LuaJIT 作为具体例子。据说 LuaJIT 的 FFI 比直接绑定到 C 更快,因为对 C 函数的调用可以得到 JIT 编译。

有人能解释一下吗?通常,被绑定的 C 函数已经存在于库中,因此已经被编译过了,那么到底 JIT'ed 了什么呢?

点赞
用户828255
用户828255

LuaJIT扩展:FFI库
[…] JIT编译器为从Lua代码访问C数据结构生成的代码与C编译器生成的代码相当。通过经典的Lua/C API绑定调用C函数的调用将不能编译,即使在LuaJIT的未来版本中。它们将引发NYI消息,导致任何跟踪中止并有效地防止周围的Lua代码被编译。例如,循环内的传统C函数调用FUNCC操作码将防止该循环被编译,这意味着LuaJIT将退回到其解释器,但仍然非常快。
同样要再强调一遍,LuaJIT不会在已编译的C代码上执行任何魔法。它只是将FFI对C函数的调用内联到JIT汇编代码中。

2013-11-27 02:47:15