目录
代码仓库:whoiscc/shattuck。在我写「欢迎围观」之前都不会有什么观赏价值,纯粹是为了证明我并不是在纸上谈兵。
这些年来看过、跟着做过的「3分钟发明一门编程语言!」的教程数不胜数。它们中的绝大多数都有一个共同点:从前往后。最开始几乎一定是一段展示最终效果的代码块;接下来是词法分析、语法分析,然后对语法树进行eval,全文终。你自然可以嘲笑我看的教程太不入流,但我还是想为这些「不入流」的教程再添上这么一篇。这篇教程(更准确的说,日记)的目的不只是向读者展示编写一个脚本语言的解释器需要哪些部件,而且还希望将更多的精力投入到设计语言特性的方面。甚至可以说,代码并不是这个项目的主体,而仅仅是验证思路的工具。
综上,我决定以如下的方式开展这个项目:
- 以从后往前的顺序实现解释器。如果没有足够的时间,传统意义上的「前端」甚至可以完全省略,就当做是一个只能写native拓展的Python吧
- 设计思路大体上参考(我所了解的)Python,除了两个尽可能完成的小目标
- 少用一些哈希表
- 不需要GIL
如果最后没有完成,那么也一定要弄清楚困难在哪里,算是可以加深对Python语言设计的理解的一种方式。
整个项目计划用Rust完成。这也是这个项目隐藏在表面之下的真实目的:学习和巩固Rust。如果这个目的提前达到了那么本项目即刻宣告烂尾(。如果Rust真的可以作为C/C++的无缝替换者的话,作为脚本语言的运行时应该属于它可以优雅完成的任务,这个项目算是一个粗浅的验证。
作为废话的最后一部分,shattuck的名字来自于我目前所住的公寓面