【问题标题】:Are there any Stackless Python like projects for other languages (Java, Lisp, Haskell, Go etc) [closed]是否有其他语言(Java、Lisp、Haskell、Go 等)的类似 Stackless Python 的项目 [关闭]
【发布时间】:2013-05-14 12:16:01
【问题描述】:

这就是问题所在。是否有其他语言的项目试图模仿 stackless python 为 python 所做的事情?

【问题讨论】:

  • stackless python 的核心优势在于它提供了绕过 GIL 的方法。除此之外,它不是很令人印象深刻。由于其他语言没有 GIL,所以做“无堆栈 python 为 python 所做的事情”并不是很有意义。
  • 您能否更具体地了解/具体/您看到无堆栈 python 提供给 python 的语言或运行时特性?因为许多语言都支持抢占式绿色线程等,无需模仿。

标签: python haskell compiler-construction lisp interpreter


【解决方案1】:

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

几篇论文用continuations 提及编译,例如Flanagan

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

还有,Queinnec 的 Lisp In Small Pieces,甚至还有 J.Pitrat 书中的一章 Artificial Beings (the conscience of a conscious machine)

还有Go Routines等……

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

Chicken Scheme 正在与堆栈玩奇怪的把戏(尤其是tail callscall/cc)。

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

另请参阅call stack 维基页面。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2017-05-08
        • 2010-11-13
        相关资源
        最近更新 更多