近日在工作之余,对编译原理相关基础知识稍有涉猎。开了一个练手项目,作为对这段时间学习的一个小测验。
我选择了 Unlambda 这门编程语言,它是一个函数式的 esolang,由法国数学家 David Madore 于 1999 年设计。之所以尝试实现这门语言,主要是因为它语法特性极为简单,实现起来比较容易。尽管如此,实现的过程还是具有一定的挑战性的,比如 continuation 的实现、promise 的实现等等。
我看了一下现有的 Unlambda 解释器实现,基本上都是 AST walker,并用 CPS 来实现 continuation。这其实也是“官方”推荐的实现思路。为了追求挑战,我决定另辟蹊径,尝试设计了 Unlambda VM 和对应的指令集,并借助 segmented stack 实现 continuation。目前已达到基本可用的状态,但只做了一些简单的测试,有一些问题还没有修复。
由于是第一次尝试,所以设计思路和具体实现都比较粗糙,还望各位前辈不吝赐教。
1
Mistwave 2020-02-09 02:27:07 +08:00 via iPhone
有点强,先马再看
|