这是更好地为发展中GUI应用程序与Haskell,个函数库和二进制文(通过 wxHaskell)或GTK(通过 Gtk2HS)?

有哪些利弊?它不会取决于哪个平台的目标(我将主要工作OS X但是我想我的节目工作在Linux和窗户太)?

有帮助吗?

解决方案

[声明:我是wxHaskell维护者]

两者都是稳定的,比较完整的GUI绑定,你可以选择无论是有信心的大多数项目。两者都有一定程度的“更高级别的”哈斯克尔绑定,但在这两种情况下,你需要拖放到,而必须“C”风格的代码来把事情做好。我的印象是wxHaskell让你花多一点时间在较高级别绑定,但我没有做太多GTK2HS,在任何情况下,你一定发现自己工作的包装器这两个库的薄端 - 我认为整体编程“复杂性”是在两种情况下相似。

因此,让我们的基本功能为一个给定的,集中的差异。请注意,我真诚地相信,GTK2HS是工作的佳作,而且你会很高兴,如果你选择了它。大部分时间我下面说的是个人采取的差异,为什么我选择上,并与wxHaskell自己的工作。

GTK2HS有一个更大的团队做这个工作,更定期发布。 wxHaskell不更新频繁,但核心团队是积极的,并有定期的错误修正,但被添加重要的新功能,而慢于我们想(我们都有日常工作)。

wxHaskell给所有支持的平台上真正的原生应用程序的外观开箱。 GTK2HS,当然,原生Linux和对Windows中的一个相当不错的本土主题(即足够好,以满足所有,但书呆子...),但有GTK的外观和感觉上OSX,并取决于是否有安装X11。我相信一个OSX“本土” GTK库正在开发中,但被认为是相对不成熟。一旦这是稳定的,GTK2HS应该能够很容易地从相同的“部分原生”的外观受益和感觉(如的 GTK OSX截图)。

wxHaskell可能是一个比较容易建立,如果你不是在使用Linux(GTK2HS是,如果你是Linux的托管可能更容易),但两者是相当复杂的建设,说实话,因为有依赖关系的显著数这两种情况下。

有稍微容易(IMHO)来分发基于wxHaskell应用中,仅仅是因为它具有较少的库依赖。我主要使用InnoSetup在Windows分发应用程序,并且应用在OSX上捆绑。我承认,只有额外的工作少量,同样可以用GTK2HS来完成,所以这可能是有利于wxHaskell最弱的说法。

这是我的个人认为wxHaskell是友好的封闭源代码(例如,商业)的发展。这是当然的,无休止的口水战的主题,所以我只能说,wxHaskell是下wxWidgets的许可其中明确允许封闭源代码的开发。 GTK2HS是LGPL,所以你需要问你的律师 - 尽管我必须说清楚,许多人和公司得出的结论是LGPL与商业发展相适应;在我工作的公司律师的结论是,这是不适合我们的项目。

我想,如果Linux的是我的主要开发和交付平台,我可能会使用GTK2HS。它不是,但是:我主要是传递到Windows偶尔OSX,我认为wxHaskell是一个更好的匹配这些平台,虽然这两个选项支持所有三个平台

我希望这将帮助您与您的选择。

其他提示

一个考虑是,目前它是稍微容易得到wxHaskell在Mac OS X上GTK2HS本身的工作依赖于GTK,里面确实有使用的是Mac OS X原生窗口部件的实现,但实现不容易建成wxWidgets的执行针对Mac OS X是

因此,如果你想开发代码没有X11.app运行,目前你是wxHaskell稍好一些。

不过请注意,这是迅速变化: http://www.haskell.org/haskellwiki/Gtk2Hs#Using_the_GTK.2B_OS_X_Framework 显示了如何使用与本机GTK + GTK2HS Mac OS X上。

GTK2HS的一个优点是它的沼地的支持,使得简单的UI的发展非常快。在wxHaskell更高层次的组合子可以缓解大部分的这种优势,但他们确实需要你想如何让你的界面外观和行为,因此更难处在一个探索的方式来使用一个更深入的了解。

我有相当不完整的信息,但因为你没有解答,也许不完全信息总比没有好。

要问的问题是这样的:是工具箱只是一个包装周围C-一样的功能,或者是有,使该工具包更“原始Haskell样” API的附加层?当wxHaskell在哈斯克尔研讨会是首次公布,原生API哈斯克尔的发展显得非常有前途的,但仍然是不完整的。它看起来仿佛wxHaskell了“Haskellized” API仍在开发中,而Gtk2Hs项目并没有提到这个问题的。出于这个原因,我建议wxHaskell。

我个人看成某种反应包/延伸的。这似乎非常非常接近与范式坐。而是势在必行指定的图形化的东西,你可以声明这样做。实施例(未表示任何特定的语言或执行):

x, y, z              :: Int
click, buttonclicked :: Bool
x = <X coordinate of mouse>
y = <Y coordinate of mouse>
click = <Whether mouse button is currently being pressed>
z = x + y
buttonclicked = (x == 10 && y == 10 && click)

Buttonclicked和z将被自动更新每次x和y的变化。

您可以再有一些逻辑的地方,看起来是这样的:

if buttonclicked then <do something> else <do something else>

这是所有非常模糊虽然。只要看看一些真正的反应接口

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top