yuanlin2008
码龄17年
  • 491,406
    被访问
  • 36
    原创
  • 1,435,113
    排名
  • 346
    粉丝
  • 4
    铁粉
关注
提问 私信
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2005-10-25
博客简介:

原林的专栏

博客描述:
Game Maker
查看详细资料
个人成就
  • 获得137次点赞
  • 内容获得42次评论
  • 获得49次收藏
创作历程
  • 2篇
    2017年
  • 17篇
    2013年
  • 19篇
    2012年
成就勋章
TA的专栏
  • 探索Lua5.2内部实现
    17篇
  • 探索Lua5.2内部实现
    15篇
  • Erlang OTP
    4篇
  • Unity3D
    4篇
  • bintalk介绍
    4篇
  • Graphics
    1篇
  • 其他
    7篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

探索Lua5.2内部实现:Function

基本概念Lua函数引入了很多functional programming的概念,这些概念使得Lua函数在使用上可谓“功能强大,简洁统一”,非常符合程序员的“审美观”。函数在Lua中属于“带有词法范围的一类值”(first-class values with proper lexical scoping)。所谓“一类值”(first-class values),应该符合以下条件:
原创
发布博客 2017.01.06 ·
5145 阅读 ·
1 点赞 ·
1 评论

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

GC步骤global_State中的gcstate记录了当前incremental gc的执行状态。根据执行状态,整个gc过程被分为很多步执行。GCSpauseGCSpause状态标志着当前没有开始gc。gc一旦开始,第一步要做的就是标识所有的root对象。root对象包括global_State引用的mainthread对象,registry table,全局的metatable和上
原创
发布博客 2017.01.06 ·
2626 阅读 ·
1 点赞 ·
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
原创
发布博客 2013.04.08 ·
17590 阅读 ·
8 点赞 ·
1 评论

Ranch基本结构图

原文:http://blog.csdn.net/yuanlin2008/article/details/8691207Ranch是一个使用erlang开发的socket acceptor pool for TCP protocols.Ranch
原创
发布博客 2013.03.22 ·
16621 阅读 ·
1 点赞 ·
0 评论

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

Lua5.2采用垃圾回收机制对所有的lua对象(GCObject)进行管理。Lua虚拟机会定期运行GC,释放掉已经不再被被引用到的lua对象。基本算法基本的垃圾回收算法被称为"mark-and-sweep"算法。算法本身其实很简单。首先,系统管理着所有已经创建了的对象。每个对象都有对其他对象的引用。root集合代表着已知的系统级别的对象引用。我们从root集合出发,就可以访问到系统引用
原创
发布博客 2013.03.13 ·
24717 阅读 ·
8 点赞 ·
2 评论

使用Lua Function表示Lambda calculus

http://blog.csdn.net/yuanlin2008/article/details/8627081很多程序语言所带给你的“完美”的感觉都来自于数学抽象之美。在Lua中,function被描述成“具有真正的词法范围的一类值”(first-class values with proper lexical scoping)。所谓的“一类值”,应该满足以下条件:可
原创
发布博客 2013.03.05 ·
23808 阅读 ·
4 点赞 ·
2 评论

探索Lua5.2内部实现:TString

原文http://blog.csdn.net/yuanlin2008/article/details/8423923Lua使用TString结构体代表一个字符串对象。/*** Header for string value; string bytes follow the end of this structure*/typedef union TString { L_U
原创
发布博客 2013.02.05 ·
19249 阅读 ·
5 点赞 ·
1 评论

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

原文:http://blog.csdn.net/yuanlin2008/article/details/8534583常量表达式常量表达式在Lua用来表示"nil",“true”,“false”,字符串和数字的值。在BNF中常量表达式属于终结符,也就是语法解析的最底端,在simpleexp函数中被解析出来,并创建对应类型的expdesc对象。VNIL,VTRUE和VFALSE这三个类型
原创
发布博客 2013.01.29 ·
19030 阅读 ·
5 点赞 ·
4 评论

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

原文地址:http://blog.csdn.net/yuanlin2008/article/details/8516325表达式(expression)在编程语言中代表一个可以返回值的语法单位,比如常量表达式,变量表达式,函数调用表达式,算术、关系和逻辑表达式等等。对于函数式编程语言来说,几乎所有的语句都是表达式,可以被估值。而对于命令式语言,一般会将语句分成表达式和陈述语句(statem
原创
发布博客 2013.01.23 ·
19431 阅读 ·
4 点赞 ·
0 评论

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

