Haskell的优点和缺点是什么?

时间:2009-11-08 01:47:12

标签: haskell

我学会了几种语言,但现在我想选择一种语言。我最喜欢的语言是Haskell,它类似于解释语言,但是是编译过的。

Haskell的优点和缺点是什么?

6 个答案:

答案 0 :(得分:52)

目前我脑子里只有几个想法。

<强>赞成

  • 学习Haskell会改变你对编程的看法。 (人们经常发现,一旦他们学习了Haskell,他们就会在其他语言中编写类似Haskell的代码。)

  • 类型安全是否高于主流语言(空指针异常,任何人?)

  • 类型推断意味着您不必担心类型,除非绝对必要。

  • 它可以生成高性能的可执行文件。

  • parpseq组合器

  • 的并行性几乎是微不足道的
  • 互动环境(hugs / ghci)可让您快速构思想法

  • 有一个很好的支持社区(IRC,邮件列表等)

  • 非常富有表现力和简洁的语法

  • GHC正在积极开发和改进,包括支持GPU上的代码执行,以实现高性能计算的额外优势

  • QuickCheck&gt;单元测试

<强>缺点

  • 学习Haskell会破坏所有其他语言。

  • 进入

  • 非常复杂
  • 很容易写出一个没人理解的神秘程序,几天后甚至不是你自己

答案 1 :(得分:19)

对某些项目使用Haskell是有利的,但学习 Haskell没有缺点。这需要时间,但值得。你将是一个更好的程序员。

答案 2 :(得分:13)

我还要强调Haskell的一些实用功能,尽管它只是美丽:

  • 以你的方式准确地取决于它应该的位置,否则就不会这样。这是有趣的功能之一,负责why Haskell just works
  • 有一个很好的并发系统,可以用于高性能应用程序。
  • 为新的,创新的抽象和设计模式提供基础,其中包括我个人最喜欢的功能性反应式编程。
  • 使非常复杂的问题变得容易解决,因为在Haskell中,你需要考虑的其他语言(正确的排序,锁定,初始化等)很多都不是问题。 / LI>
  • 懒惰不仅仅是一种优化。它允许您以全新的方式解决问题,这在大脑中更容易。没有破坏性更新,但结果大致相同。

如果您有选择,我完全建议您学习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可以成为一种很好用的语言。