我学会了几种语言,但现在我想选择一种语言。我最喜欢的语言是Haskell,它类似于解释语言,但是是编译过的。
Haskell的优点和缺点是什么?
答案 0 :(得分:52)
目前我脑子里只有几个想法。
<强>赞成强>
学习Haskell会改变你对编程的看法。 (人们经常发现,一旦他们学习了Haskell,他们就会在其他语言中编写类似Haskell的代码。)
类型安全是否高于主流语言(空指针异常,任何人?)
类型推断意味着您不必担心类型,除非绝对必要。
它可以生成高性能的可执行文件。
par
和pseq
组合器
互动环境(hugs / ghci)可让您快速构思想法
有一个很好的支持社区(IRC,邮件列表等)
非常富有表现力和简洁的语法
GHC正在积极开发和改进,包括支持GPU上的代码执行,以实现高性能计算的额外优势
QuickCheck&gt;单元测试
<强>缺点强>
学习Haskell会破坏所有其他语言。
进入
很容易写出一个没人理解的神秘程序,几天后甚至不是你自己
答案 1 :(得分:19)
对某些项目使用Haskell是有利的,但学习 Haskell没有缺点。这需要时间,但值得。你将是一个更好的程序员。
答案 2 :(得分:13)
我还要强调Haskell的一些实用功能,尽管它只是美丽:
如果您有选择,我完全建议您学习Haskell而不是其他任何语言。它似乎在现有语言之间进行了安全性,抽象性和实用性之间的最佳权衡。
答案 3 :(得分:10)
优点:
1)Haskell是最先进的编程语言。
我做了一些研究,haskell似乎是唯一真正的最先进的编程语言。还有其他像agda和coq,但这些都是实验性的,缺乏现实世界编程的功能(例如图书馆支持)。最好投资一种最先进的编程语言。
(注意:我没有争论为什么haskell是最先进的,几乎任何其他编程语言都没有。这需要花费太多时间。所以这只是我的主观意见。同样的是对于其他陈述,则为true。)
(注意:我后面提到的一些功能可能是GHC特定的,但我仍然只写haskell)
2)Haskell程序员通常非常聪明。库的代码质量非常高。此外,stackoverflow的提示写得非常好,并且也处于高水平(感谢Don Stewart这样的人,仅举一例)。我认为改进编程的最佳方法之一是学习其他人的代码。 Haskell在这方面非常出色。
3)moste OOP语言中的命令式编程已经过时。通常的副作用编程方式也是如此。但是很少有编程语言用于没有副作用的声明性编程。例如Scala,F#,Ocaml和Erlang不是副作用。 (但是,在OOP语言的学术领域也有工作,显然没有过时。考虑Alan Kay过去的工作,或者例如Smalltalk领域当前最先进的学术工作。)< / p>
4)Haskell支持使用抽象数学概念进行编程(例如monad,functor,combinators,GADT等)。我认为这可以提高编程效率。
5)Haskell类型系统非常灵活,支持类型推断。这大大减少了可能的错误。在编译时检查类型系统。类型系统有助于作为文档。
6)首先在haskell中实现一些最先进的概念(如QuickCheck库)。有很多有趣的扩展。
7)haskell语法设计得非常好。没有不必要的括号。代码紧凑,模式匹配和列表理解的synatax非常好。像Knuth这样的人提倡文化编程,而haskell / GHC则支持它。
8)haskell支持延迟评估
缺点:
1)学习起来非常困难,掌握haskell需要数小时,数月。没有适当的计算机科学背景就更难了。像Monads和Functors这样的东西很难理解,特别是没有数学背景。所以大多数程序员可能没有能力或意志去学习haskell。 Haskell并不“简单”。如何使用支持所有高级功能的简单语言是不可能的。
2)IDE选项不如其他编程语言好。我使用leksah作为我的IDE,它非常好,但它与Eclipse的java开发无法比较。
3)Haskell不能用于Android或Iphone开发。相比之下,Scala可以用于Android开发,它也兼容java,这是一个巨大的优势。
4)我认为一些图书馆缺乏支持维护和改进它们的人。我在haskell中进行语义Web编程,并且库支持可能更好。
Haskell并不适合所有项目。如果你需要每毫秒的性能,C / C ++仍然可能是最好的选择。因此,haskell适用于许多项目,但不是全部。
Haskell与其他编程语言相比具有许多技术优势。但是,可能存在反对使用haskell的政治原因。例如,Scala可以更好地与现有的Java基础架构集成。
答案 4 :(得分:2)
但现在我想选择一个
...
然后我想知道这种强大语言的优点和缺点(只是为了做出正确的选择)。
如果您允许我概括,语言的选择实际上取决于您要解决的问题。没有任何一种选择可以适用于所有事情,并且 总会有一些语言看起来比你现在使用的语言更好。
继续学习新语言,因为这些经验会提高你知道项目语言何时出错的能力。
答案 5 :(得分:1)
您想写什么类型的应用程序?你想解决什么问题?
Haskell会有一些问题类型,但是,如果你编写的程序需要不断变化的状态,那么Haskell是一个糟糕的选择。
如果在对问题进行建模时,它不适合函数编程,例如编写CAD(计算机辅助设计)程序,那么OOP将是更好的选择,因为编程范例更适合模型。 / p>
但是,如果你不受这些问题的影响,那么Haskell可以成为一种很好用的语言。