在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
lua(wiki 中文 官方社区:lua-users)是一门开源、简明、可扩展且高效的弱类型解释型脚本语言。 由于其实现遵循C标准,它几乎能在所有的平台(windows、linux、OS X、Android、iOS、PlayStation、XBox、wii等)上运行。 当前最新的lua版本为5.3.5;前两位版本号为lua的大版本,相同的大版本之间是兼容的;即5.3.5向下兼容5.3.4~0等版本 版本信息定义在lua.h中,即宏LUA_RELEASE #define LUA_VERSION_MAJOR "5" #define LUA_VERSION_MINOR "3" #define LUA_VERSION_NUM 503 #define LUA_VERSION_RELEASE "4" #define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2017 Lua.org, PUC-Rio" #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" lua非常小巧精简,其解释器加上周边的库函数也不过1w多行代码。以下是Lua5.3.5的源文件: 核心文件:
内嵌库文件:
解释器、编译器文件:
lua很容易编译成静态库、动态库或以源代码的形式集成到应用程序中,并方便地与c/c++及其他语言进行互操作,因此其被称为胶水语言(glue language)。 如果不想自己编译lua,可从LuaBinaries下载编译好的各个平台上静态库、动态库及基于这些库实现的lua、wlua解释器、luac编译器等工具.。 由于其动态性,支持热更,上手难度低等特点,在游戏行业常常被用来开发业务逻辑。 可使用跨平台vsCode来编辑和调试lua脚本(注:调试需要安装actboy168的LuaDebug插件 其github在这里,可在vscode的Extensions面板中搜索lua找到它然后直接安装)。 EmmyLua是另外一款比较优秀的lua调试工具。腾讯也提供了一款vsCode的lua调试器插件:LuaPanda 其github在这里
lua/wlua解释器 lua.exe、wlua.exe解释器都可以通过传入lua文件,来执行lua脚本 如:lua.exe/wlua.exe D:/LuaTest/test1.lua // 将Hello World!字符串打印到控制台和写入到e:/test.txt文件中 D:/LuaTest/test1.lua内容如下: print("Hello World!") file = io.open("e:/test.txt", "w") file:write("Hello World!", "\n") file:close() lua.exe是subsystem:console类型程序,可在控制台交互式地接受用户的输入,并能使用print等函数将结果输出到控制台中 wlua.exe是subsystem:windows类型程序,无控制台窗口,因此不能将结果输出到控制台中,但可输出到文件;另外通过加载GUI dll插件模块,可使用模块中的接口来创建窗口程序 在lua5.1.5及之前版本,luaforwindows(googlecode上的站点)项目会集成lua在windows上的各个插件,方便大家在windows上使用lua,如今该项目已停更 如:在luaforwindows中就集成了alien插件,该插件中提供的lua版的windows api,配合wlua.exe来运行以下脚本 require "alien" local MessageBox = alien.User32.MessageBoxA MessageBox:types{ret = "long", abi = "stdcall", "long", "string", "string", "long" } MessageBox(0, "Hello World!", "My Window Title", 0x00000040)
lua.exe命令行 lua.exe --help // 查看lua.exe的用法 lua.exe -v // 显示出Lua版本号 Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio lua.exe // 进入交互模式 windows系统按Ctrl+C、linux系统按Ctrl+D可退出交互模式 lua.exe - // 从标准设备读入脚本,输完后按回车,然后按Ctrl+Z并回车,会执行输入内容 注:进入输入模式后可按Ctrl+C强制退出 lua.exe e:\Lua\Test.lua // 加载并执行e:\Lua\Test.lua lua.exe -e "print(type(100))" // 通过-e参数执行一段lua代码 注:对于5.3版本的Lua,lua.exe在开始执行前,会读取环境变量LUA_INIT_5_3的值,若其没定义,则会尝试另外一个环境变量LUA_INIT; 若该值不以@开头,会将其作为一段lua代码进行执行;若以@开头,则将其作为lua文件路径载入并执行 lua.exe -e "myPrint=print" e:\Lua\Test.lua 100 200 e:\Lua\Test.lua中的内容如下: myPrint("Hello") -- 打印所有传入的命令行参数 for i, v in pairs(arg) do myPrint(i, v) end 输出结果为: 在运行以前,Lua使用所有参数构造arg表。脚本名e:\Lua\Test.lua索引为0,脚本的参数从1开始增加,脚本前面的参数从-1开始减少 lua.exe -e "myPrint=print" e:\Lua\Test2.lua 1 "hello" true e:\Lua\Test2.lua中的内容如下: local a, b, c, d = ... myPrint(a) -- 1 myPrint(b) -- hello myPrint(c) -- true myPrint(d) -- nil lua.exe -i e:\Lua\Test3.lua // 执行e:\Lua\Test3.lua脚本后,进入交互模式 lua.exe -lmisc.Test4 // 搜索misc.Test4模块,找到后加载并执行模块 lua.exe -e "print(package.path);print(package.cpath)" -l misc.Test4 // 打印出lua模块和c模块的搜索路径,按照这些路径来搜索misc.Test4模块,找到后加载并执行模块 E:\Lua\lua\?.lua;E:\Lua\lua\?\init.lua;E:\Lua\?.lua;E:\Lua\?\init.lua;E:\Lua\..\share\lua\5.3\?.lua;E:\Lua\..\share\lua\5.3\?\init.lua;.\?.lua;.\?\init.lua // 将?替换为misc\Test4来搜索lua模块 注1:对于5.3版本的Lua,package.path会被设置成环境变量LUA_PATH_5_3的值,若其没定义,则会尝试另外一个环境变量LUA_PATH;若都没定义,则使用编译时定义的默认路径(如上) 注2:对于5.3版本的Lua,package.cpath会被设置成环境变量LUA_CPATH_5_3的值,若其没定义,则会尝试另外一个环境变量LUA_CPATH;若都没定义,则使用编译时定义的默认路径(如上) 注3:在使用环境变量时,可以添加;;来带上默认路径;如:将LUA_PATH定义为c:\public;; package.path则会变成c:\public和默认路径(如上)的集合 注4:若命令行带上-E参数,则会在阻止使用环境变量,强制使用默认路径(如上)
Lua C#解释器 Lua Interpreter使用C#实现的解释器,它允许使用C#模块,并能在lua代码中调用这些C#模块中的函数
Lua JIT LuaJIT是(wiki)一款支持JIT的Lua代码解释器,使用C语言编写,已开源(git);当前发布的稳定版本为2.0.5,最新的版本为2.1.0-beta3,只兼容Lua的5.1版本 编译技术大约分为两种,一种AOT,将源代码、中间码等提前静态地编译成本地机器码,目标用户直接用本地机器码的程序来运行 从官网上下载源码解压后,在Visual Studio 2008 Command Prompt命令行中,切换当前路径到<LuaJIT>\src,然后执行msvcbuild.bat 在src目录中,会得到生成出luajit.exe及依赖文件 要编译得到64位的luajit,则需要在Visual Studio 2008 x64 Win64 Command Prompt命令行中编译
如果想调试运行luajit.exe,可按照如下步骤来 ① 在msvcbuild.bat脚本搜索/O2,将/O2改为/Od
luajit的命令行参数用法与lua.exe/wlua.exe是一致的,只是在其基础上增加了几个命令行参数(详见:这里),可通过luajit.exe --help查看详细用法 luajit.exe -b Hello.lua Hello.luajit // 将Hello.lua代码编译成luajit字节码(缺省是开启O3最高优化) luajit.exe -O0 Hello.lua // 关闭优化,执行Hello.lua代码 luajit.exe -joff Hello.lua // 关闭jit,仅仅使用解释器执行Hello.lua代码 关于luajit字节码的详细格式详见:【技术分享】Lua程序逆向之Luajit文件格式
更多请阅读:
lua反编译工具
lua性能分析工具
游戏引擎lua插件
常用库的lua版本
资料
|
请发表评论