7

我目前正在阅读WebSharper的文档。在关于 FRP 的部分中,它指出:

功能响应式编程 (FRP) 通常为事件流提供 Event 类型,为时变值提供 Behavior 类型,以及对它们有用的组合器。

...

但是,目前我们决定避免实施 FRP。相反,我们专注于功能的子集,定义类似于行为的随时间变化的视图值,但不支持实时采样。事件流留给用户使用回调或第三方库来处理。这是对 FRP 的极大简化,并且更容易有效地实施。

随着 JavaScirpt 中的弱指针变得可用,这个决定可能会被修改,特别是考虑到 OCaml React 的成功。

在不久的将来,我们打算提供并发 ML 组合器,以更好地支持处理事件流并改进组件的组合。

但是,我不确定这里描述的“事件类型”和“行为类型”之间到底有什么区别。我在谷歌上搜索了一些文章/教程,但它们似乎也不是很明确。

我不确定在 WebSharper 的实现中没有“事件”会错过什么。

对不起,如果这个问题听起来很基础。我不熟悉与 FRP 相关的概念。

--

编辑:我想我在FRP - 事件流和信号 - 仅使用信号时丢失了什么?. 要点是:

  1. 事件流允许累积更新,而行为只能取决于观察到的元素的当前值。

  2. 如果事件和行为都实现了,它们允许在系统内递归。

4

1 回答 1

8

事件行为之间的区别可以追溯到第一篇关于功能反应动画(PDF) 的论文,它很好地解释了这种区别。这个想法是:

  • 行为表示随时间变化的值 - 例如,鼠标 X 坐标随时间变化,但它始终具有一定的价值。

  • 事件代表系统中的离散事件——它们时不时地发生并且可以触发一些变化,但并不总是具有价值。例如,鼠标点击可能会发生,但你不能问“点击的当前值是多少”。

这些作为理论想法非常好,因为您可以对行为和事件做不同的事情,并且它们很好地捕捉了反应系统中不同类型事物背后的一些直觉。

但在实践中,实现起来相当棘手——“行为”的大多数表示最终都使用采样,因此它们的行为很像离散事件(可能是因为计算机就是这样工作的?),因此只有少数系统实际上遵循最初的严格区分.

于 2016-09-10T14:17:20.290 回答