2

嗯,这就是问题。是否有其他语言的项目试图模仿无堆栈 python 为 python 所做的事情?

4

3 回答 3

5

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

该领域另一个值得注意的语言是 Erlang 和它的恶作剧模仿语言 Go,以及像 Scheme 这样的基于延续的语言。与 Haskell 不同,它们不使用 STG 编译​​方案。

于 2013-05-14T12:50:01.763 回答
5

Andrew Appel 很久以前写了一本书Compiling with Continuations,实现了 SML/NJ 的一些旧版本(110?)(没有堆栈,但带有垃圾收集的“延续帧”),并写了一篇论文Garbage Collection Can Be Faster Than Stack分配(这一切都在上个世纪)。

几篇论文提到了带有延续的编译,例如Flanagan

Scheme 有一个与延续相关的原语call/cc

此外,Queinnec 的Lisp In Small Pieces,甚至 J.Pitrat 的《人造生物》一书中的一章(有意识的机器的良心)

Go Routines等。

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

Chicken Scheme正在使用堆栈玩奇怪的把戏(尤其是尾调用call/cc)。

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

另请参阅调用堆栈维基页面。

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

于 2013-05-14T12:17:53.923 回答
4

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

于 2013-05-14T12:46:43.680 回答