一旦有了协同,您就可以创建管道(haskell:管道、管道;python:生成器)或协作事件循环(python: curio)。一旦你有了期货,你似乎也可以这样做:管道(生锈:期货-rs)和事件循环(铁锈: tokio)。因为期货是不合作的,他们需要一个基于回调的(甚至基于投票的期货需要回调)调度器来执行线程或进程池中的阻塞任务。将期货(库级)和协同(语言级)结合起来有什么好处,就像这些语言所做的那样:(python:异步),(铁锈: rfc),(ecmascript 6+)。从根本上说,它们似乎是同一个问题的冲突解决方案。
我不是在找正反比较,我也不相信期货是“一枪”合作的说法。看看铁锈,它用期货建立了一个完整的基于状态机的事件框架。我想知道python/异步和javascript为什么都需要协同和未来。为什么铁锈计划在其未来增加合作呢?这与事件的可镇定性有关吗?还是隐含的合作堆栈相对于连续传递期货的显式堆叠?我并不是完全理解这个论点,因为期货和合作都是用延续来实现的.还是它与直接或间接的风格有关?
发布于 2018-09-09 17:32:19
这些都是不同的(虽然相关的)不同的想法,不同的权力。
当更强大的工具可用时,为什么要使用功能较弱的工具呢?有时,实力较弱的工具是适合这项工作的工具。使用类型静态地对程序的不变量进行编码是很有用的,因为它可以让您确定什么东西不能做。
例如,当对远程服务器进行REST调用时,未来可能就足够了。如果REST客户端公开了一个生成器,您将不得不处理它可能多次屈服的可能性,即使您知道只有一个结果。如果它暴露了协同效应,那么您必须查阅文档,才能准确地确定您应该如何与它交互--尽管您实际上只需要做一件事情,这在您处理未来时是显而易见的。
https://stackoverflow.com/questions/52244749
复制相似问题