原文跳转用来控制程序的指令流程。Lua使用OP_JMP指令来执行一个跳转,有关OP_JMP的详细介绍,可以参见《虚拟机指令》。跳转可以分为条件跳转和非条件跳转。非条件跳转比较简单,我们可以先从这里入手。goto在Lua5.2中,goto和label是新加入的statement,用来执行非条件跳转。这两个statement分别在lparser.c中的gotostat和labelsta
原创
发布博客 2013.01.21 ·
21349 阅读 ·
5 点赞 ·
3 评论

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

原文Lua是一个轻量级高效率的语言。这种轻量级和高效率不仅体现在它本身虚拟机的运行效率上,而且也体现在他整个的编译系统的实现上。因为绝大多数的lua脚本需要运行期动态的加载编译,如果编译过程本身非常耗时,或者占用很多的内存,也同样会影响到整体的运行效率,使你感觉这个语言不够“动态”。正是因为编译系统实现的非常出色,我们在实际使用lua时基本感觉不到这个过程的存在。要实现一个Lua的编译
原创
发布博客 2013.01.18 ·
25906 阅读 ·
11 点赞 ·
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 ; 0 2 [2] LT 0 0 -2
原创
发布博客 2013.01.15 ·
18164 阅读 ·
4 点赞 ·
1 评论

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

原文nameargsdescOP_JMPA sBxpc+=sBx; if (A) close all upvalues >= R(A) + 1JMP执行一个跳转,sBx表示跳转的偏移位置,被加到当前指向下一指令的指令指针上。如果sBx为0,表示没有任何跳转;1表示跳过下一个指令;-1表示重新执行当前指令。如果A>0,表示需要关
原创
发布博客 2013.01.15 ·
18479 阅读 ·
5 点赞 ·
2 评论

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

原文nameargsdescOP_CALLA B CA B C   R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1))CALL执行一个函数调用。寄存器A中存放函数对象,所有参数按顺序放置在A后面的寄存器中。B-1表示参数个数 。如果参数列表的最后一个表达式是变长的,则B会设
原创
发布博客 2013.01.13 ·
18507 阅读 ·
4 点赞 ·
1 评论

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

原文nameargsdescOP_ADDA B CR(A) := RK(B) + RK(C)OP_SUBA B CR(A) := RK(B) - RK(C)OP_MULA B CR(A) := RK(B) * RK(C)OP_DIVA B CR(A) := RK(B) / RK(C)
原创
发布博客 2013.01.11 ·
17559 阅读 ·
6 点赞 ·
0 评论

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

原文nameargsdescOP_NEWTABLEA B CR(A) := {} (size = B,C)NEWTABLE在寄存器A处创建一个table对象。B和C分别用来存储这个table数组部分和hash部分的初始大小。初始大小是在编译期计算出来并生成到这个指令中的,目的是使接下来对table的初始化填充不会造成reh
原创
发布博客 2013.01.11 ·
19375 阅读 ·
8 点赞 ·
1 评论

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

原文在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型:a是当前函数的local变量a是外层函数的local变量,那么a是当前函数的upvaluea是全局变量local变量本身就存在于当前的register中,所有的指令都可以直接使用它的id来访问。而对于upvalue,lua则有专门的指令负责获取和设置。全局变量在lua5.1中也是使用专门的指令,而5.2
原创
发布博客 2013.01.11 ·
20744 阅读 ·
7 点赞 ·
1 评论

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

原文nameargsdescOP_MOVEA BR(A) := R(B)OP_MOVE用来将寄存器B中的值拷贝到寄存器A中。由于Lua是register based vm,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行压栈和弹栈,所以需要OP_MOVE指令的地方并不多。最直接的使用之处就是将一个local变量
原创
发布博客 2013.01.11 ·
23209 阅读 ·
7 点赞 ·
2 评论

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

原文Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标。而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要。Stack based vs Register based VM根据指令获取操作数方式的不同,我们可以把虚拟机的实现分为stack based和register based。Stack based vm对于大多数的虚拟机,比如JVM,Python,都采用
原创
发布博客 2013.01.11 ·
33019 阅读 ·
12 点赞 ·
4 评论

程序员绘图利器dot

原文作为程序员,我们离不开使用各种图形来描述软件。毕竟,图形描述方法比起直接看代码更加形象,更符合我们的思维方式。大多数的绘图软件,比如viso或者dia,都可以满足一般软件开发中对于绘图的需求了。无论是UML还是其他软件图,使用这些软件来制作都比较得心应手。然而,程序员作为软件的制作者,对于自己使用的软件的要求一般都会比较苛刻。我们总是在问自己,我们所使用的工具是最适合我们的吗?他能为我
原创
发布博客 2012.12.17 ·
25000 阅读 ·
5 点赞 ·
0 评论
加载更多