是否有任何Stackless Python像其他语言的项目(Java,Lisp,Haskell,Go等)

时间:2013-05-14 12:16:01

标签: python haskell compiler-construction lisp interpreter

那就是问题所在。是否有其他语言的项目试图模仿无栈python正在为python做什么?

3 个答案:

答案 0 :(得分:5)

Andrew Appel很久以前写过一本书Compiling with Continuations,实现了SML / NJ的一些旧版本(110?)(没有堆栈,但是垃圾收集了“延续帧”),并写了一篇论文{{ 3}}(上个世纪的所有这些)。

有几篇论文提到编译Garbage Collection Can Be Faster Than Stack Allocation,例如continuations

Scheme具有与延续相关的原语Flanagan

此外,Queinnec的call/cc,甚至是J.Pitrat的书Lisp In Small Pieces

中的一章

Artificial Beings (the conscience of a conscious machine)等等。

最近的GCC给出Go Routines非常相似(并且特别适用于GCC的-fsplit-stack前端的实现),并且可以在GCC编译的许多语言中使用(小心)(包括C) & C ++)。

Go Language正在玩堆栈的奇怪技巧(特别是Chicken Schemecall/cc)。

所以我不认为 Stackless Python 是第一个想到这个(并实现这些想法)。

另请参阅tail calls wikipage。

PS。当然还有Haskell,Erlang,Oz,......

答案 1 :(得分:5)

如果你的意思是使用轻量级并发进行无堆栈编译,那么Haskell从一开始就是这样做的。 IIRC Haskell的第一个编译方案被称为 G-machine 。后来被 STG-machine 取代。这对于有效的懒惰来说实际上是必要的,但是简单的并发性和并行性是额外的奖励。

这个领域的另一个值得注意的语言是Erlang及其糟糕的笑话模仿语言Go,以及像Scheme这样的基于延续的语言。与Haskell不同,它们不使用STG编译方案。

答案 2 :(得分:4)

Haskell和Erlang都包含(在标准实现中)具有多核支持的微线程/绿色线程,抢占式调度程序以及一些通道模拟。我能想到的Stackless唯一相当独特的功能是线程的序列化,尽管你有时可以通过提供一种序列化函数状态来伪造它。