Haskell或D用于GUI桌面应用程序?

时间:2010-10-05 11:14:55

标签: user-interface programming-languages haskell d

我喜欢haskell以及与它相关的许多东西作为它的类型引擎,Hackage的很多软件包,很好的社区,积极的开发等。

Otoh,我有经验,有些人放弃了我们计划中的项目,考虑到Haskell过于复杂(monads,很多学术界的行话......)到grok(来自C ++背景),所以可能更容易带来一些如果我们使用D,那就开发我们的开源项目。

我们希望开发一般桌面应用程序,它需要有数据库后端(可能是sqlite3),使用C-lib进行一些广泛的计算任务(星历计算)并使用Qt工具包,因为我们希望提供'轻型'版本MeeGo在未来。

能够轻松记录源代码以及维护是很重要因素,因为我们的功能列表很长,并且考虑到我们将在空闲时间开发,可能需要很长时间才能编写我们想要的所有内容。

Python&其他脚本语言对于项目来说太慢了,我不想在这么多年后再回到C ++,嘿,更喜欢更高级别的编程......没有太多细节,我已经排除了其他一些语言好吧(Go,Clojure,Java ..),它将列表下载到Haskell与D。

关于D的一个问题是,暂时的QtD项目被暂停,所以我很好奇,如果在短期内甚至可以将D计算为适当的选项。

哪一个可能更适合作为涵盖Linux / MaC / Windows平台的通用编程语言?

修改:我只需添加指向我发送到D列表的post的链接,我会详细说明我们的要求。

7 个答案:

答案 0 :(得分:11)

让我们在这里梳理一些要求,我将尝试制作Haskell案例。也许D粉丝或其他人可能会尝试这样做。

  • 桌面应用程序

因此,Haskell肯定用于桌面和服务器端应用程序。这些工具仅适用于所有现代桌面,只需使用the Haskell Platform

  • 数据库后端

Haskell的众所周知的数据库后端有很大的用途,HDBC-*sqlite,但有many others

在Haskell中使用数据库驱动的应用程序的其他商业团体包括:Galois(我们的sqlite库在上面链接);德意志银行(见talk); Hustler草坪设备(HDBC的主场)。

  • C库(因此FFI绑定)

Haskell具有高级别,广泛使用的FFI,这是Haskell 2010的标准部分。

  • 使用Qt

qtHaskell是为商业应用而开发的,并且被用于例如商业用途。 JoyRide Labs用于他们的商业游戏。

  • 源代码文档

Haddock被广泛使用。其他分析工具如:graphmodsourcegraph也有助于需求文档。

  • 修的

一些商业用户提到纯度和强类型,可以减轻长期项目周期内应用程序的维护负担,因为它们可以更轻松地对代码进行本地,安全的更改。纯度降低了组件之间的复杂性,并且类型确保重构是合理的。

  • 其他事实

社区规模 - 开源Haskell社区现在蓬勃发展,与其他大型FP语言(Erlang,Scala)相提并论。商业用户正在为GHC的直接开发提供资金,确保其长期可用性,并且有很多experience reports可以借鉴。 Hackage和Cabal通过简化新的开源工作来帮助降低风险 - 节省您的时间。

答案 1 :(得分:6)

我对你的评论很谨慎:

  

Python&其他脚本语言对于这个项目来说太慢了

以简单易懂的方式编写的Haskell可能比python快一个数量级。通过挑剔Haskell程序的细节,可以使它像低级C程序一样快,但它很棘手,耗时,并且需要大量的知识,例如。 GHC的代码生成机制。

你说你已经在使用C绑定了,那么速度又重要吗?我只是担心你基于你没有检查过的假设扔掉了很多很棒的工具。听起来你想要一个具有出色库支持的工具,而不是其他任何东西。

Scala,Scheme,C#/ VB.NET(单声道)怎么样?我无法想象有什么奇怪的标准会导致您将选项限制为Haskell和D.

那就是说,Haskell是一门很棒的语言。如果它适合您的项目,那就去吧。稍微打开你的思想,这样你就不会选择Haskell,当有一些其他的工具可以让你完成相同结果的10%的工作。

答案 2 :(得分:3)

是不是像女朋友,三明治和嘉年华游乐设施这样的编程语言?一旦你消除了垃圾,你最喜欢的就是你,而不是他们。

既然Haskell或D都不是垃圾,而且两者都能够处理你提到的物品(除了开箱即用的Qt支持 - 如果你绝对需要它,D可能不起作用),花一些时间来计算哪个最适合你和你的特质。使用每种语言构建原型。从sqlite中获取一些数据并将其显示在gui中。如果您还未定,请在不同的操作系统上构建每个原型,以确保跨平台开发符合您的预期。

我们可以重复我们所听到的关于鱼子酱的内容并分享我们的个人经历,但你必须尝试知道你是否喜欢它。

答案 3 :(得分:1)

最后我听说gtk +和wxWidget haskell绑定被更广泛地使用(可能更多没有bug)然后是qt。

使用本机java widgit或qt java bindings-qtjambi scala怎么样,看看他们的网站看起来它得到社区的相当好的支持(他们已经有了4.7测试版)。

答案 4 :(得分:1)

我最近开始学习Haskell并测量了一个简单例子的时间安排,这个例子可以在“了解一下Haskell的好处”中找到。该示例写出了所有右边的矩形,其整数边小于400(在教程中它小于10,现在我知道为什么)。 WinGHCi的时间是> 34s(在6核3.3 Ghz AMD,64位Windows 7上),更不用说内存使用表明~6GB。为了比较,我在Ada(三重嵌套循环)中编写了这个程序,时间是<0.1s。我会说你应该为自己节省很多尴尬并选择D. D与Ada / C ++属于同一类别(实际上它从Ada借了很多)但是它有许多现代功能和一个非常好的免费编译器。最近有一本关于D by Alexandrescu的书,并且阅读了很多部分,我可以证明你可以在几周内完全学习这门语言(而不是在Haskell的情况下几年)。

答案 5 :(得分:-1)

Python可能很慢,C ++可能很难看,但那些坚持使用他们最喜欢的晦涩语言工作的人必须准备单独工作。

Haskell和D都不够受欢迎,因为它很可能会让你的项目吸引其他任何开发人员 - 除非你认为你正在开发一个杀手级的应用程序,这将是你的语言Rails是什么到Ruby。

答案 6 :(得分:-1)

我想告诉你为什么我不会在项目中使用D:

系统工具链的状态很可怕。有一个编译器DMC似乎在Windows和Linux上运行。这个永远不会开源,似乎是Walter Bright的宠物项目而不是Digital Mars。

gdc编译器有问题,仅适用于D 1.0,大多数2.0扩展都不可用。该项目似乎没有维护者,GCC来源是一个完整的怪物,所以不要指望有很多人会接管这个项目。

llvm编译器有缺陷,只能与D 2.0的子集一起运行。该项目似乎有一个维护者,但进展缓慢。

32比特英特尔支持其他任何事情的状态都很弱。我不确定amd64,我认为没有希望得到ARM的支持。

基于此,我失去了所有希望,D有足够的开发人员成为一家公司做一个更大的关键任务应用程序的保存语言选择。你将与​​工具链斗争,甚至祈祷经常回到C ++。

我不能对Haskell发表评论,除此之外你不应该期待程序员成为Haskell专家。这可能是他们辞职的一个原因 - 这肯定是我的理由。