原林的专栏

Game Maker

排序:
默认
按更新时间
按访问量

探索Lua5.2内部实现:Function

基本概念 Lua函数引入了很多functional programming的概念,这些概念使得Lua函数在使用上可谓“功能强大,简洁统一”,非常符合程序员的“审美观”。 函数在Lua中属于“带有词法范围的一类值”(first-class values with proper lexical sco...

2017-01-06 13:50:25

阅读数:2204

评论数:1

探索Lua5.2内部实现:Garbage Collection(3)

GC步骤 global_State中的gcstate记录了当前incremental gc的执行状态。根据执行状态,整个gc过程被分为很多步执行。 GCSpause GCSpause状态标志着当前没有开始gc。gc一旦开始,第一步要做的就是标识所有的root对象。root对象包括global_St...

2017-01-06 13:48:54

阅读数:1662

评论数:0

探索Lua5.2内部实现:Garbage Collection(2)

原文:http://blog.csdn.net/yuanlin2008/article/details/8684869 GCObject Lua使用union GCObject来表示所有的垃圾回收对象: 182 /* 183 ** Union of all collectable o...

2013-04-08 14:14:59

阅读数:16340

评论数:1

探索Lua5.2内部实现:Garbage Collection(1) 原理

Lua5.2采用垃圾回收机制对所有的lua对象(GCObject)进行管理。Lua虚拟机会定期运行GC,释放掉已经不再被被引用到的lua对象。 基本算法 基本的垃圾回收算法被称为"mark-and-sweep"算法。算法本身其实很简单。 首先,系统管理着所有已经创建了的对...

2013-03-13 17:55:07

阅读数:22076

评论数:2

探索Lua5.2内部实现:TString

原文http://blog.csdn.net/yuanlin2008/article/details/8423923 Lua使用TString结构体代表一个字符串对象。 /* ** Header for string value; string bytes follow the end...

2013-02-05 17:57:33

阅读数:18168

评论数:1

探索Lua5.2内部实现:编译系统(4) 表达式分类

原文:http://blog.csdn.net/yuanlin2008/article/details/8534583 常量表达式 常量表达式在Lua用来表示"nil",“true”,“false”,字符串和数字的值。在BNF中常量表达式属于终结符,也就是语法解析的最底...

2013-01-29 10:52:33

阅读数:18038

评论数:6

探索Lua5.2内部实现:编译系统(3) 表达式

原文地址:http://blog.csdn.net/yuanlin2008/article/details/8516325 表达式(expression)在编程语言中代表一个可以返回值的语法单位,比如常量表达式,变量表达式,函数调用表达式,算术、关系和逻辑表达式等等。对于函数式编程语言来说,...

2013-01-23 15:30:03

阅读数:18064

评论数:0

探索Lua5.2内部实现:编译系统(2) 跳转的处理

原文 跳转用来控制程序的指令流程。Lua使用OP_JMP指令来执行一个跳转,有关OP_JMP的详细介绍,可以参见《虚拟机指令》。跳转可以分为条件跳转和非条件跳转。非条件跳转比较简单,我们可以先从这里入手。 goto 在Lua5.2中,goto和label是新加入的statement,用来...

2013-01-21 13:07:22

阅读数:20003

评论数:3

探索Lua5.2内部实现:编译系统(1) 概述

原文 Lua是一个轻量级高效率的语言。这种轻量级和高效率不仅体现在它本身虚拟机的运行效率上,而且也体现在他整个的编译系统的实现上。因为绝大多数的lua脚本需要运行期动态的加载编译,如果编译过程本身非常耗时,或者占用很多的内存,也同样会影响到整体的运行效率,使你感觉这个语言不够“动态”。正是因...

2013-01-18 19:03:25

阅读数:23360

评论数:10

探索Lua5.2内部实现:虚拟机指令(8) LOOP

原文 Lua5.2种除了for循环之外,其他的各种循环都使用关系和逻辑指令,配合JMP指令来完成。 local a = 0; while(a < 10) do a = a + 1; end 1 [1] LOADK 0 -1...

2013-01-15 18:10:00

阅读数:17161

评论数:1

探索Lua5.2内部实现:虚拟机指令(7) 关系和逻辑指令

原文 name args desc OP_JMP A sBx pc+=sBx; if (A) close all upvalues >= R(A) + 1 JMP执行一个跳转,sBx表示跳转的偏移位置,被加到当前指向下一指令的指令指针...

2013-01-15 12:39:26

阅读数:16828

评论数:2

探索Lua5.2内部实现:虚拟机指令(6)FUNCTION

原文 name args desc OP_CALL A B C A B C   R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) CALL执行一个函数调用。寄存器A中存放函数对象,所有...

2013-01-13 20:32:01

阅读数:17381

评论数:0

探索Lua5.2内部实现:虚拟机指令(5)Arithmetic

原文 name args desc OP_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) := RK(B...

2013-01-11 18:14:27

阅读数:16668

评论数:0

探索Lua5.2内部实现:虚拟机指令(4) Table

原文 name args desc OP_NEWTABLE A B C R(A) := {} (size = B,C) NEWTABLE在寄存器A处创建一个table对象。B和C分别用来存储这个table数组部分和hash部分的初始大小...

2013-01-11 18:13:36

阅读数:18012

评论数:1

探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals

原文 在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型: a是当前函数的local变量a是外层函数的local变量,那么a是当前函数的upvaluea是全局变量 local变量本身就存在于当前的register中,所有的指令都可以直接使用它的id来访问。而对于upv...

2013-01-11 18:12:38

阅读数:19059

评论数:0

探索Lua5.2内部实现:虚拟机指令(2) MOVE & LOAD

原文 name args desc OP_MOVE A B R(A) := R(B) OP_MOVE用来将寄存器B中的值拷贝到寄存器A中。由于Lua是register based vm,大部分的指令都是直接对寄存器进行操作,而不需要...

2013-01-11 18:12:00

阅读数:20861

评论数:1

探索Lua5.2内部实现:虚拟机指令(1) 概述

原文 Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标。而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要。 Stack based vs Register based VM 根据指令获取操作数方式的不同,我们可以把虚拟机的实现分为stack based和register...

2013-01-11 18:11:34

阅读数:26933

评论数:4

提示
确定要删除当前文章?
取消 删除