lua 调用文件中的函数调用_【Lua源码赏析】第一章 阅读源码准备

前言

Lua作为游戏开发的吃饭语言,写了2、3年的lua,一行源码没看过,只能当个工具人,勉强维持生活。机缘巧合听了公司一个lua table源码解析的分享,感觉还蛮有意思,决定开始看一下lua源码,看懂这个我们开发使用的吃饭语言。【主要是闲了】

该专栏其实就是云风 的 Lua源码赏析 读书笔记。


1.1 目录

下载到lua-5.2.1的源代码后,会发现源代码文件。全部放在src子目录下。这些文件根据实现功能的不同,可以分为四部分。

1. 虚拟机运转的核心功能

  • lapi.c Lua API。实现大量的Lua C API(lua_ *函数)。
  • lctype.c 标准库中ctype相关实现
  • ldebug.c 调试接口。
  • ldo.c Lua的堆栈和调用结构。处理函数调用(luaD_call / luaD_pcall),扩展堆栈,协程处理,...
  • lfunc.c 函数原型及闭包管理
  • lgc.c 垃圾回收
  • lmem.c 内存管理接口【luaM_realloc / luaM_growaux_】
  • lobject.c 对象操作的一些函数。包括数据类型<->字符串转换,原始相等性测试(luaO_rawequalObj)和日志基础2(luaO_log2)
  • lopcodes.c 虚拟机的字节码定义
  • lstate.c 全局状态机。包括用于打开和关闭Lua状态(lua_newstate / lua_close)和线程(luaE_newthread / luaE_freethread)的函数。
  • lstring.c 字符串池
  • ltable.c 表类型的相关操作。Lua表(哈希)
  • ltm.c 标记方法。实现从对象访问元方法。
  • lvm.c 虚拟机。执行字节码(luaV_execute)。还公开了lapi.c使用的一些功能(例如luaV_concat)。
  • lzio.c 通用的缓冲输入流接口

2. 源代码解析以及预编译字节码

  • lcode.c Lua的代码生成器。由lparser.c使用
  • ldump.c 保存预编译的Lua块。实现luaU_dump,将功能对象转储为预编译的块字符串。
  • llex.c 词法分析器。由lparser.c使用。
  • lparser.c 解析器
  • lundump.c 加载预编译的Lua块

3. 内嵌库

  • lauxlib.c 库编写用到的辅助函数库
  • lbaselib.c 基础库
  • lbitlib.c 位操作库
  • lcorolib.c 协程库
  • ldblib.c Debug库
  • linit.c 内嵌库的初始化
  • liolib.c IO 库
  • lmathlib.c 数学库
  • loadlib.c 动态扩展库管理
  • loslib.c OS 库
  • lstrlib.c 字符串库
  • ltablib.c 表处理库

4. 可执行的解析器,字节码编译器

  • lua.c Lua独立解释器
  • luac.c Lua编译器(将字节码保存到文件中;还列出字节码)

1.3 编码约定

外部符号的前缀指示其来自的模块:

luaA_-lapi.c
luaB_-lbaselib.c
luaC_-lgc.c 垃圾回收部分
luaD_-ldo.c 函数的运行流程:函数调用及返回
luaE_-lstate.c 虚拟机的当前状态
luaF_-lfunc.c function实现
luaG_-ldebug.c 
luaH_-ltable.c table实现
luaI_-lauxlib.c
luaK_-lcode.c
luaL_-lauxlib.c / h,linit.c(公共函数)
luaM_-lmem.c 内存管理
luaO_-lobject.c 不同的数据类型
luaP_-lopcodes.c 虚拟机的行为是由一组 opcode 控制的
luaS_-lstring.c string实现
luaT_-ltm.c 元表 
luaU_-lundump.c
luaV_-lvm.c 虚拟机对 opcode 的解析和运作
luaX_-llex.c
luaY_-lparser.c
luaZ_-lzio.c 带缓冲的流处理
lua_-lapi.c / h + luaconf.h,debug.c
luai_-luaconf.h
luaopen_-luaconf.h +库(lbaselib.c,ldblib.c,liolib.c,lmathlib.c,
                                  loadlib.c,loslib.c,lstrlib.c,ltablib.c)

1.7 阅读源代码的次序

  • 首先、阅读外围的库是如何实现功能扩展的,
  • 然后、阅读 Lua 的具体实现。
  • 之后、可以开始了解 Lua VM 的实现。
  • 接下来就是分别理解函数调用、返回,string,metatable,table实现
  • debug模块是一个额外的设施、
  • 最后是parse 等等编译相关的部分。
  • 垃圾收集将是最难的部分,可能会花掉最多的时间去理解细节。Lua GC 的源码剖析
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值