最近写了一系列文章,《用 Rust 实现 Lua 解释器》,顾名思义,介绍用 Rust 从零开始实现一个 Lua 解释器,还请大家多提意见。
我是在前年开始学习 Rust 语言。我平时工作的主力语言是古老又简陋的 C ,所以对现代编程语言的高级特性(比如泛型)基本上是第一次接触,更不要提 Rust 的所有权机制了。在读完《 Rust 程序设计语言》并写了些练习代码后,深感必须通过一个较大的项目实践才能理解和掌握。实现一个 Lua 解释器就很适合作为这个练习项目,规模适中,足够涉及 Rust 的大部分基础特性而又不至于难以企及。
在这个项目过程中,就有了把整个过程记录下来的想法。以前还在上学时从同学那里看到一本于渊的《自己动手写操作系统》,按照书中的教程实现了一个简单的操作系统,收获巨大。首先是课堂上学的操作系统等理论都落地了,其次是接触到了真实的项目并意识到了自己的无知,最后在这个过程中学习到的 ubuntu, vim, gcc, makefile 等算是给后来的工作开了个好头,并一直使用到现在。所以,我想把这个从头开始实现 Lua 解释器的过程写下来,应该也是很有意义的。于是就有了这系列文章。
学习之作,难免错误。希望各位多提意见。
1
llbbzh 2023-07-14 00:22:05 +08:00
谢谢楼主,有空一定会跟着学习!!
其实这类文章,最怕的就是作者贴一大段代码,然后文字只有几个字,看到作者写了不少字,就感觉已经很了不起了 |
2
yl20181003 2023-07-14 08:54:17 +08:00
感谢分享
|
3
LoongRiver OP @llbbzh 赞同。所以我在写的时候,尽量多画图,然后是列表,再然后是文字,实在不行再贴代码。
|
4
lizhenda 2023-07-14 09:16:39 +08:00
厉害了,感谢分享
|
5
Helsing 2023-07-14 09:18:31 +08:00 via iPhone
厉害,先收藏了
|
6
kernelpig 2023-07-14 09:45:00 +08:00
感谢分享
|
7
suyuyu 2023-07-14 11:05:57 +08:00
显得我很笨
|
8
huihuiHK 2023-07-14 11:28:16 +08:00
厉害。后面可以出书了
|
9
wxf666 2023-07-14 11:41:01 +08:00
性能有提升吗?
|
11
wxf666 2023-07-14 12:13:59 +08:00
|
12
LoongRiver OP @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 倍,但有的情况下,比如短字符串比官方实现快一些。不过我希望能在完成大部分功能后,再去做完整的性能测试和优化。所以目前做的性能测试就没贴出来。 |
13
amiaaaz 2023-07-14 15:54:34 +08:00
牛,感谢分享
|
14
zuisong 2023-07-14 16:23:09 +08:00
最近正在跟着这个课程学习,结果作者出现了 🥳 感谢分享
|
15
LoongRiver OP @zuisong 欢迎多提意见 :)
|
16
u823tg 2023-07-14 23:32:43 +08:00
加油,感谢分享。
|
17
ViVi333 2023-07-18 10:07:36 +08:00
楼主啊,写的很好,我也很想学学。但是我不会 rust 啊,看的很吃力,能不能把 rust 改成伪代码或 c 啊,这样受众会广很多。楼主看到我看到我。
|
18
LoongRiver OP @ViVi333 我的本意是为了学习 Rust ,而拿 Lua 解释器作为一个练手的项目。
不过你不会 Rust ,这也是有好处的。就是你可以只看文章里的文字说明部分,然后用自己的理解,用 C 语言自己实现一遍。如果我本来就是用 C 语言介绍的,那你可能就偷懒了,只是自己看一遍而不去自己实现,或者自己实现的时候不独立思考而是直接照搬我的代码。 自己实现一遍的收获 是远大于 只看一遍文章的。 不过 Lua 的官方实现是 C 语言,你也可以参考。网上也有很多源码阅读的文章,也有几本相关的实体书。 |