Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface wxHaskell和Gtk2HS的相对优点是什么?_User Interface_Haskell_Wxhaskell_Gtk2hs - Fatal编程技术网

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

User interface wxHaskell和Gtk2HS的相对优点是什么?,user-interface,haskell,wxhaskell,gtk2hs,User Interface,Haskell,Wxhaskell,Gtk2hs,使用Haskell、wxWidgets(via)或GTK(via)开发GUI应用程序,哪个更好 每种方法的优缺点是什么?它是否因您所针对的平台而异(我主要是在OS X上工作,但希望我的程序也能在Linux和Windows上工作)?我的信息非常不完整,但由于您还没有答案,可能不完整的信息总比没有好 要问的问题是:工具箱只是一个围绕类似C的功能的包装器,还是有一个额外的层为工具箱提供了一个更“原生Haskell式”的API?当wxHaskell在Haskell研讨会上首次发布时,原生Haskell

使用Haskell、wxWidgets(via)或GTK(via)开发GUI应用程序,哪个更好


每种方法的优缺点是什么?它是否因您所针对的平台而异(我主要是在OS X上工作,但希望我的程序也能在Linux和Windows上工作)?

我的信息非常不完整,但由于您还没有答案,可能不完整的信息总比没有好


要问的问题是:工具箱只是一个围绕类似C的功能的包装器,还是有一个额外的层为工具箱提供了一个更“原生Haskell式”的API?当wxHaskell在Haskell研讨会上首次发布时,原生Haskell API的开发看起来非常有希望,但仍然不完整。看起来wxHaskell的“Haskellized”API仍在开发中,而Gtk2Hs项目根本没有提到这个问题。出于这个原因,我推荐wxHaskell。

一个考虑因素是,目前让wxHaskell在Mac OS X上本机工作稍微容易一些。GTK2HS依赖于GTK,GTK在Mac OS X上确实有一个使用本机小部件的实现,但该实现不像Mac OS X的wxWidgets实现那样容易构建

因此,如果您想开发不使用X11.app运行的代码,那么目前使用wxHaskell会稍微好一些

但请注意,这一点正在迅速改变: 演示如何在Mac OS X上将GTK2HS与本机GTK+一起使用


GTK2HS的一个优点是它的GLADE支持,使得简单UI的开发非常快速。wxHaskell中的高级组合器减轻了大部分优势,但它们确实需要更深入地了解您希望界面的外观和行为,因此更难以探索性的方式使用。

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

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

因此,让我们将基本功能视为给定功能,并将重点放在差异上。请注意,我真诚地相信GTK2HS是一个优秀的作品,如果你选择它,你会很高兴。我下面所说的大部分内容都是我个人对差异的看法,以及我选择与wxHaskell合作的原因

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

wxHaskell在所有受支持的现成平台上提供了真正的本机应用程序外观。当然,GTK2HS在Linux上是本机的,在Windows上有一个非常好的本机主题(即,除了学究之外,足以满足所有人的要求……),但在OSX上有GTK外观,这取决于是否安装了X11。我相信OSX“原生”GTK库正在开发中,但被认为是相对不成熟的。一旦这是稳定的,GTK2H应该能够很容易地受益于相同的“部分本地”外观和感觉(例如)

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

基于wxHaskell分发应用程序稍微容易一些(IMHO),因为它具有更少的库依赖项。我主要在Windows上使用InnoSetup分发应用程序,并在OSX上作为应用程序包分发应用程序。我承认,只要做少量的额外工作,GTK2H也可以做到这一点,因此这可能是支持wxHaskell的最薄弱的论点

我个人认为wxHaskell对封闭源代码(如商业)开发更为友好。当然,这是无休止的火焰之战的主题,所以我只想说wxHaskell是在一个明确允许封闭源代码开发的框架下进行的。GTK2HS是LGPL,因此您需要询问您的律师-尽管我必须明确指出,许多人和公司已经得出结论,LGPL与商业开发兼容;我工作的公司的律师认为这不适合我们的项目

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


我希望这将有助于您的选择。

就我个人而言,我会研究一些反应性的包/扩展。它似乎与范式更为接近。您可以声明式地指定图形内容,而不是强制性地指定图形内容。示例(不代表任何特定语言或实现):

x,y,z::Int
点击,按钮点击::Bool
x=
y=
单击=
z=x+y
按钮点击=(x==10&&y==10&&click)
每次x和y更改时,按钮单击和z将自动更新

然后,你可以在某个地方找到如下逻辑:

if buttonclicked then <do something> else <do something else>
如果按钮被选中,则为else
但这一切都很模糊。只需查看一些真实的反应式界面

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