1.1 前世今生
Lua于1993年诞生于巴西的Tecgraf实验室,Tecgraf主要专注于图形图像相关的工具研发。
(1)可移植性:使用clean C编写的解释器。
(2)良好的嵌入性:提供丰富的API供宿主与Lua脚本之间进行通信和交换数据。
(3)非常小的尺寸:Lua5.1源码只有一万多行。
(4)效率很高:为了提高性能,作者们自己开发词法分析器和解析器,代替Lex和Yacc等工具。
用户使用C、C++等语言进行主要功能的开发,而扩展、配置等频繁动态变化的部分使用Lua语言来进行开发。在游戏服务器领域:
(1)C、C++语言实现引擎层。
(2)向引擎层注册一个Lua主逻辑脚本。Lua负责处理数据包,并根据数据的内容调用主逻辑脚本中的相关函数进行处理。
可以看出,游戏的逻辑、玩法等频繁变动的内容由Lua完成。
1.2 源码组织
内部模块对外提供的接口、数据结构都以“lua模块名_”作为前缀。
C API则用“lua_”作为前缀。
1.3 Lua虚拟机工作流程
(1)Lua代码->字节码:llex.c(词法分析)和lparser.c(语法分析)。lopcodes.h , lopcodes.c(定义字节码指令及相关API )
(1)Lua虚拟机执行字节码:执行(lvm.c:luaV_execute),函数环境(ldo.c),垃圾回收(lgc.c),与宿主系统交互(lapi.c)
后面的分析是基于Lua 5.1.4版本进行分析的。