【发布时间】:2011-02-09 23:54:02
【问题描述】:
我最近发现了 FP 错误(尝试学习 Haskell),我对迄今为止所看到的(一流的函数、惰性求值和所有其他好东西)印象深刻。我还不是专家,但我已经开始发现“功能性”推理比基本算法的命令性推理更容易(而且我很难回到我必须做的地方)。
然而,当前 FP 似乎失败的一个领域是 GUI 编程。 Haskell 方法似乎只是包装命令式 GUI 工具包(例如 GTK+ 或 wxWidgets)并使用“do”块来模拟命令式样式。我没有使用过 F#,但我的理解是它使用带有 .NET 类的 OOP 做了类似的事情。显然,这样做是有充分理由的——当前的 GUI 编程都是关于 IO 和副作用的,因此对于大多数当前框架来说,纯粹的函数式编程是不可能的。
我的问题是,是否有可能为 GUI 编程提供功能性方法?我很难想象这在实践中会是什么样子。有没有人知道任何尝试这种事情的框架,实验性的或其他的(或者甚至是从头开始为功能语言设计的任何框架)?还是仅使用混合方法的解决方案,GUI 部分使用 OOP,逻辑使用 FP? (我只是出于好奇而问——我很想认为 FP 是“未来”,但 GUI 编程似乎是一个很大的漏洞。)
【问题讨论】:
-
查看过 Common Lisp 和 OCaml 中的 GUI 后,我想说,更可能的是导致问题的 Haskell 的懒惰。
-
@new123456 虽然 Common Lisp 不是一种函数式语言,但它可以处理可变数据并包含副作用
-
@ElectricCoffee Lisp 是一种极其灵活的语言,能够以多种不同的风格使用,许多人选择以函数式风格使用 Lisp。
-
根据我的经验(虽然我仍然在努力相信它并了解更多)FRP 在 GUI 编程方面确实达到了它的极限;对于 80% 的用例来说,它既漂亮又优雅,但丰富的小部件需要非常精确地控制它们的内部状态(例如搜索组合框等),而 FRP 只是妨碍了。势在必行并不总是邪恶的。尽量减少命令式代码的数量是好的,但要删除 100% 的代码?还没有看到它适用于非平凡的 UI 开发。
-
@ElectricCoffee “不过,Common Lisp 不是一种函数式语言”。 Lisp 是所有函数式语言之母。你的意思是 Lisp 不纯。
标签: user-interface haskell f# functional-programming