【问题标题】:Haskell UI framework?Haskell UI 框架?
【发布时间】:2010-05-18 20:39:30
【问题描述】:

有没有偶然出现的用于 Windows 的 Haskell UI 框架?

我最近开始研究这种语言,据我所见,它适用于很棒的小型“一次性”应用程序(精心设计的脚本)。

但是,如果没有一个好的 UI 框架,我就看不到它在更明显的竞争者的烟雾和镜子之下。

我听说有很多框架,但没有一个是全功能的。

我只是想知道这是否正在兴起,还是很难让足够多的开发人员朝着同一个方向发展?

【问题讨论】:

  • 我不能真正推荐一个特定的,但如果你还没有看到这个列表可能会很有趣:haskell.org/haskellwiki/Applications_and_libraries/…
  • 谢谢。我实际上已经在确切的页面中查看了该页面,不幸的是,这是我最沮丧的事情......“不幸的是没有标准的,而且或多或少都是不完整的。”

标签: windows user-interface haskell frameworks


【解决方案1】:

两个主要的框架是wxHaskellGtk2Hs。这两个都已用于实际工作。据我所知,我的偏好是 Gtk2Hs,因为它可以正确处理资源(即使用 GC)。 wxHaskell 要求程序员在不再需要小部件时释放它们,这样您就可以解决所有经典的内存泄漏和过时的指针问题。

两者的问题在于一切都在 IO monad 中。这反映了这样一个事实,即它们是针对命令式语言的现有 GUI 库的相对较薄的包装器。当然,这意味着你不会比用命令式语言编写 GUI 更糟,但你也好不了多少。

在 Hackage 上可以找到一些有趣的实验库,包括 Grapefruit 和 Conal Elliott 在 GuiTV 中的“有形价值”想法。这两种方法都尝试采用更具声明性的方法。

【讨论】:

  • 非常感谢!这正是我正在寻找的信息。我同意包装库。您是否知道使用 Grapefruit 编写的任何应用程序,和/或它在社区中的应用范围有多大?
  • @Lance,抱歉,我只知道这些。
  • 答案还应包括商业游戏“Nikki and the Robots”使用的 qtHaskell。
【解决方案2】:

(免责声明:我是 wxHaskell 的维护者)

wxHaskell 和 Gtk2Hs 或多或少都是完整的。也就是说,两者都封装了其底层库提供的大量功能。如前所述,它们都需要在 IO monad 中进行相当“命令式”的编程风格。

关于每种方法的相对优点已经进行了很多讨论。我想说 wxHaskell 是两者中更容易使用的,尤其是在 Windows 上,因为它可以通过 cabal 安装(参见 http://www.haskell.org/haskellwiki/WxHaskell/Install#On_Windows

FRP 框架(Grapefruit 和其他框架)提供了一种更具“功能性”的编程风格,但代价是大大减少了小部件的覆盖范围。我觉得这仍然是一个开放的研究领域,还没有真正为“黄金时间”做好准备。

实际上,我在使用 wxHaskell 时从未遇到过资源管理问题,尽管我同意这是可能的,而且 Gtk2Hs 处理的更好,它在底层库中使用引用计数。

为了完整起见,我还应该提到一个 Qt 绑定(QtHaskell?)也存在 - 它相对年轻,但显然相当完整。

我宁愿认为 Haskell 社区虽然很小,但可以很好地修复一个 GUI 框架,但要接受这样做的困难(例如许可、支持所有操作系统平台等)。

【讨论】:

    【解决方案3】:

    您还可以将 wxWidgets(我的意思是 C++ 库)与 Haskell 一起使用。下面是一个例子:https://bitbucket.org/afiskon/hs-a-star-gui/src 这种方法比 wxHaskell 有一些优势: 1. 你可以使用 UI 生成器 (Code::Blocks, wxFormBuilder) 2. 你的应用程序占用更少的磁盘空间 3. 你可以使用 all em> wxWidgets 的特性。

    还应该注意,最新版本的 wxHaskell 使用 wxWidgets 2.9,它可能永远不会被移植到 Debian:http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=16;bug=613431

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多