嗯,这就是问题。是否有其他语言的项目试图模仿无堆栈 python 为 python 所做的事情?
3 回答
如果您指的是具有轻量级并发的无堆栈编译,Haskell 从一开始就做到了。IIRC Haskell 的第一个编译方案被称为G-machine。后来被STG-machine取代。这对于高效的惰性实际上是必要的,但简单的并发性和并行性是一个额外的好处。
该领域另一个值得注意的语言是 Erlang 和它的恶作剧模仿语言 Go,以及像 Scheme 这样的基于延续的语言。与 Haskell 不同,它们不使用 STG 编译方案。
Andrew Appel 很久以前写了一本书Compiling with Continuations,实现了 SML/NJ 的一些旧版本(110?)(没有堆栈,但带有垃圾收集的“延续帧”),并写了一篇论文Garbage Collection Can Be Faster Than Stack分配(这一切都在上个世纪)。
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、...
Haskell 和 Erlang 都包含(在标准实现中)具有多核支持的微线程/绿色线程、抢占式调度器和一些类似的通道。我能想到的 Stackless 唯一相当独特的特性是线程的序列化,尽管您有时可以通过提供一种序列化函数状态的方式来伪造它。