那就是问题所在。是否有其他语言的项目试图模仿无栈python正在为python做什么?
答案 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 Scheme和call/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唯一相当独特的功能是线程的序列化,尽管你有时可以通过提供一种序列化函数状态来伪造它。