哪个更适合用Haskell,wxWidgets(通过wxHaskell)或GTK(通过Gtk2HS)开发GUI应用程序?
各自的优点和缺点是什么?它是否会根据您所针对的平台而有所不同(我主要是在OS X上工作,但我希望我的程序也可以在Linux和Windows上运行)?
[免责声明:我是一名wxHaskell维护者]
两者都是稳定且相当完整的GUI绑定,您可以放心地选择大多数项目.两者都有一定程度的"更高级别"Haskell绑定,但在这两种情况下,您都需要采用相当命令式的"C"式编码来完成工作.我的印象是wxHaskell允许你在更高级别的绑定中花费更多的时间,但我没有做太多的GTK2HS,无论如何,你肯定发现自己正在为两个库的包装器的瘦端工作 - 我认为整个编程的"复杂性"在两种情况下都是相似的.
因此,让我们将基本功能作为给定,并专注于差异.请注意,我真的相信GTK2HS是一项出色的工作,如果您选择它,您会很高兴.我下面说的大部分内容都是对差异的个人看法,以及为什么我自己选择与wxHaskell一起工作.
GTK2HS有一个更大的团队正在努力,并且更经常地发布.wxHaskell没有经常更新,但核心团队是活跃的,并且有定期的错误修正,但主要的新功能的添加速度比我们想要的慢得多(我们都有日常工作).
wxHaskell在所有支持的平台上提供真正的本机应用程序外观.当然,GTK2HS在Linux上是原生的,并且在Windows上具有非常好的原生主题(即足以满足所有人的需求......),但在OSX上具有GTK外观和感觉,并且依赖于安装X11.我相信OSX"原生"GTK库正在开发中,但被认为相对不成熟.一旦稳定,GTK2HS应该能够轻松地从相同的"部分原生"外观中获益(例如GTK OSX截图).
如果你不在Linux上,wxHaskell可能更容易构建(如果你是Linux托管的话,GTK2HS可能更容易),但是两者都非常复杂,老实说,因为在这两种情况下存在大量的依赖关系.
基于wxHaskell分发应用程序稍微容易一些(恕我直言),因为它具有较少的库依赖性.我主要在Windows上使用InnoSetup分发应用程序,在OSX上使用App捆绑包.我承认,只需要少量的额外工作,GTK2HS也可以这样做,所以这可能是支持wxHaskell的最薄弱的论据.
我个人认为wxHaskell对封闭源(例如商业)开发更友好.当然,这是无休止的火焰战争的主题,所以我只会说wxHaskell属于wxWidgets许可证,它明确允许闭源开发.GTK2HS是LGPL,因此您需要询问您的律师 - 尽管我必须明确表示许多人和公司已经得出结论LGPL与商业开发兼容; 我工作的公司的律师得出的结论是,这对我们的项目来说是不合适的.
我认为如果Linux是我的主要开发和交付平台,我可能会使用GTK2HS.但事实并非如此:我主要向Windows提供偶尔的OSX,我认为wxHaskell与这些平台更匹配,尽管这两个选项都支持所有三个平台.
我希望这会帮助您做出选择.