Unlambda 的一个朴素实现

2020-02-09 01:33:27 +08:00
 CismonX

近日在工作之余,对编译原理相关基础知识稍有涉猎。开了一个练手项目,作为对这段时间学习的一个小测验。

我选择了 Unlambda 这门编程语言,它是一个函数式的 esolang,由法国数学家 David Madore 于 1999 年设计。之所以尝试实现这门语言,主要是因为它语法特性极为简单,实现起来比较容易。尽管如此,实现的过程还是具有一定的挑战性的,比如 continuation 的实现、promise 的实现等等。

我看了一下现有的 Unlambda 解释器实现,基本上都是 AST walker,并用 CPS 来实现 continuation。这其实也是“官方”推荐的实现思路。为了追求挑战,我决定另辟蹊径,尝试设计了 Unlambda VM 和对应的指令集,并借助 segmented stack 实现 continuation。目前已达到基本可用的状态,但只做了一些简单的测试,有一些问题还没有修复。

由于是第一次尝试,所以设计思路和具体实现都比较粗糙,还望各位前辈不吝赐教。

2168 次点击
所在节点    分享创造
1 条回复
Mistwave
2020-02-09 02:27:07 +08:00
有点强,先马再看

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

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

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

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

© 2021 V2EX