user-interface - wxHaskell 和 Gtk2HS 的相对优点是什么?

标签 user-interface haskell wxhaskell gtk2hs

使用 Haskell、wxWidgets(通过 wxHaskell )或 GTK(通过 Gtk2HS )开发 GUI 应用程序哪个更好?

各有什么优缺点?它是否会根据您的目标平台而有所不同(我主要在 OS X 上工作,但希望我的程序也能在 Linux 和 Windows 上工作)?

最佳答案

[免责声明:我是 wxHaskell 维护者]

两者都是稳定且相当完整的 GUI 绑定(bind),您可以放心地为大多数项目选择其中之一。两者都具有某种程度的“更高级别”Haskell 绑定(bind),但在这两种情况下,您都需要投入相当命令式的“C”风格编码才能完成任务。我的印象是,wxHaskell 允许您在更高级别的绑定(bind)上花费更多的时间,但我没有做太多 GTK2HS,并且无论如何,您肯定会发现自己正在为这两个库的包装器做薄端工作 -我认为这两种情况下的整体编程“复杂性”是相似的。

因此,让我们以基本功能为给定,并专注于差异。请注意,我真诚地相信 GTK2HS 是一款出色的作品,如果您选择它,您会感到高兴。我下面所说的大部分内容都是个人对这些差异的看法,以及为什么我选择自己开发 wxHaskell 并与 wxHaskell 一起工作。

GTK2HS 有一个更大的团队致力于它,并且发布得更频繁。 wxHaskell 更新不那么频繁,但核心团队很活跃,并且定期进行错误修复,但主要新功能的添加速度比我们希望的要慢(我们都有日常工作)。

wxHaskell 在所有支持的平台上提供真正的 native 应用程序外观,开箱即用。当然,GTK2HS 在 Linux 上是原生的,并且在 Windows 上有一个相当好的原生主题(即,足以满足除了学究之外的所有人......),但在 OSX 上具有 GTK 外观和感觉,并且依赖于安装了 X11。我相信 OSX“原生”GTK 库正在开发中,但被认为相对不成熟。一旦稳定,GTK2HS 应该能够轻松受益于相同的“部分原生”外观和感觉(例如 GTK OSX screenshot )。

如果您不在 Linux 上,则 wxHaskell 可能更容易构建(如果您是 Linux 托管,则 GTK2HS 可能更容易),但老实说,两者的构建都相当复杂,因为其中存在大量依赖项两种情况。

基于 wxHaskell 分发应用程序稍微容易一些(恕我直言),只是因为它具有较少的库依赖性。我在 Windows 上主要使用 InnoSetup 来分发应用程序,在 OSX 上则以应用程序包的形式分发应用程序。我承认,只需要少量的额外工作,GTK2HS 就可以完成同样的工作,所以这可能是支持 wxHaskell 的最弱论据。

我个人认为wxHaskell对闭源(例如商业)开发更友好。当然,这是无休止的争论的主题,所以我只会说 wxHaskell 位于 wxWidgets license 之下。这明确地允许闭源开发。 GTK2HS 是 LGPL,所以你需要询问你的律师 - 尽管我必须明确指出,许多人和公司已经得出结论,LGPL 与商业开发兼容;我工作的公司的律师得出的结论是,这不适合我们的项目。

我认为如果 Linux 是我的主要开发和交付平台,我可能会使用 GTK2HS。然而事实并非如此:我主要向 Windows 交付,偶尔也向 OSX 交付,并且我认为 wxHaskell 更适合这些平台,尽管这两个选项都支持所有三个平台。

希望这对您的选择有所帮助。

关于user-interface - wxHaskell 和 Gtk2HS 的相对优点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553317/

相关文章:

haskell - Haskell 中是否有一种标准方法可以使用自定义匹配函数来匹配 2 个列表?

haskell - 有没有一种方法可以在一个函数中使用多个 monad?

haskell - cabal 安装 wx 缺少 C 库

java - 如何使用 JAVA、SWT 在我的 UI 上显示滚动?

java - 如何将 JButton 设置为未修饰并删除 MouseListener

user-interface - 远程访问 Ubuntu 服务器时使用 GUI

linux - 在 Linux 上安装 wxHaskell 时出现构建错误

wpf - 在 WPF 中,创建工具栏按钮以便正确缩放图像的最佳方法是什么?

haskell - 如何不纯地修改与对象关联的状态?

windows - Windows 上的 GHC + wxHaskell