文章來源于公眾號:架構(gòu)頭條
作者 | Alexander Granin
譯者 | 無明
策劃 | 小智
編者按
本文作者的中心思想不是唱衰 Rust 語言,正相反,他非??粗?Rust 語言。他回顧了 Haskell 語言從王者“淪落至此”的原因,希望這能給目前充滿朝氣的 Rust 社區(qū)敲響警鐘。以下為正文。
時間到了 2030 年,我在文件夾里發(fā)現(xiàn)了這篇文章。從我寫這篇文章開始,我就知道,我是對的。我覺得應(yīng)該把這篇文章發(fā)表出來,因為它給 Rust 開發(fā)者們敲響了警鐘:不要讓歷史重演!
那些殺死 Haskell 的,也會殺死 Rust。
為什么這個時候我會提到 Haskell?好吧,Haskell 和 Rust 有著千絲萬縷的聯(lián)系??梢哉f,Rust 就是沒有高階類型(HKT)的 Hashkell。Rust 的很多風(fēng)格與 Haskell 很像。在某種程度上,可以說 Rust 就是 Haskell 的化身,只是它帶了那么一點點 C 語言風(fēng)格的語法。
Haskell 死了嗎?
Haskell 曾經(jīng)也是一門人們想要關(guān)注的語言。從 2000 年到 2010 年間,Haskell 是每一個程序員都希望能用上的語言,但除了少數(shù)人,沒有人真的這么做。有一些令人印象深刻的項目是用 Haskell 開發(fā)的,比如很多金融項目和薪資系統(tǒng)。但是,從一門純函數(shù)式編程語言的角度來看,Pandoc 才是真正稱得上具有 Haskell 內(nèi)核的項目。有人說“Haskell 太慢”、“Haskell 干不了實事”,結(jié)果讓 Pandoc 給打了臉。
然而,Haskell 究竟發(fā)生了什么?為什么突然間止步不前了?現(xiàn)在沒有人用它來開發(fā)重要項目。還有人在用 GHC Haskell 嗎?或許還有那么一兩個。GHC Haskell 已經(jīng)淪為一門學(xué)術(shù)性語言,沒有人真正關(guān)心它。
在 Haskell 時代,它處于函數(shù)式編程的最前沿,詮釋了函數(shù)式編程的真正含義。當(dāng)然,除了 Haskell,還有其他函數(shù)式編程語言,只不過它們沒有那么純粹,我說的是 Scala 或 JavaScript。在 2000 年代中期,這兩門語言是 Haskell 最主要的競爭者。Go 和 C++ 是跟隨者,Haskell 在引領(lǐng)著它們,它們從 Haskell 身上學(xué)到了很多。Scala 程序員都知道,for 循環(huán)語法和很多代碼庫的靈感都來自 Haskell。
Haskell 曾經(jīng)是王者。
那個時候,Haskell 獨占鰲頭的氣勢是其他語言所不具備的。它為程序員帶來的生產(chǎn)效率可以用因數(shù)“5”來衡量。一個開發(fā)團隊使用 Haskell 開發(fā)并交付一個應(yīng)用程序的速度比 Scala 或 C++ 快 5 倍。因數(shù)“5”成了一個非常重要的指標(biāo)。
Haskell 的鋒芒漸漸顯露出來。有多少人在用 monad?我在 JavaScript 中用了,在 Rust 中也用了一些。在 Go 中,我可以用 monad 完成一些很有意思的事情。而這些,在 2000 年中期,都是 Haskell 程序員玩剩下的。當(dāng)大多數(shù)人開始琢磨 monad,Haskell 早就有了 monad 和代數(shù)數(shù)據(jù)類型。
在很多方面,Haskell 是個王者,但還是死掉了。是什么殺死了它?
我想用一個詞來形容,但請你們不要誤解了這個詞。你可能認(rèn)為它是“邪惡(evil)”,或者是“無知(ignorant)”,但其實我想說的是“自大(arrogance)”。
Haskell 社區(qū)里彌漫著一股傲慢的味道。不是那種邪惡的傲慢,而是那種讓他們覺得自己比別人更好的傲慢。他們使用的工具在某種程度上更好,他們做的事情在某種程度上更好,有些人甚至傲慢地認(rèn)為他們獲勝是不可避免的。這不是那種扇了你一巴掌然后說“你這個愚蠢的 Go 程序員”那種傲慢,相反,這是一種力量的傲慢。Haskell 程序員寫出了一種強大的代碼,一種強大的編譯器,一種強大的語言,他們知道他們可以創(chuàng)造奇跡。
這些還不夠。一些陰險而微妙的事情發(fā)生了,導(dǎo)致他們將自己與行業(yè)的其他部分隔離開來。社區(qū)外的程序員開始注意到 Haskell 程序員在做什么:“Haskell 社區(qū)的人似乎不太喜歡我們,我想我們也不會喜歡他們的?!?/p>
有些人可能還記得 2000 年代中期 Reddit 論壇上的一些討論。有一群人在那里談?wù)摵芸岬臄?shù)學(xué)問題。他們經(jīng)常竊笑其他語言,比如 Go。這不是什么大事情,也不是什么邪惡的事情,他們是這樣竊笑的:“主流的人們,哈!”那個時候我就是一個主流的 Go 用戶!但我不喜歡他們那樣。在接下來的幾年里,我參與了編程語言之爭。當(dāng)時我對他們說:“我們真的想要在 Reddit 上展開編程語言之爭嗎?”有趣的不是他們在竊笑什么,因為他們有權(quán)那么做,有趣的是我的反應(yīng)。我的反應(yīng)帶有防御性:“好吧,繼續(xù)用你們的 Haskell 吧,但我們才是真正能解決問題的人?!?/p>
這種對立在當(dāng)時非常有趣,而且相當(dāng)普遍。Haskell 社區(qū)出現(xiàn)了一種態(tài)度,但不是邪惡的那種,也不是出于惡意。但有一種態(tài)度是這樣的:“我們的工具很好,我們的語言很好,我們不需要遵守規(guī)則。我們可以做自己的事情,不需要和別人討論。我們不需要寫其他類型的程序。”Haskell 程序員不想寫常規(guī)的程序,不想處理與數(shù)據(jù)庫有關(guān)的問題。他們不想面對已經(jīng)發(fā)展了 20 年的數(shù)據(jù)庫模式。這太令人討厭了。他們找到了替代方法,比如使用范疇理論和依賴類型。他們在自己周圍筑起了一堵墻,生活在一個技術(shù)泡泡里,把自己與外部世界的邪惡隔離了起來。
我要在這里定義一個詞。這個詞大家都知道,我的定義只是眾多定義中的一個。如果你喜歡,你也可以找到這個詞的其他定義。這個詞就是“專業(yè)”。我把它定義為"運用力量的紀(jì)律"。我們的工具和語言為我們提供了一些力量,但我們需要一種紀(jì)律來運用這些力量。這不僅僅是一種使用工具的紀(jì)律,更是一種社區(qū)紀(jì)律。這個紀(jì)律是這樣的:它是一個強大的工具,而工具越是強大,殺人就越快,所以我們要小心使用它。另外,我們不會詆毀那些不太愿意使用我們工具的人。
我們不妨把“進步”重新定義為:“僅僅因為我們能做一件事,并不一定意味著我們必須去做那件事”。
所以,殺死 Haskell 的是它的狹隘和無法滿足企業(yè)的需求。
Haskell 在某些受限的環(huán)境下表現(xiàn)出色,但它的力量很有限,或者說無法滿足用戶想要解決企業(yè)問題的愿望。這些人不愿意走到外面去,不愿意讓自己踏進真正的土壤。他們表現(xiàn)出一種“對立”感,而站在另一邊的人能夠清楚地感覺到。這種狹隘主義就像是在屏幕上掛一個大橫幅,上面寫著“我按我的方式做事,你們自己玩去吧”。這就好比是在說:“在我們自己的天地里,我們很偉大,讓其他人見鬼去吧”。
我想拯救什么?
我想拯救 Rust 和社區(qū)的工作成果,避免它們遭遇同樣的下場。坦白說,我不認(rèn)為它會走上那條路。首先,我認(rèn)為 Rust 社區(qū)更有活力、更強大,我相信不再存在 Haskell 的那種對立局面。那些“強大的 C++ 激素程序員”已經(jīng)變溫和了。每個人都在想:“或許有一些東西會讓 Rust 變得不一樣”。那么它們是什么呢?有什么能防止 Rust 重蹈 Haskell 的覆轍呢?
我想說三件事:
第一個是紀(jì)律。特別是在文檔方面的紀(jì)律,這可不是件容易的事。寫完代碼,不要忘了那些該死的文檔。大家都知道,寫出好的文檔,讓其他人都可以輕松地使用你的程序是一件多么困難的事情。
如果在專業(yè)的基礎(chǔ)上再加上謙遜,或許 Haskell 就不會死掉。對立的態(tài)度,以及我知道有一些有趣的廣告,比如“Mac 對 PC”、“我是 Rails,我是 Java”之類的,我不認(rèn)為這有什么害處,問題在于你是否把它們看得太重。除非你筑起高墻,或者,另一些人在另一面筑起高墻作為回應(yīng)。
最后一件事就是去解決“骯臟”的問題。我們必須靜下心來,說:“我們會處理的”。如果我們要生存下去,就必須想辦法解決所有的問題。如果你不去解決,就會有其他人來解決。
記住這門在本世紀(jì)頭十年最具影響力的編程語言的命運吧。它為純函數(shù)編程開了一個頭,對我們現(xiàn)在所做的事情影響很大,但它幾乎要被遺忘了。而那些使用和喜愛它的人不得不為了生計轉(zhuǎn)向了 Scala,它幾乎要了他們的命。
Rust 非常強大,但要毀滅它也很容易,制造混亂、傲慢和忽視企業(yè)需求,這些都可能會殺了它。我希望我們不要重蹈覆轍。
英文原文:
gist.github.com/graninas/22ab535d2913311e47a742c70f1d2f2b
本篇文章在GitHub的評論區(qū)同樣十分精彩,推薦感興趣的讀者朋友做進一步了解
以上就是W3Cschool編程獅
關(guān)于那些害死Haskell的,也會害死Rust的相關(guān)介紹了,希望對大家有所幫助。