据我所知,似乎有两种“类型”。玻璃钢:一边是推拉玻璃钢(像在反应香蕉和反射),另一边是箭头玻璃钢(像在Yampa)。似乎过去也有一些“经典的FRP"在Fran和FrTime的时候,但我没有发现它们最近有任何活动。
这两种(或三种)FRP的方法真的从根本上不同吗?
他们中的一个是过时的理论,而另一个将是“未来的东西”?
我是否命名了每个类别中最突出的库,或者是否考虑了其他选项(钠,Netwire等)?
我访问了Haskell.org网站来调查你的问题。我发现了两篇重要的论文,你应该阅读这些论文来进一步研究,我正在从这些学术论文中构建我对你问题的答案。
Push-Pull FRP by Conal Elliott
将单子概括为箭头by John Hughes
是的,但也不是。根据Elliot的说法,推是数据驱动的FRP评估,而拉与所谓的“需求”驱动的评估有关。作者推荐使用pull,因为push在数据输入之间倾向于空闲。这里是关键:推拉结合和平衡这些行为的主要目的是减少重新计算值的需要。。推拉式玻璃钢操作可以加快反应能力。箭头是一种不同的技术,用于使用抽象类型来链接值并同时计算它们。所有这些概念都是根本不同的。但不要相信我的话:
Arrow接口的性质对于最小化重新评估的目标是有问题的。输入事件和行为被组合成一个单独的输入,当任何组件发生变化时,输入就会发生变化,(Elliott)。
因此,《绿箭》与“推-拉”的目标相矛盾。这并不意味着你不能一次使用所有这些,只是它会很复杂,有些东西没有抽象的箭头类型你就无法计算
我还没有找到关于哪种方法是“未来之路”的学术观点。请注意,箭头可以很好地处理同时性。如果你能实现箭头并使用推拉来最小化计算,那将是未来的方式。
是的,它们有不同的用途。正如我所说,它们可以一起制定,但很难实现,即使它确实有效,也可能会抵消推拉式的反应速度优势。
这是主观的,但是Reactive和Yampa似乎是FRP最常被引用的语言库。我想说的是,Conal Elliott的《Reactive》有着深厚的根基,而Yampa也是如此。其他项目如Netwire作为替代品出现,但要取代巨头可能还需要一段时间。
希望这能有所帮助!就像我说的,阅读我指出的文章会让你更好地理解箭头、推和拉之间的语义距离。