- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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/
阅读Yesod的源代码中,我遇到过带有“.hsfiles”扩展名的文件。示例:mongo.hsfiles 。它们是什么,为什么创建它们以及为什么使用它们? 最佳答案 您可以看到here相关代码: ba
我在关注 stack guide我得到了一个新的项目设置(耶!)。 它生成了以下文件布局: . ├── app │ ├── Main.hs ├── .gitignore ├── LICENSE ├
我在我的项目中创建了一个类(javahelp),用于在单击帮助内容(菜单项)时获取java帮助文件。我更新了目录中安装的 javahelp-2.0_05 C:\Program Files\javahe
我有一个巨大的 haskell 文件,可以毫无问题地编译和运行。我想将一些函数和类型定义放在通用 hs 文件中的单独模块中,然后将其导入我的主模块中。虽然主程序编译没有任何错误(它也编译导入的模块),
我正在阅读 Parallel and Concurrent Programming in Haskell 的第 11 章.在那本书中,以下 program用于同时获取 URL: main = do
我一直在尝试在我的 Haskell 项目中使用glpk-hs,但我完全不知道如何去做。我正在使用 stack 来运行我的程序,我的困惑很可能来自于我对其工作原理缺乏了解。 话虽这么说,我已经下载了gl
我遵循此处的指示: https://haskell.fpcomplete.com/tutorial/stack-script 我有一个具有以下文件结构的 cabal/stack 项目: app/Mai
我在基于 arch 的系统之上使用 xmonad。但是升级后我无法通过编译我的 xmonad.hs 文件 $ xmonad --recompile 我似乎在 xmonad 的每个模块上都出错,甚至 i
encoding包使用 HaXml在其构建脚本中(在 Setup.hs 中)。它碰巧使用了在 HaXml-1.19 和 HaXml-1.22 之间更改的接口(interface)位。如果编码包能够使用
我正在使用 Notepad++ 和 WinGHCi 做一些功课,我必须定义一个小“数据库”。格式是任意的,我认为这不是我要去的地方。无论如何,这是我在 *.hs 文件中使用的内容: let stude
我的项目结构如下: ~/.../project_name project_name.cabal Setup.hs src/ Main.hs Data/ ... test
我需要找出在 Setup.hs 中构建的标志(在 cabal 文件中找到的类型)。我想我正在寻找类型为 FlagAssignment 的东西。我怎样才能得到这个? 最佳答案 idris 必须这样做,y
我将 stack.exe v0.1.2.2 放入我的 PATH 目录之一,然后通过 stack setup 安装 ghc-7.8.4。 我尝试安装 ghc-mod 并获得奇怪的错误 Setup.hs:
我正在尝试比较两个不同的目录,其中有很多目录 du -hs User/data/dbs/* home/common/dbs/* 结果是两个目录依次显示出来。 12gb User/data/dbs/fi
我得到了一个 Setup.hs 文件,以及另一个包含源代码的 .hs 文件。每当我尝试通过以下方式配置安装时: runhaskell Setup.hs configure 我得到错误: Setup:
我制作了一个名为time.hs的文件。它包含一个测量另一个函数执行时间的函数。 有没有办法将time.hs文件导入到另一个Haskell脚本中? 我想要这样的东西: module Main where
我试图从 ~/.xmonad/Tree.hs 导入一个名为“Tree.hs”的自定义本地模块,但我得到: Error detected while loading xmonad configurati
组合在 Haskell 中是很正常的,但我只知道我可以定义组合函数的特殊行为,说 Prelude> (floor . sqrt) (10^55) 316227766016837936511293849
我目前正在完成我的第一个 Haskell 项目,在工作的最后一步,在连接不同的 Haskell 文件后,我的 I/O 函数似乎表现得很奇怪。 我有一个主文件(f1.hs),它加载多媒体库的一些信息并将
我正在使用山狮。我打开终端,然后加载 ghci , 我写 :l然后我尝试通过用鼠标将文件从我的桌面拖动到终端来加载我的文件(在我的桌面上),所以我知道位置是正确的,我明白了,提前谢谢你: Prelud
我是一名优秀的程序员,十分优秀!