各位新年好,在介绍版本更新内容之前,先展示一段冒泡排序代码。
输出如下
上面这段代码根据成绩进行冒泡排序,结合了变量赋值、函数调用返回、table读写、if-while控制语句、内置函数、gc垃圾回收等功能,可以说一个虚拟机雏形接近完成。
版本更新内容
V1.5版本
实现table数据结构,包括构造table、读写成员、计算数组长度、自动扩容
实现内置函数tostring、print、floor、assert、getn
添加测试文件,实现启动自检
V1.4.1版本
重组代码结构,添加gc算法的测试用例
实现单行注释、运行异常捕获、局部变量作用域
编写makefile,支持linux编译
开发感想
在自己动手撸虚拟机之前,一直觉得编译器深不可测,现在觉得和平日写业务比,难度也不是特别大
虚拟机分编译部分和执行部分,编译部分偏重对于语法的抽象和拆解,其中指令生成部分较为费解,基于寄存器的指令难度远大于基于堆栈的指令
执行部分比较无脑,一行行顺序执行指令即可,关键点在于提升执行效率,这部分要求性能极为苛刻,二分查找都显得不够快,最好能够O(1)时间完成。 以及内存管理,包括内部数据结构的实现、gc的执行效率等,重在优化性能。
对比当前热门语言如python、golang,虚拟机应提供协程和通信机制,扩展性好,执行效率有时候反倒不是特别重要。
lua作为一门学术性语言,存在意义是为了发paper,设计者并没有过多为游戏、后端服务器等场景做调优,总体来说,执行效率一般。但好在代码量小,可以作为小白鼠来剖析。
领取专属 10元无门槛券
私享最新 技术干货