38

对用函数式语言创建 gui 的方法进行了大量研究。有推/拉 frp 库、基于箭头的 frp 库以及可能还有其他优秀的研究。许多人似乎同意这是更本地化的方式,但几乎每个人似乎都在使用命令式绑定库,例如 gtk2hs 和 wxhaskell。甚至被推荐为优秀 教程的地方也会教绑定到这些简单的命令式库。为什么不是基于 FRP 研究的 guis?

4

3 回答 3

26

距离我之前的回答已经过去了将近一年,函数响应式编程(FRP) 领域的情况发生了变化。

  • 特别是,我创建了reactive-banana,这是一个在 Haskell 中用于 FRP 的小型库。虽然仍然缺少一些功能,但它已经是一种以纯功能风格实现 GUI 的好方法,正如一系列示例所展示的那样。这是一个屏幕截图: 在此处输入图像描述

  • 和以前一样,还有Flapjax,一个用于 Web 浏览器中 FRP 的 JavaScript 库。

于 2011-07-28T06:42:12.320 回答
23

虽然每个人都同意函数式反应式编程(FRP)是实现图形用户界面的方式,但在 Haskell 中还没有出现这样的功能完善的库。我认为主要原因是:

  • 平衡表现力 VS 资源使用很困难(空间泄漏、时间问题)。FRP 模型的表现力越强,在保证效率的同时实施起来就越困难。设计空间仍在探索中。
  • API 方便。FRP 非常适合实现 form 的功能Time -> MouseInput -> Picture,但是像 GTK+ 或 Cocoa 这样的 GUI 平台却不是这样,问题是如何用 FRP 风格来表达后者,而不比传统风格复杂。

也就是说,玻璃钢研究还没有完成。

话虽如此,一些实际的实现已经存在,例如Flapjax,一种编译为 JavaScript 的语言。

在任何情况下,没有人可以阻止您实施为特定目的量身定制的自己的 FRP 库并从中获利。卢克·帕尔默(Luke Palmer)已经成功地做到了,我目前也在尝试。(我宁愿在 FRP 上浪费时间,也不愿在可变变量上浪费时间。)

于 2010-08-14T15:10:07.980 回答
6

旧线程,我知道,但 Elm ( elm-lang.org ) 正在迅速成为“现实世界”FRP 的中心。它编译成 JavaScript,Elm 网站就是用它编写的。

于 2013-10-30T00:21:01.027 回答