什么是一些批评针对暴露的延续作为第一类的对象?

我觉得这是很好的第一类的延续。它允许完全的控制,在执行流动的指示。高级程序员可以开展直观的解决方案的某些种类的问题。例如,延续使用到管理国在网络服务器。语言执行情况可以提供有用的抽象概念上的延续。例如,绿线。

尽管所有这些,都有强有力的论据对第一类的延续?

有帮助吗?

解决方案

首先是,有更多然后只是调用/ cc的,当涉及到延续。我建议开始与马克Feelys纸:对一流的延续 <更好的API / p>

接下来我建议阅读有关控制操作员移动和复位,这是表示contunations的不同方式。

其他提示

现实是,许多有用的情况下,你可以使用的延续已经涵盖了专门的语言结构:扔/赶上,返回、C#/Python产率。因此,语言实施者不真的有那么多的激励向他们提供在一般化形式用于卷自己的解决方案。

在某些语言,广义的延续都是相当难以实现有效。堆为基础的语言(即大多数语言)基本上要复制堆每次创建的延续。

这些语言可以实现某些延续类似的功能,那些不断的基本堆为基础的模式,有更多的效率高于一般的情况,但是实现广义的延续,是相当多的困难和不值得的。

功能性的语言更有可能实现的延续几个原因:

  1. 他们经常实施,在继续通过风格,这意味着"呼叠"可能是一个连名单上分配堆。这使得微不足道通过一个指堆作为一个继续,因为你不需要复盖堆上下文,当你弹出目前的框架和推动一个新。(我从来没有实现CPS但这是我的理解。)
  2. 他们赞成不可改变的数据绑定,让你的老的延续了很多有用的,因为你不会有改变的内容的变量,叠指出,当你创建了它。

由于这些原因,延续有可能仍然大多只是在该领域的功能性的语言。

一个显著反对意见是实现成本。如果运行时使用堆栈,然后一流的延续需要在某些时候堆栈副本。复印成本可以控制(参见在第一级的存在代表控制延续的一个很好的策略),但它也意味着,可变的变量不能在栈上分配。这不是功能性或主要是官能的(例如,计划)语言的问题,但是这会增加显著开销面向对象语言。

  1. 大多数程序员不了解他们。如果你有代码,使用他们,这是很难找到替代程序员,他们将能够与它的工作。
  2. 继续难以实现,在某些平台上。例如,它不支持延续。

一流的延续破坏来思考代码,尤其是在语言,允许延续到势在必行分配给变量的能力,因为封闭的内部可以有毛的方式再次带来了一线生机。

比照。 肯特·皮特曼的大约延续的投诉,有关该放松保护与呼叫/ cc的相互作用棘手方式

呼叫/ cc是先进功能的编程的“跳转”(一拉的示例这里)。

在红宝石1.8实施是极为缓慢的。在1.9更好,当然大多数方案已让他们内置的,从一开始就表现良好。

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