Haskell的优点和缺点是什么?

Nat*_*pos 16 haskell

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

Haskell的优点和缺点是什么?

bar*_*ley 52

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

优点

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

  • 类型安全是比主流语言高几英里(空指针异常,任何人?)

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

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

  • 并行性parpseq组合者几乎是微不足道的

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

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

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

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

  • QuickCheck >单元测试

缺点

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

  • 进入是非常复杂的

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

  • 难道列表的头部不是一个元素吗?也许你的意思是第一对夫妇= P (3认同)
  • 模块化怎么样?创建复杂应用程序时最大的问题是什么?是否难以使类型正确,或者是否需要重构?编写monadic和非monadic版本是否麻烦? (2认同)
  • “学习 Haskell 会毁掉所有其他语言。” 如此真实。在我用 Haskell 写作之前,我在为我开始的每个项目思考“好吧,那将是什么语言?”。现在我什至不考虑 Haskell 以外的任何东西(可能除了 Agda 或 Idris)。说句公道话,我不知道这是否是一个Contra。很多确实在 Haskell 中工作得更好。*仅*在 Haskell 中工作的主要问题是对于特定任务有很好的库和框​​架,人们无法不努力地使用它们,因为它们使用不同的语言(例如 Node.JS 等)。 (2认同)

Dav*_*haw 19

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


小智 13

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

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

如果你有选择,我完全建议学习Haskell而不是任何其他语言.它似乎在现有语言之间进行了安全性,抽象性和实用性之间的最佳权衡.


mrs*_*eve 10

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

(注意:我没有争论为什么haskell是最先进的,而且几乎任何其他编程语言都没有.这需要花费太多时间.所以这只是我的主观意见.同样适用于其他陈述.)

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

2)Haskell程序员通常非常聪明.库的代码质量非常高.此外,stackoverflow的提示写得非常好,并且也处于高水平(感谢Don Stewart这样的人,仅举一例).我认为改进编程的最佳方法之一是学习其他人的代码.Haskell在这方面非常出色.

3)moste OOP语言中的命令式编程已经过时.通常的副作用编程方式也是如此.但是很少有编程语言用于没有副作用的声明性编程.例如Scala,F#,Ocaml和Erlang不是副作用.(但是,在OOP语言的学术领域也有工作,显然没有过时.考虑Alan Kay过去的工作,或者例如Smalltalk领域当前最先进的学术工作.)

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基础架构集成.

  • "Haskell程序员通常非常聪明" - >这个"理由"似乎出现在关于范例的大多数讨论中,特别是在提到Haskell时.我喜欢Haskell,但这只是纯粹的白痴.偏见不好; 计算机科学中没有有效的教条.把一个像那个那样糟糕的谬论视为一个有效的论点是可怜的. (6认同)