GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

傲慢是社区最大的敌人

2020 年 9 月 22 日

那些害死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 年 9 月 22 日 11:252187
用户头像
小智 前 InfoQ 主编

发布了 402 篇内容, 共 321.4 次阅读, 收获喜欢 1773 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营 模块3作业

李晶晶

架构训练营

五月学习心得(二)

攻城先森

音视频 5月日更 学习心得

用Python帮忙找指定小说最新更新且网速最快的网站

老猿Python

Python 爬虫 编程语言 百度搜索 小说更新

智能家居控制原理

lenka

5月日更

品牌认同感与鄙视链

ES_her0

5月日更

架构实战营 模块3 作业

CR

演讲稿:项目的架构设计与模块规划

三掌柜

5月日更

架构实战营 模块3 课后作业

༺NPE༻

架构实战营模块 3 作业

阿体

模块三--消息队列架构设计文档

华仔架构训练营

模块3作业-架构设计文档

yu

架构实战营

聊聊传统企业如何做好数字化转型

长沙造纸农

中台 数字化转型 企业 数字化 中台战略

架构实战营-模块3作业

大师兄

音频变速变调-sonic源码分析

dragn drivor

音视频

最好的关系,是成就彼此

小天同学

爱情 日常感悟 个人思考 5月日更 相处之道

架构实战营 模块三:课后作业

Ahu

#架构实战营

Go 语言垃圾回收

escray

go 极客时间 学习笔记 Go 语言从入门到实践 5月日更

架构实战营模块 3 作业

梦寻解语花

架构实战营

架构实战营 模块三作业

Dylan

架构实战营

消息队列 - 架构设计文档

a1vin-tian

架构实战营

函数和对象的关系

顿晓

5月日更

Ansible Inventory

耳东

ansible 5月日更

消息队列设计文档

青春不可负,生活不可欺

盘点:户外广告逆风翻盘的那些“必杀技”

󠀛Ferry

5月日更

密码学系列之:NIST和SHA算法

程序那些事

数据结构 密码学 程序那些事

打破思维定式(四)

Changing Lin

5月日更

消息队列架构详细设计文档

唐江

架构实战营

架构训练营模块三作业

Geek_e0c25c

架构训练营

架构实战营模块三作业

hunk

架构实战营

模块三:课后作业

菲尼克斯

架构实战营

个站建立基础教程

Damon

网站 5月日更

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