关闭

[置顶] 使用Lua Function表示Lambda calculus

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

[置顶] Erlang port driver工作原理

原文:http://blog.csdn.net/yuanlin2008/article/details/8244702 与其说erlang是一个语言运行环境,不如说它是一个虚拟的操作系统环境。在这个操作系统环境下运行着虚拟的erlang process,这些process之间是独立并行运行的,由erlang虚拟机负责调度,就像在真的操作系统中一样。作为虚拟的操作系统,当然少不了对io的处理。这些...
阅读(5626) 评论(0)

探索Lua5.2内部实现:Function

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

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

GC步骤 global_State中的gcstate记录了当前incremental gc的执行状态。根据执行状态,整个gc过程被分为很多步执行。 GCSpause GCSpause状态标志着当前没有开始gc。gc一旦开始,第一步要做的就是标识所有的root对象。root对象包括global_State引用的mainthread对象,registry table,全局的metatable和上...
阅读(801) 评论(0)

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

原文:http://blog.csdn.net/yuanlin2008/article/details/8684869 GCObject Lua使用union GCObject来表示所有的垃圾回收对象: 182 /* 183 ** Union of all collectable objects 184 */ 185 union GCObject { 186 GCheader g...
阅读(15295) 评论(1)

Ranch基本结构图

原文:http://blog.csdn.net/yuanlin2008/article/details/8691207 Ranch是一个使用erlang开发的socket acceptor pool for TCP protocols. Ranch...
阅读(15564) 评论(0)

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

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

探索Lua5.2内部实现:TString

原文http://blog.csdn.net/yuanlin2008/article/details/8423923 Lua使用TString结构体代表一个字符串对象。 /* ** Header for string value; string bytes follow the end of this structure */ typedef union TString { L_U...
阅读(17204) 评论(1)

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

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

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

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

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

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

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

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

探索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...
阅读(16283) 评论(1)

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

原文 name args desc OP_JMP A sBx pc+=sBx; if (A) close all upvalues >= R(A) + 1 JMP执行一个跳转,sBx表示跳转的偏移位置,被加到当前指向下一指令的指令指针上。如果sBx为0,表示没有任何跳转;1表示跳过下一个指令;-1表示重新执行当前指令。如果A>0,表示需要关...
阅读(15978) 评论(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中存放函数对象,所有参数按顺序放置在A后面的寄存器中。B-1表示参数个数 。如果参数列表的最后一个表达式是变长的,则B会设...
阅读(16429) 评论(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) * RK(C) OP_DIV A B C R(A) := RK(B) / RK(C)...
阅读(15857) 评论(0)
38条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:413345次
    • 积分:4239
    • 等级:
    • 排名:第7499名
    • 原创:36篇
    • 转载:0篇
    • 译文:2篇
    • 评论:36条
    博客专栏
    最新评论