在计划中使用承诺的主要优点是什么?

时间:2017-01-10 09:36:21

标签: scheme

务实地说,使用promises的主要优点是什么?你能告诉我一些真实有用的承诺的例子吗?

1 个答案:

答案 0 :(得分:1)

在Scheme中,promise只是一个值,其任务尚未完成,如果您从未使用该值,则永远不会计算该值。简而言之,这是一种在其他急切的方案中进行懒惰评估的方法。一种典型的方法是对流而不是列表进行计算。

使用列表,您可以使用更高阶的函数,以便您可以拥有一个列表,然后根据您感兴趣的值对其进行过滤,然后转换这些值,或许在某些时候您有足够的值来生成所需的值。这很好,因为你可以抽象每一步,这样你就可以制作只做一步的逻辑并组成步骤来制作整个程序,但在这种情况下,第一步需要完全完成,然后下一步才能处理结果第一个可能是因为如果你正在搜索0到1000之间的第一个素数,那么迭代在每个步骤中的所有数字可能不是那么有效。这是流进来的地方。

使用流,代码看起来相同,但中间结果是由需要产生的。流是一对,其中部分是承诺的,因此否则将成对的代码被延迟直到使用这些值。每个步骤只为下一步产生足够的数据,因此,如果第一步只需要迭代20%的元素,最后一步计算出最终结果,那么80%的剩余部分将永远不会被处理。步骤。使用这种结构,初始流也可以是无限的,就像0中的所有数字都增加1一样。

使用流媒体需要处罚。想象一下,你制作的算法无论如何都会访问所有元素。然后,算法的流版本会更慢,因为与没有懒惰的计算相比,创建的承诺和强制会产生编程开销。

您可能有兴趣看到Hal Abelson explaining streams及其利弊。

还有其他替代方案来进行惰性评估。一个是generators。在这里,您还可以制作可组合的过程,该过程采用发电机并生成发电机。迭代将像流一样需要。

另一种选择是transducers。这也是可组合的,并且像流和生成器一样迭代,但与生成器不同,初始数据不能像流和生成器那样是无限序列,除非底层结构支持它。

在这个答案中使用promises或任何其他技术的优点不是特定于方案的。它们适用于所有热切的编程语言!