我最近读过关于 无堆栈Python 与普通的 cPython 相比,它似乎有很多优点。它具有所有这些很酷的功能,例如无限递归、微线程、延续等。同时比 cPython 更快(大约 10%,如果 Python 维基 是值得相信的) 与其兼容(至少版本 2.5、2.6 和 3.0)。

所有这些看起来好得令人难以置信。然而, 坦斯塔足球俱乐部, ,我没有看到 Python 社区对 Stackless 有太多热情,并且 公众号 219 从未实现。这是为什么?Stackless 的缺点是什么?Stackless的衣柜里藏着什么骷髅?

(我知道 Stackless 并不提供真正的并发,只是一种更简单的并发编程方式。这并不真正困扰我。)

有帮助吗?

解决方案

我不知道哪里是“无堆栈是快10%”的维基是从哪里来的,但话又说回来,我从未试图衡量这些性能数字。我想不出什么Stackless的确实有所作为那么大。

无堆栈是一个惊人的工具与若干组织/政治问题。

在第一来自历史。基督教Tismer开始谈论最终成为Stackless的大约10年前。他有他想要的东西的想法,但有一个很难解释他在做什么和为什么人们应该使用它。这部分是因为他的背景没有关于协同程序一样的想法和CS的训练,因为他的发言和讨论都很实现为导向,这是任何人都很难不延续已经臀部深的了解如何使用它作为一个解决方案他们的问题。

出于这个原因,初始文档差。有如何使用它,从第三方贡献者的最佳一些描述。在2007年PYCON我给它去了相当不错的“使用无堆栈”的演讲,根据PYCON调查数字。理查德克斯图做了伟大的工作,收集这些,更新 stackless.com ,并保持分布,当新的Python版本出现。他 CCP游戏,在线前夕,它采用无堆栈作为他们的游戏系统的一个重要组成部分开发商的员工。

中国共产党游戏也是最大的现实世界的例子人,当他们谈论Stackless的使用。对于无堆栈的主要教程是授予奥尔森的“介绍并行编程与Stackless的Python的” ,这也是游戏为主。我认为这给人一个倾斜的想法,无堆栈是游戏为主,当它的更多的游戏更容易延续为主。

另一个困难一直是源代码。在其原来的形式,它需要改变到Python的许多地方,这让吉多·范罗苏姆,Python的铅,谨慎。的部分原因,我认为,是呼叫/立方厘米这是为以后删除支持“时有更好的更高级别的形式太像支持转到”。我不能肯定这段历史,所以刚读这一段称为“无堆栈使用需要太多的变化。”

以后的版本并不需要更改,Tismer继续推动将其纳入了Python。虽然有一些考虑,官方立场(据我所知)是CPython的不仅是一个Python实现,但它意味着作为一个参考实现,它不会包含Stackless的功能,因为它不能由Jython的实现或铁的Python。

有对“显著代码库的修改”绝对没有计划。从Arafangion的(见注释)报价和引用的超链接是从大约2000/2001。该结构性变化也早已完成,这就是我上面提到的。无堆栈,因为它现在是稳定的,成熟的,只有小的调整,对代码库在过去的几年里。

与Stackless的最后一个限制 - 存在用于无堆栈没有强烈的拥护者。 Tismer现在是深深地参与 PyPy ,这就是Python的Python的实现。他已经实施了PyPy的Stackless的功能,并认为它大大优于Stackless的本身,并认为PyPy是未来的发展方向。 TEW保持无堆栈,但他并不感兴趣的宣传。我认为这个角色之中,却不见我怎么可能从它使收入。

但如果你想在Stackless的培训,随意的我联系的!)

其他提示

花了相当长时间才找到这个讨论。在这 时间我不是PyPy但与Psyco的2年的事情,直到停止健康这一切很突然。我现在活跃起来,并设计一个 另一种方法 - 将介绍它于2012年EuroPython

大多数安德鲁斯陈述是正确的。一些 次要添加剂:

无堆栈比CPython的,10年前显著更快,因为我优化了解释器。当时,圭多是没有准备好。几年后,人们也做了类似的优化,更和更好的,这使得无堆栈稍微慢一点,符合市场预期。

在包含:好了,在开始的时候我是非常爱出风头,并确信Stackless的是要走的路。后来,当它几乎可能得到包括在内,我失去了这种兴趣,宁愿让 它保持这样,部分是出于无奈,部分地 保持无堆栈的控制。

喜欢的参数“其他实现方式不能做到这一点”总觉得瘸子给我,因为有些情况下也可以使用这种说法其它例子。我想我最好忘记这一点,保持良好的友谊与圭多,有自己的发行版。

同时事情再次发生变化。我工作的PyPy和无堆栈作为扩展将谈论有时后

干杯 - 克里斯

如果我没有记错,无堆栈被提名为纳入正式的CPython,但无堆栈的作者告诉CPython的人不这样做,因为他计划做的代码库的一些显著的变化 - presumeably他想整合稍后完成时,该项目是更加成熟。

我也有兴趣在这里的答案。我打得有点与Stackless的,它看起来像这将是一个良好的坚实除了标准的Python。

PEP 219确实提到的潜在困难与来自C代码调用Python代码,Python是否要改变到一个不同的堆栈。有将需要检测和防止这种(以避免捣毁C栈)的方式。我认为这是容易处理的,所以我也想知道,为什么无堆栈必须站在自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top