xji*_*xji 5 f# frp reactive-programming websharper websharper.ui.next
我目前正在阅读WebSharper的文档。在有关FRP的部分中,它指出:
功能性反应式编程(FRP)通常为事件流提供事件类型,为时变值提供行为类型,并在其上提供有用的组合器。
...
但是,目前我们决定避免实施FRP。相反,我们专注于功能的子集,它定义类似于“行为”的时变View值,但不支持实时采样。事件流留给用户使用回调或第三方库来处理。这是对FRP的极大简化,并且更容易有效实施。
随着弱指针在JavaScirpt中变得可用,可以修改此决定,尤其是考虑到OCaml React的成功。
在不久的将来,我们打算提供并发ML组合器,以更好地支持处理事件流并改善组件的组成。
但是,我不确定此处描述的“事件类型”和“行为类型”之间到底有什么区别。我在Google上搜索了一些文章/教程,但是它们似乎也不是很明确。
我不确定在WebSharper的实现中没有“事件”会丢失什么。
抱歉,这个问题听起来很根本。我不熟悉与FRP相关的概念。
-
编辑:我想我找到了我的疑问的答案,那就是没有事件流的不正确之处,在FRP-事件流和信号-仅使用信号会损失什么?。要点如下:
事件流允许累积更新,而行为只能取决于所观察元素的当前值。
如果同时实现了事件和行为,则它们允许在系统内进行递归。
事件和行为之间的区别可以追溯到第一篇有关功能反应动画(PDF)的文章,该文章很好地解释了这种区别。这个想法是:
行为表示随时间变化的值-例如,鼠标X坐标随时间变化,但始终具有某些值。
事件表示系统中的离散事件-它们不时发生,并且可以触发某些更改,但并不总具有价值。例如,可以发生鼠标单击,但是您不能问“单击的当前值是多少”。
这些作为理论思想非常好,因为您可以用行为和事件来做不同的事情,并且它们很好地捕捉了反应系统中不同种类事物背后的一些直觉。
但是在实践中,实现起来非常棘手-大多数“行为”表示最终都使用采样,因此它们的行为很像离散事件(也许是因为计算机是这样工作的?),因此实际上有几个系统遵循最初的严格区分。
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |