腾讯亿级用户规模自研业务的上云实践解读,立即报名 了解详情
写点什么

那些害死 Haskell 的,也会害死 Rust

傲慢是社区最大的敌人

  • 2020-09-22
  • 本文字数:3071 字

    阅读完需:约 10 分钟

那些害死Haskell的,也会害死Rust

编者按

本文作者的中心思想不是唱衰 Rust 语言,正相反,他非常看重 Rust 语言。他回顾了 Haskell 语言从王者“沦落至此”的原因,希望这能给目前充满朝气的 Rust 社区敲响警钟。


本篇文章在 GitHub 的评论区同样十分精彩,推荐感兴趣的读者朋友阅读完后点击原文做进一步了解。


以下为正文。




时间到了 2030 年,我在文件夹里发现了这篇文章。从我写这篇文章开始,我就知道,我是对的。我觉得应该把这篇文章发表出来,因为它给 Rust 开发者们敲响了警钟:不要让历史重演! 那些杀死 Haskell 的,也会杀死 Rust


为什么这个时候我会提到 Haskell?好吧,Haskell 和 Rust 有着千丝万缕的联系。可以说,Rust 就是没有高阶类型(HKT)的 Hashkell。Rust 的很多风格与 Haskell 很像。在某种程度上,可以说 Rust 就是 Haskell 的化身,只是它带了那么一点点 C 语言风格的语法。


Haskell 死了吗?


Haskell 曾经也是一门人们想要关注的语言。从 2000 年到 2010 年间,Haskell 是每一个程序员都希望能用上的语言,但除了少数人,没有人真的这么做。有一些令人印象深刻的项目是用 Haskell 开发的,比如很多金融项目和薪资系统。但是,从一门纯函数式编程语言的角度来看,Pandoc 才是真正称得上具有 Haskell 内核的项目。有人说“Haskell 太慢”、“Haskell 干不了实事”,结果让 Pandoc 给打了脸。


然而,Haskell 究竟发生了什么?为什么突然间止步不前了?现在没有人用它来开发重要项目。还有人在用 GHC Haskell 吗?或许还有那么一两个。GHC Haskell 已经沦为一门学术性语言,没有人真正关心它。


在 Haskell 时代,它处于函数式编程的最前沿,诠释了函数式编程的真正含义。当然,除了 Haskell,还有其他函数式编程语言,只不过它们没有那么纯粹,我说的是 Scala 或 JavaScript。在 2000 年代中期,这两门语言是 Haskell 最主要的竞争者。Go 和 C++ 是跟随者,Haskell 在引领着它们,它们从 Haskell 身上学到了很多。Scala 程序员都知道,for 循环语法和很多代码库的灵感都来自 Haskell。


Haskell 曾经是王者。


那个时候,Haskell 独占鳌头的气势是其他语言所不具备的。它为程序员带来的生产效率可以用因数“5”来衡量。一个开发团队使用 Haskell 开发并交付一个应用程序的速度比 Scala 或 C++ 快 5 倍。因数“5”成了一个非常重要的指标。


Haskell 的锋芒渐渐显露出来。有多少人在用 monad?我在 JavaScript 中用了,在 Rust 中也用了一些。在 Go 中,我可以用 monad 完成一些很有意思的事情。而这些,在 2000 年中期,都是 Haskell 程序员玩剩下的。当大多数人开始琢磨 monad,Haskell 早就有了 monad 和代数数据类型。


在很多方面,Haskell 是个王者,但还是死掉了。是什么杀死了它?


我想用一个词来形容,但请你们不要误解了这个词。你可能认为它是“邪恶(evil)”,或者是“无知(ignorant)”,但其实我想说的是“自大(arrogance)”。


Haskell 社区里弥漫着一股傲慢的味道。不是那种邪恶的傲慢,而是那种让他们觉得自己比别人更好的傲慢。他们使用的工具在某种程度上更好,他们做的事情在某种程度上更好,有些人甚至傲慢地认为他们获胜是不可避免的。这不是那种扇了你一巴掌然后说“你这个愚蠢的 Go 程序员”那种傲慢,相反,这是一种力量的傲慢。Haskell 程序员写出了一种强大的代码,一种强大的编译器,一种强大的语言,他们知道他们可以创造奇迹。


这些还不够。一些阴险而微妙的事情发生了,导致他们将自己与行业的其他部分隔离开来。社区外的程序员开始注意到 Haskell 程序员在做什么:“Haskell 社区的人似乎不太喜欢我们,我想我们也不会喜欢他们的。”


有些人可能还记得 2000 年代中期 Reddit 论坛上的一些讨论。有一群人在那里谈论很酷的数学问题。他们经常窃笑其他语言,比如 Go。这不是什么大事情,也不是什么邪恶的事情,他们是这样窃笑的:“主流的人们,哈!”那个时候我就是一个主流的 Go 用户!但我不喜欢他们那样。在接下来的几年里,我参与了编程语言之争。当时我对他们说:“我们真的想要在 Reddit 上展开编程语言之争吗?”有趣的不是他们在窃笑什么,因为他们有权那么做,有趣的是我的反应。我的反应带有防御性:“好吧,继续用你们的 Haskell 吧,但我们才是真正能解决问题的人。”


这种对立在当时非常有趣,而且相当普遍。Haskell 社区出现了一种态度,但不是邪恶的那种,也不是出于恶意。但有一种态度是这样的:“我们的工具很好,我们的语言很好,我们不需要遵守规则。我们可以做自己的事情,不需要和别人讨论。我们不需要写其他类型的程序。”Haskell 程序员不想写常规的程序,不想处理与数据库有关的问题。他们不想面对已经发展了 20 年的数据库模式。这太令人讨厌了。他们找到了替代方法,比如使用范畴理论和依赖类型。他们在自己周围筑起了一堵墙,生活在一个技术泡泡里,把自己与外部世界的邪恶隔离了起来。


我要在这里定义一个词。这个词大家都知道,我的定义只是众多定义中的一个。如果你喜欢,你也可以找到这个词的其他定义。这个词就是“专业”。我把它定义为"运用力量的纪律"。我们的工具和语言为我们提供了一些力量,但我们需要一种纪律来运用这些力量。这不仅仅是一种使用工具的纪律,更是一种社区纪律。这个纪律是这样的:它是一个强大的工具,而工具越是强大,杀人就越快,所以我们要小心使用它。另外,我们不会诋毁那些不太愿意使用我们工具的人。


我们不妨把“进步”重新定义为:“仅仅因为我们能做一件事,并不一定意味着我们必须去做那件事”。


所以,杀死 Haskell 的是它的狭隘和无法满足企业的需求。


Haskell 在某些受限的环境下表现出色,但它的力量很有限,或者说无法满足用户想要解决企业问题的愿望。这些人不愿意走到外面去,不愿意让自己踏进真正的土壤。他们表现出一种“对立”感,而站在另一边的人能够清楚地感觉到。这种狭隘主义就像是在屏幕上挂一个大横幅,上面写着“我按我的方式做事,你们自己玩去吧”。这就好比是在说:“在我们自己的天地里,我们很伟大,让其他人见鬼去吧”。


我想拯救什么?


我想拯救 Rust 和社区的工作成果,避免它们遭遇同样的下场。坦白说,我不认为它会走上那条路。首先,我认为 Rust 社区更有活力、更强大,我相信不再存在 Haskell 的那种对立局面。那些“强大的 C++ 激素程序员”已经变温和了。每个人都在想:“或许有一些东西会让 Rust 变得不一样”。那么它们是什么呢?有什么能防止 Rust 重蹈 Haskell 的覆辙呢?


我想说三件事:


第一个是纪律。特别是在文档方面的纪律,这可不是件容易的事。写完代码,不要忘了那些该死的文档。大家都知道,写出好的文档,让其他人都可以轻松地使用你的程序是一件多么困难的事情。


如果在专业的基础上再加上谦逊,或许 Haskell 就不会死掉。对立的态度,以及我知道有一些有趣的广告,比如“Mac 对 PC”、“我是 Rails,我是 Java”之类的,我不认为这有什么害处,问题在于你是否把它们看得太重。除非你筑起高墙,或者,另一些人在另一面筑起高墙作为回应。


最后一件事就是去解决“肮脏”的问题。我们必须静下心来,说:“我们会处理的”。如果我们要生存下去,就必须想办法解决所有的问题。如果你不去解决,就会有其他人来解决。


记住这门在本世纪头十年最具影响力的编程语言的命运吧。它为纯函数编程开了一个头,对我们现在所做的事情影响很大,但它几乎要被遗忘了。而那些使用和喜爱它的人不得不为了生计转向了 Scala,它几乎要了他们的命。


Rust 非常强大,但要毁灭它也很容易,制造混乱、傲慢和忽视企业需求,这些都可能会杀了它。我希望我们不要重蹈覆辙。


英文原文

What killed Haskell could kill Rust


2020-09-22 11:253845
用户头像
小智 让所有人认同的文字称不上表达

发布了 408 篇内容, 共 353.0 次阅读, 收获喜欢 1921 次。

关注

评论 2 条评论

发布
用户头像
没有实用项目用就是失败的,从未有实用项目用就是没成功过。不能解决实际问题的语言,就是教材。
2022-10-18 11:07 · 北京
回复
用户头像
讲道理, 我觉得Haskell的今天不算是失败的, 如果脱离主流工业界就会被贬为失败的话, 计算机行业就失去了我热爱它的一切. Haskell的目标是纯粹, 它完成了吗?完成了, 这就足够了. 如果Haskell放下身段走向如今的golang, 那不是什么好事, 那是所有人的损失.
2022-03-31 15:15
回复
没有更多了
发现更多内容

24岁程序员一事无成,迷茫焦虑,想知道该怎样从现状走出来

android 程序员 移动开发

iOS开发:平时做项目经常用到的快捷键归纳

三掌柜

11月日更

6年老Android2019面经总结,Android面试必刷的200道真题

android 程序员 移动开发

2021新鲜面经,蚂蚁内部转岗Android面试分享,2021最新Android面试题及答案

android 程序员 移动开发

30多个超赞的Android开发者工具,2021年京东Android岗面试必问

android 程序员 移动开发

2021应届秋招:提前批挂后,二次面试字节跳动抖音Android客户端

android 程序员 移动开发

30岁,程序员,烦透了,淘汰了80%的Android面试者

android 程序员 移动开发

5G时代已经到来了,你还觉得Android行业凉了嘛?,flutter真机调试不会自动安装

android 程序员 移动开发

5道刁钻的Activity生命周期面试题,学完去吊打面试官!

android 程序员 移动开发

7年老Android收到阿里offer,跟领导提离职被怼:为年薪百万不做兄弟

android 程序员 移动开发

8年Android开发程序员教你如何写简历!看完别再问为何你只值5K(1)

android 程序员 移动开发

8年Android开发程序员教你如何写简历!看完别再问为何你只值5K

android 程序员 移动开发

王者荣耀商城异地多活架构设计

Sky

「架构实战营」

35岁程序员:职场中的中年危机,一文说清

android 程序员 移动开发

37岁Android程序员裸辞,四个月被497家公司拒绝,问猎头后懵了

android 程序员 移动开发

30秒上手新一代Http请求神器RxHttp,androidstudio连接手机

android 程序员 移动开发

35岁没有晋级的同事都去哪了?,Android这些高端技术只有你还不知道

android 程序员 移动开发

20分钟掌握Android-Gradle,android程序基础教程

android 程序员 移动开发

5分钟看完这篇-HTTPS面试常问全解析,不管去哪里面试都能轻松装13!

android 程序员 移动开发

9成Android开发者必须收藏的80个开源库,安卓rxjava获取网络时间

android 程序员 移动开发

2021 最新Android常见知识体系,HR:,Android进程管理

android 程序员 移动开发

2021高校生疫情过后 ,字节跳动Android开发岗-高级技术面试题!

android 程序员 移动开发

2,ndk开发教程

android 程序员 移动开发

9次Android面试经验总结,已收字节,阿里,2021Android开发面试解答之设计模式篇

android 程序员 移动开发

30岁程序员面临的困境,IDEA太强悍了

android 程序员 移动开发

35岁以上的Android开发,都去了哪儿?,附赠复习资料

android 程序员 移动开发

35岁程序员(媛)被迫辞职后,android项目开发总结报告

android 程序员 移动开发

5个月前,如果你没有不屑于刷这份《字节内推,独家发布

android 程序员 移动开发

8年老Android开发谈;Context都没弄明白凭什么拿高薪?

android 程序员 移动开发

2021年之Android面经分享(已获头条、顺丰,html5移动端

android 程序员 移动开发

架构实战营1期毕业总结

tt

架构实战营

那些害死Haskell的,也会害死Rust_语言 & 开发_Alexander Granin_InfoQ精选文章