gpt4 book ai didi

haskell - 推拉式和箭头式 FRP 有什么根本区别?

转载 作者:行者123 更新时间:2023-12-02 19:49:59 28 4
gpt4 key购买 nike

我想在 Haskell 中学习 FRP,但是决定使用哪个库有点困难。许多尝试似乎已经失败,有些似乎又复活了(例如最近在 Yampa 上的事件)。

从我读到的内容来看,FRP 似乎有两种“类型”:一侧是推拉式 FRP(如 Reactive-banana 和 Reflex),另一侧是箭头 FRP(如 Yampa)。好像 Fran 和 FrTime 时期也曾经有一些“经典的 FRP”,但我没有发现其中有任何最近的事件。

  • 这两种(或三种)FRP 方法真的是根本不同的吗?

  • 其中一个理论是否已经过时,而另一个理论将是“ future 的东西”?

  • 或者它们是否必须并行发展,以满足不同的目的?

  • 我是否列出了每个类别中最著名的库,或者是否还有其他可供考虑的选项(Sodium、Netwire 等)?

<小时/><子>我终于看了 J. Abrahamson 评论中推荐的 [Evan Czaplicki 的演讲](https://www.youtube.com/watch?v=Agu6jipKfYw)。这非常有趣,确实帮助我澄清了事情。我强烈推荐给任何觉得这个问题有趣的人。

最佳答案

我访问 Haskell.org 来调查您的问题,我发现您应该阅读两篇重要论文以进一步研究,并且我正在根据这些学术论文构建对您问题的答案。

Push-Pull FRP by Conal Elliott

Generalising Monads to Arrows by John Hughes

<小时/>
  1. 是的,但也不是。根据 Elliot 的说法,是数据驱动的 FRP 评估,涉及所谓的“需求”驱动的评估。作者建议使用拉取,因为推送往往会在数据输入之间闲置。关键在于:推拉结合并平衡这些行为,其主要目的是最大限度地减少重新计算值的需要。很简单;通过推拉操作 FRP 可以加快 react 能力。 箭头是一种使用抽象类型链接值并同时评估它们的不同技术。所有这些概念都是根本不同的。但不要相信我的话:

    The nature of the Arrow interface is problematic for the goal of minimal re-evaluation. Input events and behaviors get combined into a single input, which then changes whenever any component changes, (Elliott).

    因此,Arrow 与推拉的目标相矛盾。这并不意味着您不能同时使用所有这些,只是它会很复杂,并且如果没有抽象的 Arrow 类型,您将无法计算某些内容。

  2. 我还没有找到关于哪些方法是“ future 之路”的学术观点。请注意,箭头可以很好地处理同时性。如果你可以实现箭头并使用推拉来最小化计算,那将是 future 的方向。

  3. 是的,它们有不同的目的。正如我所说,它们可以一起制定,但很难实现,即使它确实有效,也可能会抵消推拉的 react 速度优势。

  4. 这是主观的,但 Reactive 和 Yampa 似乎是 FRP 最常被引用的语言库。我想说 Conal Elliott 的 Reactive 有着很深的根基,Yampa 也很成熟。 Netwire 等其他项目作为替代品出现,但它们取代巨头可能还需要一段时间。

<小时/>

希望这有帮助!就像我说的,阅读我指出的文章将使您更好地了解箭头、推和拉之间的语义距离。

关于haskell - 推拉式和箭头式 FRP 有什么根本区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26164135/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com