选择哪种 FRP 包? [关闭]

Posted

技术标签:

【中文标题】选择哪种 FRP 包? [关闭]【英文标题】:Which FRP package to choose? [closed] 【发布时间】:2012-04-17 12:13:05 【问题描述】:

我刚刚开始研究 Haskell 中的函数式反应式编程世界,我想在反应式设置中尝试 GUI 编程(使用 gtk,因为大量绑定)。

现在,我对 Grapefruit、Reactive-Banana 和 Buster 进行了一些研究,我想要任何关于使用任何一种或其他包装的快乐/恐怖的证明。

我只有这些初步意见:

我不介意自己将 FRP 包绑定到 gtk,因为我对抽象的后端想法(Grapefruit 有)有一种矛盾的感觉。..

虽然我发现类型理论很有趣,但我也重视实际程序的简单编码,这似乎让 grapfruit-records 有点偏离..

也就是说,除非你们中的某些人当然说服我不这么想:-)

【问题讨论】:

“graprefuit”和“reactive-banana”? frp 和水果之间有什么特殊的亲和力吗? @benw:我相信“香蕉”部分是对我所知道的最有趣的标题之一的论文的引用:Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire。 @hammar:哈哈,太好了!实际上,我选择“香蕉”这个名字是出于不同的原因,但我喜欢提到这一点。 @HeinrichApfelmus 有趣 - 什么原因? @AndrewC 这实际上是对“花生酱果冻”视频的引用。动画是解释 FRP 本质的一个很好的例子,我认为跳舞的香蕉是最好的例子。 【参考方案1】:

如果您只想使用常规 FRP,并与 GUI 框架保持密切联系,而不是对其使用“预制”抽象,那么在我看来,reactive-banana 是最可行的选择。它明确地针对与现有框架的绑定,专为“现实世界”使用而设计(在语义上不会做任何过于实验性的、可能导致问题的事情)等等。

您可以查看reactive-banana-wx,了解如何将基于事件的框架绑定到响应式香蕉。这很简单;我曾经写过一个到 Gtk2Hs 的快速绑定(不幸的是现在丢失了代码),并且文件没有超过 50 行。这几乎是对 reactive-banana-wx 代码的直接音译。

我建议不要使用 Buster,原因很简单,因为它 hasn't been updated since 2009,并且不是基于 GHC 7 构建的。

其他“面向生产”的 FRP 框架是 sodium(类似于 reactive-banana,但它有 dynamic event switching(即 coming to reactive-banana soon,但还没有)和“分区”的概念并发;但是,它刚刚问世,尚未被采用)和netwire(箭头 FRP,与反应性香蕉和钠完全不同的生物)。

【讨论】:

更新:从版本 0.7.0.0 开始,切换在反应香蕉中 (不过,Heinrich Apfelmus 仍然是 (2013.06.20)working on 动态事件切换的垃圾回收器,所以暂时谨慎使用。)【参考方案2】:

我自己一直在试验 FRP,到目前为止,唯一对我有用的是 Reactive-Banana。我从来没有研究过 Grapefruit 或大多数其他的,因为它们已经过时了,而且似乎根本不会更新或支持它们。我确实简要地查看了 netwire,但坦率地说,其中所有的箭头理论让我感到厌烦,我在弄清楚如何做一些简单的事情时遇到了很多麻烦。

相比之下,我设法获得了一组相当不错的 SDL 绑定,这些绑定是用 Reactive-Banana 编写的,只是在此过程中遇到了一些小问题。支持 Reactive-Banana 的另一件事是 Heinreich 在社区中非常活跃,并且在遇到问题时经常会提供有用的答案。只要看看这里的各种反应式香蕉问题,你就会发现他已经回答了很多问题,而且他通常在 Haskell 邮件列表中的 FRP 讨论中非常活跃。

【讨论】:

有意见的答案有时正是您所需要的!谢谢!

以上是关于选择哪种 FRP 包? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Discord.py - 我应该选择哪种方式? [关闭]

一般来说,选择哪种机器学习分类器? [关闭]

我应该为我的高性能 Web 服务选择哪种编程语言? [关闭]

Unity3D - 选择哪种网络解决方案? [关闭]

ADO.NET 性能:哪种方法会更快、更合理? [关闭]

生产中使用哪种MySQL启动关闭方式