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

2020 年 9 月 29 日 InfoQ
作者 | Alexander Granin
译者 | 无明
策划 | 小智

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


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

那些杀死 Haskell 的,也会杀死 Rust。

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

1 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。

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

3 我想拯救什么?  

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

我想说三件事:

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

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

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

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

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

英文原文:

https://gist.github.com/graninas/22ab535d2913311e47a742c70f1d2f2b




InfoQ Pro 是 InfoQ 专为技术早期开拓者和乐于钻研的技术探险者打造的专业媒体服务平台。 扫描下方二维码 关注   InfoQ Pro 即可在【充电计划】中获取 技术 PPT 下载链接, 每周更新哟~持续关注我们,还有更多技术分享活动与干货资料,就等你来!


点个在看少个 bug 👇
登录查看更多
0

相关内容

Haskell 是一种纯函数式编程语言,于 1990 年在编程语言 Miranda 的基础上标准化,并且以 λ 演算为基础发展而来。
专知会员服务
81+阅读 · 2020年9月28日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
159+阅读 · 2020年7月24日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
想和你聊一下这本豆瓣评分10的书
图灵教育
9+阅读 · 2018年11月16日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python数据科学超强阵容书单
大数据技术
4+阅读 · 2018年4月4日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
2017年度图灵最受欢迎Python图书TOP10
图灵教育
5+阅读 · 2017年12月22日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Arxiv
0+阅读 · 2020年12月1日
Arxiv
0+阅读 · 2020年11月26日
Arxiv
3+阅读 · 2018年10月18日
VIP会员
相关VIP内容
专知会员服务
81+阅读 · 2020年9月28日
【实用书】Python编程,140页pdf
专知会员服务
41+阅读 · 2020年8月20日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
159+阅读 · 2020年7月24日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【2020新书】如何认真写好的代码和软件,318页pdf
专知会员服务
63+阅读 · 2020年3月26日
相关资讯
想和你聊一下这本豆瓣评分10的书
图灵教育
9+阅读 · 2018年11月16日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
Python数据科学超强阵容书单
大数据技术
4+阅读 · 2018年4月4日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
2017年度图灵最受欢迎Python图书TOP10
图灵教育
5+阅读 · 2017年12月22日
十五条有用的Golang编程经验
CSDN大数据
5+阅读 · 2017年8月7日
Top
微信扫码咨询专知VIP会员