Lua源码学习
文章平均质量分 90
https://github.com/shankusu2017/lua
联系方式:微信(qq3055867734)
shankusu2017
go lua c 服务器开发 shankusu2017.github.io
展开
-
Lua源码学习-lua.h
/*** $Id: lua.h,v 1.329 2015/11/13 17:18:42 roberto Exp $** Lua - A Scripting Language** Lua.org, PUC-Rio, Brazil (http://www.lua.org)** See Copyright Notice at the end of this file*/#ifndef lua_h#define lua_h#include <stdarg.h>#include &原创 2020-06-25 22:27:11 · 689 阅读 · 0 评论 -
Lua源码学习-lapi.c
/*** $Id: lapi.c,v 2.257 2015/11/02 18:48:07 roberto Exp $** Lua API** See Copyright Notice in lua.h*/#define lapi_c#define LUA_CORE#include "lprefix.h"#include <stdarg.h>#include <string.h>#include "lua.h"#include "lapi.h"#in原创 2020-06-25 22:14:30 · 719 阅读 · 0 评论 -
Lua源码学习-lstate.h
/*** $Id: lstate.h,v 2.128 2015/11/13 12:16:51 roberto Exp $** Global State** See Copyright Notice in lua.h*/#ifndef lstate_h#define lstate_h#include "lua.h"#include "lobject.h"#include "ltm.h"#include "lzio.h"/*** Some notes about garbag原创 2020-06-25 21:43:14 · 338 阅读 · 0 评论 -
Lua源码学习-lobject.h
/*** $Id: lobject.h,v 2.116 2015/11/03 18:33:10 roberto Exp $** Type definitions for Lua objects** See Copyright Notice in lua.h*/#ifndef lobject_h#define lobject_h#include <stdarg.h>#include "llimits.h"#include "lua.h"/*** Extra t原创 2020-06-25 21:41:54 · 428 阅读 · 0 评论 -
lua源码学习-llex.h
/*** $Id: llex.h,v 1.78 2014/10/29 15:38:24 roberto Exp $** Lexical Analyzer** See Copyright Notice in lua.h*/#ifndef llex_h#define llex_h#include "lobject.h"#include "lzio.h"#define FIRST_RESERVED 257#if !defined(LUA_ENV)#define LUA_EN...原创 2020-06-25 21:40:41 · 294 阅读 · 1 评论 -
Lua源码学习-llex.c
/*** $Id: llex.c,v 2.95 2015/11/19 19:16:22 roberto Exp $** Lexical Analyzer** See Copyright Notice in lua.h*/#define llex_c#define LUA_CORE#include "lprefix.h"#include <locale.h>#include <string.h>#include "lua.h"#include "lct原创 2020-06-25 21:34:28 · 516 阅读 · 0 评论 -
Lua源码学习-ltable.h
/*** $Id: ltable.h,v 2.21 2015/11/03 15:47:30 roberto Exp $** Lua tables (hash)** See Copyright Notice in lua.h*/#ifndef ltable_h#define ltable_h#include "lobject.h"//取表node中idx=i的Node值#define gnode(t,i) (&(t)->node[i])//提取Node中的val...原创 2020-06-25 21:31:54 · 383 阅读 · 0 评论 -
Lua源码学习-ltable.c
/*** $Id: ltable.c,v 2.117 2015/11/19 19:16:22 roberto Exp $** Lua tables (hash)** See Copyright Notice in lua.h*/#define ltable_c#define LUA_CORE#include "lprefix.h"/*** Implementation of tables (aka arrays, objects, or hash tables).** Table原创 2020-06-25 21:31:14 · 375 阅读 · 0 评论 -
Lua源码学习-lstrlib.c
/*** $Id: lstrlib.c,v 1.239 2015/11/25 16:28:17 roberto Exp $** Standard library for string operations and pattern-matching** See Copyright Notice in lua.h*/#define lstrlib_c#define LUA_LIB#include "lprefix.h"#include <ctype.h>#include &l原创 2020-06-25 21:30:23 · 762 阅读 · 0 评论 -
探索Lua5.2内部实现:Garbage Collection(2)
以下内容转载自:http://blog.csdn.net/yuanlin2008/article/details/8684869GCObjectLua使用union GCObject来表示所有的垃圾回收对象:182 /*183 ** Union of all collectable objects184 */185 union GCObject {186 GCheader g...转载 2019-06-21 15:27:49 · 97 阅读 · 0 评论 -
探索Lua5.2内部实现:Garbage Collection(1) 原理
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8558103Lua5.2采用垃圾回收机制对所有的lua对象(GCObject)进行管理。Lua虚拟机会定期运行GC,释放掉已经不再被被引用到的lua对象。基本算法基本的垃圾回收算法被称为"mark-and-sweep"算法。算法本身其实很简单。首先,系统管理着所有已经...转载 2019-06-21 11:32:46 · 149 阅读 · 0 评论 -
探索Lua5.2内部实现:TString
以下内容转载自:http://blog.csdn.net/yuanlin2008/article/details/8423923Lua使用TString结构体代表一个字符串对象。lua532相应的结构体hash用来记录字符串对应的哈希值,len用来记录字符串长度。这个结构体其实只是字符串对象的头数据,后面紧跟着字符窜内容和一个'\0'结尾。字符串"abc"对应的TString对象...转载 2019-06-21 11:08:19 · 328 阅读 · 0 评论 -
探索Lua5.2内部实现:编译系统(3) 表达式
原文地址:http://blog.csdn.net/yuanlin2008/article/details/8516325表达式(expression)在编程语言中代表一个可以返回值的语法单位,比如常量表达式,变量表达式,函数调用表达式,算术、关系和逻辑表达式等等。对于函数式编程语言来说,几乎所有的语句都是表达式,可以被估值。而对于命令式语言,一般会将语句分成表达式和陈述语句(statemen...转载 2019-06-20 20:22:21 · 264 阅读 · 0 评论 -
探索Lua5.2内部实现:编译系统(2) 跳转的处理
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8518743跳转用来控制程序的指令流程。Lua使用OP_JMP指令来执行一个跳转,有关OP_JMP的详细介绍,可以参见《虚拟机指令》。跳转可以分为条件跳转和非条件跳转。非条件跳转比较简单,我们可以先从这里入手。goto在Lua5.2中,goto和label是新加入的sta...转载 2019-06-20 20:05:07 · 478 阅读 · 0 评论 -
探索Lua5.2内部实现:编译系统(1) 概述
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8486463下面有些截图来源于lua532Lua是一个轻量级高效率的语言。这种轻量级和高效率不仅体现在它本身虚拟机的运行效率上,而且也体现在他整个的编译系统的实现上。因为绝大多数的lua脚本需要运行期动态的加载编译,如果编译过程本身非常耗时,或者占用很多的内存,也同样会影响...转载 2019-06-20 19:11:32 · 412 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(8) LOOP
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8505183Lua5.2种除了for循环之外,其他的各种循环都使用关系和逻辑指令,配合JMP指令来完成。local a = 0;while(a < 10) do a = a + 1;end 1 [1] LOADK ...转载 2019-06-20 16:23:01 · 260 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(7) 关系和逻辑指令
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8504200name args descOP_JMP A sBx pc+=sBx; if (A) close all upvalues >= R(A) + 1JMP执行一个跳转,sBx表示跳转的偏移位置,被加到当前指向下一指令的指令指针上。如果...转载 2019-06-20 16:16:37 · 204 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(6)FUNCTION
以下内容转载自https://blog.csdn.net/yuanlin2008/article/details/8494636name args descOP_CALL A B C A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1))CALL执行一个函数调用。寄存器A中存放函数对象,所有参数按顺序放置...转载 2019-06-19 23:37:25 · 150 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(5)Arithmetic
以下内容转载自https://blog.csdn.net/yuanlin2008/article/details/8494303name args descOP_ADD A B C R(A) := RK(B) + RK(C)OP_SUB A B C R(A) := RK(B) - RK(C)OP_MUL A B C R(A) := ...转载 2019-06-19 23:24:03 · 138 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(4) Table
以下内容转载自https://blog.csdn.net/yuanlin2008/article/details/8493104name args descOP_NEWTABLE A B C R(A) := {} (size = B,C)NEWTABLE在寄存器A处创建一个table对象。B和C分别用来存储这个table数组部分和hash部分的初始大小。初始大小是...转载 2019-06-19 23:16:17 · 176 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals
以下内容转载自https://blog.csdn.net/yuanlin2008/article/details/8491144在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型:a是当前函数的local变量a是外层函数的local变量,那么a是当前函数的upvaluea是全局变量local变量本身就存在于当前的register中,所有的指令都可以直接使用它的id来访...转载 2019-06-19 23:07:28 · 170 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(2) MOVE & LOAD
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8491112name args descOP_MOVE A B R(A) := R(B)OP_MOVE用来将寄存器B中的值拷贝到寄存器A中。由于Lua是register based vm,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行...转载 2019-06-17 22:58:10 · 349 阅读 · 0 评论 -
探索Lua5.2内部实现:虚拟机指令(1) 概述--转载
以下内容转载自:https://blog.csdn.net/yuanlin2008/article/details/8423951Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标。而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要。Stack based vs Register based VM根据指令获取操作数方式的不同,我们可以把虚拟机的实现分为stack ba...转载 2019-06-14 23:56:40 · 219 阅读 · 0 评论