0%

全面梳理字符串在Lua虚拟机中的实现,以便以后查阅,也分享给我的朋友们。本笔记的内容是解析源码(lstring.c);说明字符串在虚拟机的具体实现,首先说明字符串管理器的结构以及初始化,这个管理器管理虚拟机中创建的所有常规字符串(相对长字符串类型),然后讲述调用接口(luaS_newlstr)创建字符串;

阅读全文 »

本文是为了将sshd服务公开在公网时,为加强安全性设置google二次验证的配置方式记录;这里对免密登陆前做一次验证码登陆;依靠google的安全性验证防止攻击.

阅读全文 »

Lua5.1.4的lgc.c文件一共使用了710行代码来实现gc的整个回收过程。当我阅读完整个代码,尝试着理解作者的设计思路,会想到这样几个问题:作者对gc的整个算法实现是否有理论依据?作者是先有理论还是先有实现?如果是我们自己重新进行gc的算法设计是否有可能有更恰当的解决方案?这些问题的答案也许就是在阅读源代码之中,重新自己的实践中寻找到答案。

阅读全文 »

理解Lua中对字符串的处理方式,可以看到哈希表这种数据结构在实际开发中的作用;从而在开发的过程中对哈希加深理解和运用,顾名思义哈希,有从大的空间哈希到一个小的空间里,也有从小的空间哈希到一个很大的空间里,但在代数学的术语里就是映射,从大的空间映射到小的空间里,固然有可能碰到映射到一个位置上,所以产生了碰撞,处理的方法就是将碰撞的节点链接在一起。

阅读全文 »

要理解Lua虚拟机的运行原理最重要的重点就是要理解源码解析函数定义成指令集的原理,以及在运行时调用函数的过程,本文从源码解析和运行时代码两个角度分析函数的整个过程,其中指令集是这两个步骤的桥梁。

阅读全文 »

撰写本文以解释为什么要分析Lua源码,以及从分析Lua源码中可以学习到的知识体系。
众所周知学习Lua源码包括两个方面的内容,一方面如何将Lua源文件如何解释”编译”成字节码,另一个方面Lua的VM加载已经编译的字节码进行解释运行;由此两方面的内容可以构成一个完整的知识体系,进而在学习的过程中扩展相关的知识。

阅读全文 »

通过元表metatable细节分析,能够更好的理解metatable在整个lua的使用中的作用,通过原理更好的利用lua的特性;首先metatable的元表,系统会给一些默认的元表方法,其次玩家可以通过setmetatable的API设置元表,这样玩家就自定义table的运行时的一些行为。我的理解是lua的设计者尝试想通过metatable,来封装统一table的数据和行为,接近于面向对象的思路,但lua作为一门嵌入式的语言,是增强宿主语言的能力,因为力求实现和使用简洁又能实现统一。

阅读全文 »

上一篇文章提到在设置一个新的键值时,当没有可用的空间时,会出发rehash操作,而上文也提到设置键值是关乎Lua在宿主语言中运行的性能最重要的操作,而当设置键值newkey操作触发rehash时,rehash的性能又关乎到newkey的性能,具体过程参看下列详细的分析过程,其中rehash函数中的computesizes和resize函数需要重点理解。

阅读全文 »

本文从两个操作说明一个新的键值插入到table的哈希表中的过程;插入键值对Lua表的操作相当频繁,其函数的性能也关乎到Lua在宿主语言中的性能;一个操作是newkey函数,通过查找一个新的可用的哈希位置来插入键值,当没有可用位置时,引发另外一个操作就是rehash,这个操作会重新判定Lua表(Table)的数组长度和哈希表的长度,从而腾出新的位置插入当前节点;具体过程参见详细分析。

阅读全文 »

平时对于以2的多少次方求解相当方便但是以2为底的对数计算用算法实现还真没认真想过,Lua源码中有一个函数详细计算了以2为底的数的近似值的方法,用来计算Lua表中哈希部分的长度值,这个值使用以2为底的对数值来保存的.

阅读全文 »