lua 源码分析

工程

api:

lua.h lua.hpp

application:

lua.c luac.c

aspect:

ldebug.c ldebug.h lgc.c lgc.h lmem.c lmem.h

constants:

ljumptab.h llimits.h lprefix.h luaconf.h

controller:

lbaselib.c lcorolib.c ldblib.c liolib.c lmathlib.c loadlib.c loslib.c lstrlib.c ltablib.c lualib.h lutf8lib.c

depends:

lauxlib.c lauxlib.h

entity:

lstate.c lstate.h

filter:

linit.c

lang:

lctype.c lctype.h lfunc.c lfunc.h lobject.c lobject.h lstring.c lstring.h ltable.c ltable.h ltm.c ltm.h

runtime:

lapi.c lapi.h lcode.c lcode.h ldo.c ldo.h llex.c llex.h lopcodes.c lopcodes.h lopnames.h lparser.c lparser.h lvm.c lvm.h

tools:

ldump.c lundump.c lundump.h lzio.c lzio.h

1 模块

模块

功能

前缀

说明

lapi.c

C语言接口

lua

lua是一门嵌入式语言,可以和宿主机系统相结合。所以必须提供和宿主机系统交互的API,这些API以C函数的形式提供

lctype.c

C标准库中ctype相关实现

___

___

ldebug.c

debug接口

___

___

lgc.c

垃圾回收

luaC

垃圾回收机制

ldo.c

函数调用以及栈管理

luaD

函数的调用

lstate.c

全局状态机

luaE

lua虚拟机当前的状态,全局State引用了整个虚拟机的所有数据

lfunc.c

函数原型及闭包管理

luaF

数据类型function

lmem.c

内存管理接口

luaM

基础设备:内存管理

lobject.c

对象操作的一些函数

luaO

数据类型

lopcodes.c

虚拟机的字节码定义

___

控制了lua虚拟机的行为

lstring.c

字符串池

luaS

数据类型string

ltable.c

表类型的相关操作

luaH

数据类型table

ltm.c

元方法

luaT

Tag Method 元表的处理

lvm.c

虚拟机

luaV

定义了虚拟机对opcode的解析和运作

lzio.c

输入流接口

luaZ

带缓冲的流处理

模块

功能

前缀

说明

llex.c

词法分析器

luaX

外部输入的文本程序代码需要经过解析得到内部的数据结构(关键字集合)

lparser.c

语法解析器

luaY

外部输入的文本程序代码需要经过解析得到内部的数据结构(常量opcode的集合)

lcode.c

代码生成器

luaK

解析完外部文本代码,还需要最终生成虚拟机理解的数据

ldump.c

序列化预编译的lua字节码

luaU

为了加快代码翻译的流程,可以采用预编译的过程,把运行时编译的结果生成字节码

lundump.c

还原预编译的字节码

luaU

为了加快代码翻译的流程,可以采用预编译的过程,把运行时字节码生成编译的结果

模块

功能

前缀

说明

lauxlib.c

库编写用到的辅助函数库

___

___

linit.c

内嵌库的初始化

___

___

loadlib.c

动态扩展库管理

___

___

lbaselib.c

基础库

___

___

lbitlib.c

位操作库

___

___

lcorolib.c

协程库

___

___

ldblib.c

debug库

___

___

liolib.c

IO库

___

___

lmathlib.c

数学库

___

___

loslib.c

OS库

___

___

lstrlib.c

字符串库

___

___

ltablib.c

表处理库

___

___

嵌入式语言可以不提供库及函数,全部由宿主系统注入到State中即可,但是lua官方版本提供了少量的库,

比如一些基础函数,如pairs、error、setmetatable、type等。lua允许自由加载需要的部分,以控制最终

执行文件的体积和内存的占用量。

(1)lualib.h,主动加载这些内嵌库进入lua_State是在lualib.h中的API实现。

(2)loadlib.c、limit.c:在lua 5.0之前,lua并没有统一的模块管理机制,因为早期lua定位是嵌入式语言,后来人们

倾向于把lua作为一门独立的编程语言来使用,那么统一的模块化管理就变得很由必要,这样才能让丰富的第三方库可以

协同工作。在lua 5.1引入了官方推介的模块管理机制,require、module,并允许从C语言编写的动态库中加载模块,

在lua 5.2做了简化。我们可以在loadlib.c中找到实现,内嵌库的初始化API则在limit.c中找到。

(3)lib.c,其他的基础库在lib.c为后缀的文件中实现。

模块

功能

前缀

说明

lua.c

解释器

___

run text OR binary 早期lua主要在嵌入式系统中使用,所以源代码通常被编译成动态库或静态库被宿主机系统加载或链接,但随着lua第三方库越来越丰富,人们开始把lua作为一门独立的语言来使用,lua的官方版本里提供了一个单独的解析器

luac.c

字节码编译器

___

text >> binary 一个简单的字节码编译器,可以预编译文本的lua源程序。

2 运行时流程

感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值