Haskell 哈斯克尔的优点和缺点是什么?

Haskell 哈斯克尔的优点和缺点是什么?,haskell,Haskell,我学过几种语言,但现在我想选一种。我最喜欢的语言是Haskell,它类似于解释语言,但却是编译语言 哈斯克尔的优点和缺点是什么?目前我脑子里只有几个想法 专业人士 学习Haskell将改变您对编程的思考方式。(人们经常发现,一旦学会Haskell,就会用其他语言编写类似Haskell的代码。) 类型安全性比主流语言高得多(有空指针异常吗?) 类型推断意味着您不必担心类型,除非绝对必要 它产生高性能的可执行文件 对于par和pseq组合器,并行性几乎微不足道 交互式环境(hugs/ghci)允许

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


哈斯克尔的优点和缺点是什么?

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

专业人士

  • 学习Haskell将改变您对编程的思考方式。(人们经常发现,一旦学会Haskell,就会用其他语言编写类似Haskell的代码。)

  • 类型安全性比主流语言高得多(有空指针异常吗?)

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

  • 它产生高性能的可执行文件

  • 对于
    par
    pseq
    组合器,并行性几乎微不足道

  • 交互式环境(hugs/ghci)允许您快速创建想法原型

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

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

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

  • >单元测试

缺点

  • 学习哈斯克尔会毁掉你所有其他的语言

  • 这是一件很复杂的事情

  • 非常容易编写无人理解的神秘程序,几天后你自己也不理解


您想编写什么,什么类型的应用程序?你想解决什么问题

Haskell会擅长一些问题类型,但是,如果您编写的程序需要不断改变状态,那么Haskell是一个糟糕的选择

如果在对问题进行建模时,它不适合函数式编程,例如编写CAD(计算机辅助设计)程序,那么OOP将是一个更好的选择,因为编程范式更适合模型


但是,如果您没有受到这些问题的影响,那么Haskell可能是一种很好的语言。

在某些项目中使用Haskell有缺点,但学习Haskell没有缺点。这需要时间,但值得。你会成为一名更好的程序员

但是现在我想选一个

然后我想知道这种功能强大的语言的优缺点(只是为了做出正确的选择)

如果你允许我概括一下,语言的选择实际上取决于你试图解决的问题。没有一个选择能对一切都有效,而且 总会有一些语言比你现在使用的语言看起来更好

但是,要不断学习新的语言,因为这些经验将提高你的能力,让你知道什么时候一种语言不适合一个项目。

优点:
1) Haskell是最先进的编程语言。 我做了一些研究,haskell似乎是唯一真正最先进的编程语言。还有其他的像agda和coq,但这些都是实验性的,缺乏用于实际编程的功能(例如库支持)。最好投资于最先进的编程语言

(注意:我不争论为什么haskell是最先进的编程语言,而几乎任何其他编程语言都不是。这会花费太多时间。因此这只是我的主观观点。其他语句也是如此。)

(注意:我后面提到的一些特性可能是GHC特有的,但我仍然只写haskell)


2) Haskell程序员通常非常聪明。这些库的代码质量非常高。此外,关于stackoverflow的技巧写得非常好,而且水平也很高(感谢像Don Stewart这样的人,仅举一个例子)。我认为改进编程的最好方法之一是学习其他人的代码。哈斯克尔在这方面做得很好

3) 大多数OOP语言中的命令式编程已经过时。通常的编程方式也会产生副作用。但是很少有没有副作用的声明式编程语言。例如Scala、F#、Ocaml和Erlang并不是没有副作用的。(然而,在OOP语言的学术领域也有工作,这显然不是过时的。想想Alan Kay过去的工作,或者说Simultalk领域的当前学术工作。)

4) Haskell支持使用抽象数学概念(如单子、函子、组合子、GADT等)编程。我认为这可以提高编程效率

5) Haskell类型系统非常灵活,支持类型推断。这大大减少了可能出现的错误。在编译时检查类型系统。类型系统作为文档提供帮助

6) 一些最先进的概念首先在haskell中实现(如QuickCheck库)。有很多有趣的扩展

7) haskell语法设计得非常好。没有不必要的括号。代码很紧凑,用于模式匹配和列表理解的synatax非常好。像Knuth这样的人提倡有文化的编程,haskell/GHC支持它

8) haskell支持惰性评估

缺点:
1) 这很难学,掌握哈斯克尔需要几个小时、几个月的时间。没有适当的计算机科学背景就更难了。单子和函子之类的东西很难理解,尤其是没有数学背景的情况下。因此,大多数程序员可能没有学习haskell的能力或意愿。哈斯克尔并不“简单”。然而,不可能有一种支持所有高级功能的简单语言

2) IDE选项不如其他编程语言的选项好。我使用leksah作为我的IDE,它非常好,但它不能与Eclipse for java Develop相比