Lua - 决定开始分析Lua的源代码

  • lmathlib.c, lstrlib.c: get familiar with the external C API. Don‘t bother with the pattern matcher though. Just the easy functions.
  • lapi.c: Check how the API is implemented internally. Only skim this to get a feeling for the code. Cross-reference to lua.h and luaconf.h as needed.
  • lobject.h: tagged values and object representation. skim through this first. you‘ll want to keep a window with this file open all the time.
  • lstate.h: state objects. ditto.
  • lopcodes.h: bytecode instruction format and opcode definitions. easy.
  • lvm.c: scroll down to luaV_execute, the main interpreter loop. see how all of the instructions are implemented. skip the details for now. reread later.
  • ldo.c: calls, stacks, exceptions, coroutines. tough read.
  • lstring.c: string interning. cute, huh?
  • ltable.c: hash tables and arrays. tricky code.
  • ltm.c: metamethod handling, reread all of lvm.c now.
  • You may want to reread lapi.c now.
  • ldebug.c: surprise waiting for you. abstract interpretation is used to find object names for tracebacks. does bytecode verification, too.
  • lparser.c, lcode.c: recursive descent parser, targetting a register-based VM. start from chunk() and work your way through. read the expression parser and the code generator parts last.
  • lgc.c: incremental garbage collector. take your time.
  • Read all the other files as you see references to them. Don‘t let your stack get too deep though.

以上是LuaJIT作者推荐的 Lua源码阅读顺序.



现在写的Leo, 还只是个玩具. 如果想进一步完善他, 自认为目前还没有这种能力. 所以, 还想求助于Lua. 就算是参照Lua的内部设计, 最后做出了一个仿制品, 也未尝不可.

过去, 我一直在网上搜索有关Lua源码分析的博客. 这些博客确实让我学到了很多, 但还不够, 因为对我而言, 这些知识点并没有形成一个完整的系统. 字符串, 闭包, 虚拟机, 内存管理, 协程, ... 对这些东西的内部实现原理, 我只有片面的理解. 所以这次, 我打算把Lua的源码完整的分析一遍, 并做好笔记, 然后再继续玩我的Leo.

时间: 2024-11-18 12:38:36

Lua - 决定开始分析Lua的源代码的相关文章

lua 源码分析之线程对象lua_State

lua_State 中放的是 lua 虚拟机中的环境表.注册表.运行堆栈.虚拟机的上下文等数据. 从一个主线程(特指 lua 虚拟机中的线程,即 coroutine)中创建出来的新的 lua_State 会共享大部分数据,但会拥有一个独立的运行堆栈.所以一个线程对象拥有一个lua_State. (ps:lua 的coroutine的使用参考: http://blog.csdn.NET/wusheng520/article/details/7954666) lua_State共享的数据部分是全局状

lua 按拉分析与合成

-- 将数值分解成bytes_table local function decompose_byte(data) if not data then return data end local tb = {} if data == 0 then table.insert(tb, 0) return tb end local idx = 1 while data > 0 do table.insert(tb, math.mod(data, 2)) data = math.floor(data/2)

【Lua】linux下lua+mod_lwt环境搭建

Lua 是一个小巧的脚本语言.它具有轻量级.可扩展等优势.它可以作为一个强大.轻量的脚本语言,供任何需要的程序使用. LWT (Lua Web Tools) 可让你使用 Lua 开发 Web 应用,并可直接在 Apache 上运行.LWT 的核心功能通过一个 Apache 的模块(mod_lwt)来提供.另外 LWT 提供可选的 Lua 模块用来访问数据库和缓存. 现在用lua + LWT来搭建后台web环境. 安装lua: 在linux中,有两种方法可以安装lua. 第一种:系统为Ubunut

lua脚本之lua语言简介以及lua的安装

本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设计旨在项目中扩展功能,因此其内核小而稳定.在游戏开发中,Lua在用户界面.游戏数据管理.实时游戏事件管理.游戏人工智能.创建功能原型等方面具有强大的支持.Lua不能直接访问数据库,但可以通过整合其他语言组件来访问数据库:对于一些耗时要求更高效率的工作,一般交给更加底层的语言去完成,Lua只是起到整合

在C++使用LUA交互,LUA实现闭包,C++/LUA相互闭包

LUA可谓是配置文件神器,具体功能用过才知道,接近两年没用了抽了俩小时熟悉了下基本的用法. 包括C/LUA堆栈操作 函数相互调用 以及LUA的闭包 C++和LUA相互闭包 想要灵活使用LUA必须先要学习 LUA和C的堆栈交互模型 类似于汇编函数调用方式了 很有意思. 要学习LUA首先要理解LUA和C/C++交互的堆栈lua_State  这里引用网友的一篇文章很详细 http://wind-catalpa.blog.163.com/blog/static/11475354320131191031

Cocos2d-x Lua游戏开发之Lua oo 的实现

一些面向对象的语言中提供了类的概念,作为创建对象的模版.在这些 语言里面.对象是类的实例,lua通过table也可以实现类的使用. --建立父类Animal Animal = { size,--动物大小 成员变量声明,不赋值为nil age,--动物年龄 color = "yellow",--动物颜色 sex,--动物性别,这个可以有?? new = function ( self,object ) object = object or {}--判断object是否为空,nil就会创建

Lua脚本编程:Lua语言入门

Lua是一门简单而强大的语言,其本身强大的扩展性使得这门语言在游戏设计等领域发挥着重要的作用.博主曾在Unity3D中使用过这门语言,并且针对Lua和Unity.C++等方面的内容进行了学习和讨论.最近因为在[游戏脚本高级编程]这本书中详细介绍了Lua脚本的相关内容,因此在这里记录下博主的读书心得,方便以后在需要的时候查阅. Lua系统构成 Lua系统由Lua链接库.Luac编译器.Lua解释器三部分构成. * Lua链接库主要由lua.lib和lua.h这两个文件组成.Lua链接库主要负责对自

[Lua快速了解一下]Lua运行

-Lua的Hello World print("Hello World") 分号可选 -类似python,进入Lua后再shell中打命令执行语句也可 > print("Hello, World") Hello, World > -将脚本存成文件,用如下命令行运行 >lua file.lua -或者是像shell一样运行 chenhao-air:lua chenhao$ cat hello.lua #!/usr/local/bin/lua prin

Lua Profiler——快速定位Lua性能问题

导读 随着Lua在项目中的大量使用,它所带来的性能问题也逐步成为了项目运行时的重大性能瓶颈之一.特别是内存相关的性能问题,无论是内存分配过大还是内存泄露无法回收,目前都已经在不少研发项目中集中爆发. UWA推出的GOT Online中的Lua模式已经慢慢成为研发团队对Lua进行日常性能监控的有效手段.因此,也有越来越多的团队反馈,在监控到table数持续上涨,引用Mono对象持续增多等等问题时,应该如何快速地解决? 本次博物纳新推荐的开源库项目:LuaProfiler-For-Unity,相信可