以练代学,用 Rust 实现 Lua 解释器

299 天前
 LoongRiver

最近写了一系列文章,《用 Rust 实现 Lua 解释器》,顾名思义,介绍用 Rust 从零开始实现一个 Lua 解释器,还请大家多提意见。

我是在前年开始学习 Rust 语言。我平时工作的主力语言是古老又简陋的 C ,所以对现代编程语言的高级特性(比如泛型)基本上是第一次接触,更不要提 Rust 的所有权机制了。在读完《 Rust 程序设计语言》并写了些练习代码后,深感必须通过一个较大的项目实践才能理解和掌握。实现一个 Lua 解释器就很适合作为这个练习项目,规模适中,足够涉及 Rust 的大部分基础特性而又不至于难以企及。

在这个项目过程中,就有了把整个过程记录下来的想法。以前还在上学时从同学那里看到一本于渊的《自己动手写操作系统》,按照书中的教程实现了一个简单的操作系统,收获巨大。首先是课堂上学的操作系统等理论都落地了,其次是接触到了真实的项目并意识到了自己的无知,最后在这个过程中学习到的 ubuntu, vim, gcc, makefile 等算是给后来的工作开了个好头,并一直使用到现在。所以,我想把这个从头开始实现 Lua 解释器的过程写下来,应该也是很有意义的。于是就有了这系列文章。

学习之作,难免错误。希望各位多提意见。

1657 次点击
所在节点    程序员
18 条回复
llbbzh
299 天前
谢谢楼主,有空一定会跟着学习!!
其实这类文章,最怕的就是作者贴一大段代码,然后文字只有几个字,看到作者写了不少字,就感觉已经很了不起了
yl20181003
299 天前
感谢分享
LoongRiver
299 天前
@llbbzh 赞同。所以我在写的时候,尽量多画图,然后是列表,再然后是文字,实在不行再贴代码。
lizhenda
299 天前
厉害了,感谢分享
Helsing
299 天前
厉害,先收藏了
kernelpig
299 天前
感谢分享
suyuyu
299 天前
显得我很笨
huihuiHK
299 天前
厉害。后面可以出书了
wxf666
299 天前
性能有提升吗?
Slurp
299 天前
@wxf666 不看正文?学习用途讲啥性能。
wxf666
299 天前
@Slurp #10 我经常看到,用 Rust 重写其他语言的项目,性能就提升几十倍,的文章,

现在又看到了类似文章,所以就来问问啦
LoongRiver
299 天前
@wxf666 虽然主要是为了学习,但是也会考虑性能方面。追求性能的话,对 Rust 学的就更深入些。

1. Lua 的官方实现本身已经在性能方面很高效了,要想全面超过基本不可能的了。能尽力做到一致就很知足了。

2. 因为个人能力不足,所以直接使用了 Rust 的 Rc 来做垃圾回收。一般认为 RC 比狭义的 GC 要慢。具体讨论可以参见文章中的 [垃圾回收和 Rc]( https://wubingzheng.github.io/build-lua-in-rust/zh/ch03-05.gc_vs_rc.html) 这节。

3. 但在某些方面,我的实现是比 Lua 的官方实现要更高效的。主要是对短字符串的处理。具体参见 [字符串定义]( https://wubingzheng.github.io/build-lua-in-rust/zh/ch03-01.string_type.html) 这节。

4. 我做了一些简单的性能测试。很多情况下比官方实现慢 1 倍,但有的情况下,比如短字符串比官方实现快一些。不过我希望能在完成大部分功能后,再去做完整的性能测试和优化。所以目前做的性能测试就没贴出来。
amiaaaz
299 天前
牛,感谢分享
zuisong
299 天前
最近正在跟着这个课程学习,结果作者出现了 🥳 感谢分享
LoongRiver
299 天前
@zuisong 欢迎多提意见 :)
u823tg
298 天前
加油,感谢分享。
ViVi333
295 天前
楼主啊,写的很好,我也很想学学。但是我不会 rust 啊,看的很吃力,能不能把 rust 改成伪代码或 c 啊,这样受众会广很多。楼主看到我看到我。
LoongRiver
285 天前
@ViVi333 我的本意是为了学习 Rust ,而拿 Lua 解释器作为一个练手的项目。

不过你不会 Rust ,这也是有好处的。就是你可以只看文章里的文字说明部分,然后用自己的理解,用 C 语言自己实现一遍。如果我本来就是用 C 语言介绍的,那你可能就偷懒了,只是自己看一遍而不去自己实现,或者自己实现的时候不独立思考而是直接照搬我的代码。

自己实现一遍的收获 是远大于 只看一遍文章的。

不过 Lua 的官方实现是 C 语言,你也可以参考。网上也有很多源码阅读的文章,也有几本相关的实体书。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/956594

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX