【问题标题】:Is the deferred/promise concept in JavaScript a new one or is it a traditional part of functional programming?JavaScript 中的延迟/承诺概念是新概念还是函数式编程的传统部分?
【发布时间】:2012-08-04 10:19:41
【问题描述】:

我真的很喜欢 jQuery 的延迟/承诺模式或范式的想法,但有时我无法将老化的大脑包裹在更精细的点或具体的实现细节上。

事实上,最近我发现延迟/承诺模式/范式似乎早于 jQuery,并且至少在这些其他 JavaScript 库/框架中也存在:

我可能遗漏了一些,包括确实属于其他内容之一的内容,并在该列表中犯了其他错误...请对其进行编辑以更正或离开 cmets。

延迟/承诺的概念是“Q”发明的吗?它是与其他 JavaScript 库或框架一起发明的吗?还是它完全早于 JavaScript?

如果整个想法传统上是函数式编程的一部分,那么它最初是在哪里完成的,我在哪里可以阅读一般性的概念而不是这些不同的 JavaScript 实现?

或者函数式编程完全没有意义?与函数式编程相比,这个概念与并发编程更相关吗?

【问题讨论】:

标签: javascript functional-programming history promise deferred


【解决方案1】:

According to Wikipedia: 承诺一词是由 Daniel P. Friedman 和 David Wise 于 1976 年提出的,Peter Hibbard 称之为最终。 1977 年,Henry Baker 和 Carl Hewitt 在一篇论文中介绍了一个有点类似的未来概念。

见: 维基百科上的Futures and promises history

future 和/或 promise 构造首先在 MultiLisp 和 Act 等编程语言 1. 逻辑的使用 并发逻辑编程语言中用于通信的变量 与期货非常相似。这些从 Prolog with Freeze 开始 和 IC Prolog,并通过关系成为真正的并发原语 语言,并发序言,守卫喇叭条款(GHC),Parlog, Vulcan、Janus、Mozart/Oz、Flow Java 和 Alice ML。这 来自数据流编程语言的单赋值 I-var, 源自 Id 并包含在 Reppy 的并发 ML 中,很像 并发逻辑变量。

promise 流水线技术(使用期货来克服延迟) 由 Barbara Liskov 和 Liuba Shrira 于 1988 年发明,[12] 和 Mark S. Miller、Dean Tribble 和 Rob Jellinghaus 独立于 大约 1989 年的世外桃源计划的背景。[13]

承诺一词是由 Liskov 和 Shrira 创造的,尽管他们 通过名称 call-stream 来指代流水线机制,即 现在很少用了。 [...]

【讨论】:

  • 太棒了!我只是在发布我的问题后独立发现了这个,并且有大约 11 个维基百科页面可供阅读。 (-:
  • 嗯是“MultiList”和“Act 1”功能语言吗?我猜这个概念更多地与并发相关,而不是像我最初问的那样与函数式语言相关......
  • @hippietrail:它是MultiLisp,是的,它是一种函数式编程语言(Lisp/Scheme 的一种方言)。第 1 幕是一种实验性编程语言,用于构建 actor systems - 请参阅 Henry Lieberman 于 1981 年撰写的 this paper (pdf)。
  • 实际上,promise 的概念据我们所知他们更多的是 Liskov 和 Shrira,而不是 Baker 和 Hewitt,尽管他们的贡献是合理的。
【解决方案2】:

我认为在 JavaScript 中,deferred/promise 概念首先出现在 Dojo(受 Python 的 Twisted 启发),然后出现在 jQuery

值得注意的时刻是 CommonJS 小组的工作,他们为 JavaScript 的“标准化”承诺付出了很多努力,参见 ABD 提案,在此基础上 Kris Kowal 的 Q(我猜目前最流行的实现)不断发展。

Deferred(我是作者)是后来的实现,它最初的灵感来自Q,它的目标是让 Promise 在 JavaScript 中感觉更自然,同时也让 Node.js 回调风格的转换变得容易。

但是正如@rsp 所写,promise 是比 JavaScript 本身更古老的概念 :)

【讨论】:

  • DeferredMochiKit 之前在 Dojo。 Dojo 在 Mochikit 之后添加它,然后jQuery 在 Dojo 之后添加它,但 jQuery 的实现行为略有不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多