我最近发现了 FP bug(试图学习 Haskell),到目前为止所看到的东西给我留下了深刻的印象(一流的函数、惰性求值和所有其他好处)。我还不是专家,但我已经开始发现对于基本算法来说,“函数式”推理比命令式推理更容易(而且我很难回到我必须做的地方)。
然而,当前 FP 似乎表现不佳的一个领域是 GUI 编程。 Haskell 方法似乎只是包装命令式 GUI 工具包(例如 GTK+ 或 wxWidgets)并使用“do”块来模拟命令式风格。我没有使用过 F#,但我的理解是,它使用 OOP 和 .NET 类来执行类似的操作。显然,这是有充分理由的——当前的 GUI 编程都是关于 IO 和副作用的,因此大多数当前框架不可能实现纯函数式编程。
我的问题是,是否有可能采用函数式方法进行 GUI 编程?我很难想象这在实践中会是什么样子。有谁知道有任何框架,实验性的或其他的,尝试这种事情(甚至是任何从头开始为函数式语言设计的框架)?或者,解决方案只是使用混合方法,将 OOP 用于 GUI 部分,将 FP 用于逻辑? (我只是出于好奇而问——我很想认为 FP 是“未来”,但 GUI 编程似乎是一个需要填补的相当大的漏洞。)
Haskell 方法似乎只是包装命令式 GUI 工具包(例如 GTK+ 或 wxWidgets)并使用“do”块来模拟命令式风格
这并不是真正的“Haskell 方法”——这只是通过命令式接口最直接地绑定到命令式 GUI 工具包的方式。 Haskell 恰好有相当突出的绑定。
有几种中等成熟的,或者更多实验性的纯函数式/声明式 GUI 方法,大多数是在 Haskell 中,并且主要使用函数式反应式编程。
一些例子是:
- 反射平台,https://github.com/reflex-frp/reflex-platform https://github.com/reflex-frp/reflex-platform
- 柚子,http://hackage.haskell.org/package/grapefruit-ui-gtk http://hackage.haskell.org/package/grapefruit-ui-gtk
- 反应性,http://hackage.haskell.org/package/reactive-glut http://hackage.haskell.org/package/reactive-glut
- wx水果,http://hackage.haskell.org/package/wxFruit http://hackage.haskell.org/package/wxFruit
- 反应性香蕉,http://hackage.haskell.org/package/reactive-banana http://hackage.haskell.org/package/reactive-banana
对于那些不熟悉 Haskell、Flapjax 的人来说,http://www.flapjax-lang.org/ http://www.flapjax-lang.org/是 JavaScript 之上的函数式反应式编程的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)