Lua編譯器:LuaJIT
LuaJIT:采用C語言寫的Lua的解釋器的代碼
LuaJIT is a Just-In-Time Compiler for the Lua* programming language.
LuaJIT試圖保留Lua的精髓--輕量級,高效和可擴展.
功能
所有的函數缺省會被JIT(即時編譯器)編譯到本地機器碼:
* 沒有被使用的函數不會被編譯.
* 可以選擇性打開和關閉即時編譯函數,子函數甚至整個模塊.
* 需要解析的函數(譯注:即沒有被編譯的函數)和編譯過的函數可以自由的混合使用.
預編譯(Ahead-of-time AOT)也是被支持的:
* 一些API函數和命令行選項允許用戶全盤控制編譯過程
這個即時編譯器是可擴展的:
* 優化器是一個外部模塊可以附著在編譯器流水線上.
* 一些模塊提供了關于編譯過程的跟蹤和調試信息.
* 所以這些功能可以通過命令行參數來激活.
LuaJIT被設計成全兼容Lua 5.1.她接受同樣的源代碼和/或預編譯字節碼.她支持所有標準語言語義.特別是:
* 支持所有標準類型,操作符和元方法.
* 隱式類型強制轉換(number/string).
* 完全 IEEE-754 語義浮點算法(NaN, +-Inf, +-0, ...).
* 完全支持詞法閉包.正確的尾調用不會消耗棧幀(譯注:棧空間).
* 異常是精確的.回溯追蹤工作的很好.
* 通過CoCo提供協程支持.(譯注:一點兼容性問題 )
* 沒有改變Lua 5.1的增量垃圾收集器.
* 沒有改變標準Lua/C API.
* 動態加載的C模塊保持和Lua 5.1一樣鏈接兼容性(同樣的ABI 抽象二進制接口).(譯注:基本不用重新編譯老的Lua模塊,但是仍然偶遇兼容性問題).
* LuaJIT可以像Lua那樣嵌入到一個應用程序里.
一些次要的不同點和調試有關:
* 調試鉤子只在調試代碼生成使能時調用
* 在JIT編譯過的代碼中不支持尾調用計數.HOOKTAILRET 也不會被調用.注意: 除非你寫Lua調試器,否則這些對你沒有影響.