功能 gui 用户在哪里?
Posted
技术标签:
【中文标题】功能 gui 用户在哪里?【英文标题】:Where are the functional gui users? 【发布时间】:2011-03-29 19:31:31 【问题描述】:对于用函数式语言创建 gui 的方法进行了大量研究。有推/拉 frp 库、基于箭头的 frp 库以及可能还有其他优秀的研究。 Many people 似乎同意这是更原生的方式,但几乎每个人似乎都在使用命令式绑定库,例如 gtk2hs 和 wxhaskell。甚至推荐为 good tutorials 的地方也教绑定到这些简单的命令式库。为什么不是基于 FRP 研究的 gui?
【问题讨论】:
说 frp GUI 优于命令式 GUI 不会让你很喜欢。不过很有趣的问题。 Is functional GUI programming possible?的可能重复 ***.com/questions/1028250/…的可能重复 @Don 这不是第二个的骗子,因为我不会在不知道含义的情况下问这个问题,而不是第一个,因为我实际上已经在问题中链接到了。 【参考方案1】:虽然每个人都同意 函数式反应式编程 (FRP) 是实现图形用户界面的方式,但在 Haskell 中还没有出现这样的功能完善的库。我认为主要原因是:
很难平衡表现力与资源使用(空间泄漏、时间问题)。 FRP 模型的表现力越强,在保证效率的同时实施起来就越困难。设计空间仍在探索中。 API 方便。 FRP 非常适合实现Time -> MouseInput -> Picture
形式的功能,但是像 GTK+ 或 Cocoa 这样的 GUI 平台却不是这样,问题是如何用 FRP 风格表达后者,而不比传统风格更复杂。
也就是说,玻璃钢研究还没有完成。
话虽如此,一些实际的实现已经存在,例如Flapjax,一种编译为 javascript 的语言。
在任何情况下,没有人可以阻止您实施为特定目的量身定制的 FRP 库并从中获得巨大收益。 Luke Palmer 已经成功地做到了,我目前也在尝试。 (我宁愿把时间浪费在 FRP 上,也不愿浪费在可变变量上。)
【讨论】:
JFYI,Flapjax 可以并且应该用作库,计划弃用带有编译器的单独语言。【参考方案2】:自我上一个回答以来已经过去了将近一年,函数式反应式编程 (FRP) 的世界发生了变化。
特别是,我创建了reactive-banana,这是一个在 Haskell 中用于 FRP 的小型库。虽然仍然缺少一些功能,但它已经是一种以纯功能样式实现 GUI 的好方法,正如 collection of examples 所展示的那样。这是一个屏幕截图:
和以前一样,还有Flapjax,一个用于Web浏览器中FRP的JavaScript库。
【讨论】:
另外,Ur/Web 的用于编写编译为 AJAX 的客户端的信号模型受到 FRP 的启发 - 但它并不是真正的 FRP。【参考方案3】:老线程,我知道,但 Elm (elm-lang.org) 正在迅速成为“现实世界”FRP 的中心。它编译成 JavaScript,Elm 网站就是用它编写的。
【讨论】:
以上是关于功能 gui 用户在哪里?的主要内容,如果未能解决你的问题,请参考以下文章