Lua 和 LuaJIT 处理代码的方式有何不同?
What's the difference in the way Lua and LuaJIT process the code?
据我了解,标准 Lua 解释器首先将输入代码编译为 "bytecode"(luac
的输出),然后 "interpretes" 该字节码。
但这基本上不就是 JIT 编译器的定义吗?那么 LuaJIT 做了什么?它与标准 Lua 解释器有何不同?怎么可以这么快?
isn't that basically the definition of a JIT compiler? What does LuaJIT do then?
它实现了自己的解释器,通常比 "standard" Lua 解释器更快,并且它将经常访问的片段 JIT 编译为机器指令,这带来了进一步的性能提升,但限制了可移植性(因为这些说明是 machine/architecture-specific)。
还有很多改进和优化,你可以在Mike Pall's overview. Also see this page for the overall JIT discussion and specifically Mike Pall's comments中找到它。
据我了解,标准 Lua 解释器首先将输入代码编译为 "bytecode"(luac
的输出),然后 "interpretes" 该字节码。
但这基本上不就是 JIT 编译器的定义吗?那么 LuaJIT 做了什么?它与标准 Lua 解释器有何不同?怎么可以这么快?
isn't that basically the definition of a JIT compiler? What does LuaJIT do then?
它实现了自己的解释器,通常比 "standard" Lua 解释器更快,并且它将经常访问的片段 JIT 编译为机器指令,这带来了进一步的性能提升,但限制了可移植性(因为这些说明是 machine/architecture-specific)。
还有很多改进和优化,你可以在Mike Pall's overview. Also see this page for the overall JIT discussion and specifically Mike Pall's comments中找到它。