MENU

LuaJIT

March 15, 2017 • Read: 2702 • C/C++阅读设置

[TOC]

介绍

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调试器,否则这些对你没有影响.

    操作

  • VS新建一个项目
  • 到官网下载最新的Lua版本,这里给出的是LuaJIT的官网,JIT版本更加高效而且操作一模一样,所以直接上JIT了.
  • 打开 “ 项目 -> LuaJIT属性 -> 配置属性 -> VC++目录”,在包含目录中加入C:\LuaJIT-2.0.0,在库目录中加入C:\LuaJIT-2.0.0\src
  • 编写代码

    #include <src\lua.hpp>
    #include <iostream>
     
    /*打开Lua所需要的库*/
    #pragma comment(lib,"lua51.lib")
    extern "C"
    {
          #include <src\lua.h>
          #include <src\lualib.h>
    }
     
     
    int _tmain(int argc, _TCHAR* argv[])
    {
          lua_State *L=luaL_newstate(); /*创建一个解释器句柄*/
          luaL_openlibs(L);             /*打开所有的Lua库*/
     
    luaL_loadfile(L,"script.lua"); /*调入Lua脚本文件*/
     
          lua_pcall(L,0,0,0); /*执行Lua脚本*/  
          lua_close(L);       /*关闭句柄*/  
          system("pause");
          return 0;  
    }
  1. 编写你自己的Lua脚本,放到项目的资源文件下就可用了,例如最简单的Lua程序,记得存为刚刚声明打开的名字,这里是script.lua

    print("hello world") 

编译 LuaJIT 动态库dll 与 静态库lib

  1. 开始菜单内找到VC的命令提示符
  2. cd 到 你的luajit src目录;我的是D:\C++ Project\LuaJIT-2.0.4\src
D:\Program Files (x86)\编程开发\Microsoft Visual Studio 14.0\VC>cd D:\C++ Project\LuaJIT-2.0.4\src
D:\C++ Project\LuaJIT-2.0.4\src>

输入 msvcbuild.bat 回车 就编译好 dll动态库了
输入 msvcbuild.bat static 回车 就编译好 lib静态库了

Last Modified: April 5, 2017