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

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

问题描述:

那么这就是问题所在。是否有其他语言的项目试图模仿python的堆栈python?是否有像其他语言项目(Java,Lisp,Haskell,Go等)的任何Stackless Python

+1

无堆栈python的核心优势在于它提供了一条围绕GIL的途径。除此之外,它并不令人印象深刻。由于其他语言没有GIL,因此“执行python的无堆栈python”并不是很有意义。 – sclv 2013-05-14 13:31:55

+1

你可以更具体地了解什么语言或运行时功能/特别是/你看到堆栈python提供给python?因为许多语言支持先发制人的绿线和更多,而不需要模仿。 – 2013-05-14 13:55:28

安德鲁·阿佩尔写了很久以前一本书Compiling with Continuations,实施了一些旧版本(110?)SML/NJ(不堆栈,但与收集“的延续帧”垃圾),并写了一篇论文(这一切上个世纪)。

几篇论文提到汇编continuations例如, Flanagan

方案有一个延续相关的原始call/cc

此外,Queinnec的Lisp In Small Pieces,甚至从J.Pitrat的书Artificial Beings (the conscience of a conscious machine)

而且Go Routines等一章..

最近GCC给出-fsplit-stack颇为相似(和有用的特别是为实施Go Language的GCC的前端)以及GCC编译的许多语言(包括C & C++)可用(小心)。

Chicken Scheme正在玩堆栈中的奇怪技巧(特别是对于tail callscall/cc)。

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

另请参阅call stack wikipage。

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

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

如果您指的是轻量并发的无堆栈编译,Haskell从一开始就这样做了。 IIRC第一个Haskell编译方案被称为G-machine。后来被STG机器取代。这对于有效的懒惰来说实际上是必要的,但简单的并发性和并行性成为额外的好处。

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