Lua code reading(lua源码阅读)

http://blog.csdn.net/cnjet/article/details/7023526

Online Lua 5.1 source code browser

Recommended reading order:

  • 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.

If you‘re done before X-Mas and understood all of it, you‘re good. The information density of the code is rather high.

Adapt from http://lua.iteye.com/blog/492260.

ps: an optimized and extended lua implementation, http://www.luajit.org.

时间: 2024-10-23 00:56:27

Lua code reading(lua源码阅读)的相关文章

lua.5.2.3源码阅读(01):文件读取相关

Lua在载入lua文件的时候,读取过程中通过cache的方式,默认cache为512字节: 1.cache中包含数据时,直接将cache中数据返回: 2.cache中不包含数据的时候,每次读取512个字节,进行cache: 1 typedef struct LoadF { 2 int n; /* number of pre-read characters */ 3 FILE *f; /* file being read */ 4 char buff[LUAL_BUFFERSIZE]; /* ar

lua.5.2.3源码阅读(03):通用变量

lua的堆栈中存放的是通用变量,通用变量实际上就是一个union内存块,根据不同的类型,采用不同的组织方式, 看一下通用类型的相关定义,截取了lobject.h相关代码,从代码上看,不太清楚numfield为什么会有两个相关定义. 堆栈中可以根据情况分为一下几种类型: 1.双精度浮点数:double d__; 2.复合类型,通过tt__来表示类型: 3.复合类型中分为两种:可回收类型和不可回收类型: 4.可回收类型可以是:TString.Udata.Closure.Table.Proto.UpV

lua.5.2.3源码阅读(02):字符串对象

lua中的字符串是对象,主要分析一下对象的结构和申请的方式. TString是一个union,为了进行字节对齐,中间插入了L_Umaxalign,按照union的定义 union的大小,必须是单个结构大小的整数倍,按照目前的定义,应该是double大小的整数倍. 1 /* type to ensure maximum alignment */ 2 #if !defined(LUAI_USER_ALIGNMENT_T) 3 #define LUAI_USER_ALIGNMENT_T union {

lua.5.2.3源码阅读(04):Table结构基本操作

table(lobject.h)的结构定义: 1 // TKey结构是一个链表结构,用来存储hash相同 2 // 的所有key,value对结构. 3 typedef union TKey { 4 struct { 5 TValuefields; // key值 6 struct Node *next; // 指向像一个相同hash值的key值: 7 } nk; 8 TValue tvk; //尾部的key值: 9 } TKey; 10 11 // (key,value)对结构,通过key计算

Lua中Userdata类型源码实现

1.概述 Lua中userdata分两种,一种是轻量级userdata(light userdata),轻量级userdata是一种表示C指针的值,对Lua虚拟机来说,这种数据类型不需要GC(垃圾回收),其指向的内存由用户分配和释放,其实现就是一个void *p指针:后一种userdata类型完全userdata(full userdata),内存是由Lua虚拟机分配,并有GC机制负责处理.下面将通过Lua 5.2.1的源码来看后一种userdata的实现. 2.源码实现 userdata内存存

cocos2d-x 3.1.1源码阅读过程的注释

cocos2d-x 3.1.1源码阅读过程的注释 印象笔记链接:http://app.yinxiang.com/l/AAU8F1mKiN9BIqFopReAU3ZbTcgGOULycQo/ Ref 每个类的基类是Ref   也就是2.0的CCObject 调用继承下来的下面的那个函数 class CC_DLL Ref { public: /** 引用计数+1 */ void retain(); { CCASSERT(_referenceCount > 0, "reference count

《java.util.concurrent 包源码阅读》03 锁

Condition接口 应用场景:一个线程因为某个condition不满足被挂起,直到该Condition被满足了. 类似与Object的wait/notify,因此Condition对象应该是被多线程共享的,需要使用锁保护其状态的一致性 示例代码: class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition

Redis源码阅读(一)事件机制

Redis源码阅读(一)事件机制 Redis作为一款NoSQL非关系内存数据库,具有很高的读写性能,且原生支持的数据类型丰富,被广泛的作为缓存.分布式数据库.消息队列等应用.此外Redis还有许多高可用特性,包括数据持久化,主从模式备份等等,可以满足对数据完整有一定要求的场景. 而且Redis的源码结构简单清晰,有大量材料可以参阅:通过阅读Redis源码,掌握一些常用技术在Redis中的实现,相信会对个人编程水平有很大帮助.这里记录下我阅读Redis源码的心得.从我自己比较关心的几个技术点出发,

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

Memcache-Java-Client-Release源码阅读(之七)

一.主要内容 本章节的主要内容是介绍Memcache Client的Native,Old_Compat,New_Compat三个Hash算法的应用及实现. 二.准备工作 1.服务器启动192.168.0.106:11211,192.168.0.106:11212两个服务端实例. 2.示例代码: String[] servers = { "192.168.0.106:11211", "192.168.0.106:11212" }; SockIOPool pool =