Haskell是一种不良的编程语言(2020)

2021-01-09 20:02:47

有些语言自然会倾向于采用。有些没有。您希望在Haskell工作30年后,社区,工具和开发环境将变得更加成熟。

有趣的是,Haskell社区中的每个人都指责其他所有人,而不是像Perl那样对语言进行严格的评估。当我看到“ Simple Haskell”的拥护者时,我大笑起来,这暗示着这种语言“对人们来说太难学了”。

如果人们在使用函数式编程语言的同时,在语法和环境上都能以自己的怪异方式挑选F#,Scala和Clojure,我真的看不出这句话有什么用。

一种是,编程语言是为了简化创建计算机程序的任务,而不是手工编写汇编。因此,编程语言最重要的部分是交流。如果该语言自然使自己易于人们理解,那么即使它很奇怪,它也会成功。看看Clojure。括号括起来很奇怪,但它风靡世界,因为编程语言实际上具有很大的意义,并促进了程序员与计算机之间的通信。

Haskell的支持者试图声称类型签名在某种程度上是文档。是的,无论您声称多少次,这都是真的。我们在静态类型语言方面拥有数十年的经验,这告诉我们类型永远无法替代清晰的语法和文档。每隔几个月,就会有一些新手出现在Haskell reddit上,并问为什么Haskell文档如此混乱,为什么帖子会被人们告诉他们变得良好或只是指向学术论文而被破坏。真?

甚至更有趣的是,人们说“ Haskell不会吸引,开发环境会吸引”。 Haskell有30年的自我完善经验,尽管取得了一些进展,但增长速度却非常缓慢。你猜怎么了?如果人们可以使用C ++并使用它来创建出色的工具,那么我认为这种说法没有多大意义。

第二,Haskell是一种功能语言,它也说服其用户犯了与编写OOP语言相同的错误。非常资深的Haskellers呼吁采用“面向类型的编程”的方式,如下所示:编写类型和类型的接口并填写空白。听起来很熟悉?因为那是我们一直在使用Java等使用UML进行的工作。 Haskell几乎没有好处,因为它是一种FP语言,但相对来说是一种不灵活的语言,它抛弃了我们作为软件开发社区所学的所有知识,例如专注于松散的依赖关系并时刻准备着应对变化。专业的开发人员发现自己使用类型来具体描述系统,当需求突然改变时,他们宝贵的城堡变成尘土,然后必须重新构造其类型交互。这是自上而下设计的坏事。自下而上的设计是我们共同学习的一种方法,它是一种更好地应对变化的灵活方法。构建简单的零件,混合并匹配它们以构建复杂的零件。

部分原因与Haskell诱使人们认为使用更高级别类型进行更多抽象是一件好事。这有两个问题。第一,类型是一种凝结。如果您正在寻找更高级别的抽象来获取灵活的行为,那么最终将有一个痛苦的世界,因为有两个,抽象最终会泄漏,并且当抽象上的抽象泄漏时,它并不是一个漂亮的景象。在现实世界中,只有少数几种语言可以自豪地提出这种主张,例如Python和Lisp,Haskellers认为他们可以提高Haskell的生产力。这些语言已经在实际的软件产品中经过了实战测试,这是因为人们实际上在其中提高了生产力,并不是因为它们很简单,而是因为它们很简单。

带类型的抽象是一种糟糕的抽象类型,因为它忽略了程序处理数据且数据没有类型的基本事实。当您阅读本文或与他人交谈时,是否声称您在说字符串,数字,文本或其他东西?没有!数据就是简单的数据,而数据本身就是动态的。我们向数据添加类型以使其更容易(而不是更简单!)处理数据。在大多数情况下,人们在寻找模式,而不是类型。类型包装数据并将其像黑盒子一样对待,而模式描述数据的形状和内容。因此,当Haskell必须与现实世界互动时,他们最终会遭受很多苦难。当他们发现现实世界实际上是动态的时,突然间他们大吃一惊。因此,您会看到人们提出“无聊的haskell”,您基本上像一些功能性C#程序一样编写haskell。

第三,Haskell不会因为没有足够的库而糟透了,而是因为与其他语言一起工作是一种令人恐惧的经历,因为制作GHCJS需要很多技巧。看起来,即使是大多数散客也同意,与GHCJS相比,purescript是更好的选择。没有人是一个孤岛,但是Haskellers普遍说服自己,其他语言需要向Haskell学习,而不是相反。

Haskell如何对待编程术语便是一个非常清楚的指示。他们没有像其他所有设计模式那样解释Monad,而是坚持使用类别理论中一些晦涩的定义来解释它。看起来,当使用不带中缀符号的monad时,结果令人震惊,看起来又像是另一个回调链。按照典型的OOP术语,函子基本上是具有内部状态更改方法的Object。 Haskell并不难,语言本身也相当容易理解,但是人们使用的术语只是对软件社区中的其他人一无所知。就像Haskell不想让“正常”的人理解它一样,它有助于建立一个精英社区,人们声称他们在不了解时会有所了解。不相信我吗?尝试向使用Haskell的人询问单子,并观察它们的裂隙,为您提供伪解释。我自己尝试过。当然,有一些非常聪明的人确实了解Monads,但是大多数人只会告诉您“获得直觉”,说实话,这是总BS。

如果我不再诚实地认为Haskell是一种“精美设计”的语言,而开始批判性地研究如何改进核心Haskell,Haskell将会更好。