編譯 | 王瑞平
有些語言在技術迭代過程中被逐漸淘汰,而有些語言則以另一種形式“向死而生”。
那么,編程語言的“隕落”意味著什么呢?在我們近一步討論之前,會對此進行解釋。
編程語言可以用來編寫計算機應用程序,和其它人類語言或文化一樣備受潮流影響。所以,某種語言“隕落”并非無人問津,只是不再“熱門”了。一般來講,一門語言出現超過25年熱度便會下降!
一、古老語言的向死而生
很多古老編程語言已不復存在或正在以另一種形式存活于世...原因五花八門...
1.被“后代”吃掉
雖然 Algol 語言已死,但是,它的“后代”仍存活于世,只是與原始版本不像了而已。Algol 的死亡很好地詮釋了語言消亡的方式之一——被后代“吃掉”,然后“奪走”整個用戶群。
“Algol 語言家族”包含 Perl 和 Delphi 這樣的“遠親”,后逐漸演變出 C、C++、Visual BASIC 和 Java 等語言。
這些流行語言很久以前就“蠶食”掉了整個 Algol 開發者社區,尤其是較早出現的 C 語言,它非常受歡迎,使程序員不得不放棄使用 Algol。
2.用戶和社區不多
而有些語言從未被用戶真正關注過。FLOW-MATIC 由格蕾絲·霍珀創造,但從未被廣泛使用過。許多語言消亡的原因也都是如此:用戶極少、社區不多。
而 FLOW-MATIC 也已經轉化成 COBOL。所以,它的小用戶社區已變成COBOL 用戶社區。這就是很多種語言消亡的原因:引入另一種語言,使社區變成新語言社區。
例如,C 語言用 BCPL 命名,使 BCPL 用戶(極少)變成了 C 的用戶。但是,BCPL 是由 Martin Richards 編寫,并不是 C 語言。
歸根結底,還是用戶的流失削弱了語言。隨著最后幾個日常用戶的棄用或尋找到其它種類的語言,它們就會逐漸“隕落”,變得越來越弱,直到基本滅亡,然后,完全消失。
3.社區里的信息
你在編程社區里發布信息之前需要使其具有連續性。糟糕的信息會吸引到你不想要的用戶,也會排除掉那些想要關注你的用戶。所以,改變社區里語言的內容是最危險的。這可能導致社區用戶的逃離。你可以做出微小的改變,但在發布之前一定要權衡利弊。
二、什么能夠加強一門語言的熱度?
實踐證明,某種語言的小眾用戶群能夠強化特定語言在人們心目中的地位。R 語言很適合做統計,在相關社區中擁有不可撼動的地位,Java 則是通用語言...
自此以后,一切語言都轉變成為了各式各樣的小眾語言。Python 擅長數學、科學和人工智能編程,而 Ruby 擅長處理動態的 Web 應用程序。JavaScript 則應用于瀏覽器編程。Fortran 曾經是通用的,而如今則應用于高等數學之中。
C 語言在操作系統和驅動程序中已退居次要位置。因此,它現在被排除在通用編程語言之外。而伴隨著語言逐漸趨向于小眾化,你必須避免它們成為真正的通用語言。
三、刨根問底:我們能從古老編程語言中學到什么?
你不禁會感覺到疑惑,究竟能從那些古老的編程語言中學到些什么?下面分別帶你認識一下 4 種古老的編程語言 Fortran、Perl、LISP 和 COBOL。
1.Fortran(1956)
從頭說起吧!一種語言一旦流行起來,便很少會徹底“消亡”,但往往會發生“變異”;例如,Fortran 的 2008 版本與原始版本差異巨大。
一直以來,Fortran 在科學界和數學界一直備受歡迎,現在依然是超級計算機的主要編程語言,比 C 語言快得多。因此,開發人員也一直在推動 Fortran 不斷向前發展。
2.Perl(1987)
Perl 是一種功能豐富的計算機編程語言。最初是為文本處理而開發,現在用于各種任務,包括:系統管理,Web 開發,網絡編程,GUI 開發等。
Perl 5 版本與 Perl 1、Perl 2 極其不同,甚至不該將它們視為同種語言。Perl 5 作為獨立的語言已被分離出來,Perl 6 (現在被稱為 Raku)也做出了大規模的更新。
從 Perl 5 到 Perl 6 更新花費了數年,而 Perl 6 作為一種新型語言正不斷向前發展。
3.LISP(1958)
LISP則是一種通用的高級計算機編程語言,長期以來壟斷著人工智能領域。另一種古老的語言是 LISP,它的很多“后代”語言主要包括:Guile、Scheme、Clojure 和 Racket。
在大多數情況下,當人們談及 LISP 語言時,并不是指具體的、原始的LISP。與Perl 1 一樣,LISP 的后代發生了重大變化,但它們仍是相似的語言。
這使得學習新的 LISP 語言并不難。因為它們彼此之間有很多共同點,你能夠快速流暢地共享更大的開發者社區。
4.COBOL
COBOL 是一種被專用于商業的通用語言,又被稱為企業管理語言、數據處理語言,是最早出現的高級編程語言之一,也是世界上第一個商用編程語言。數百萬行的 COBOL 維持了大量銀行基礎設施的正常運行。
雖然這種語言十分小眾,也并不存在多少 COBOL 程序員,但是它已經存在了幾十年,基本上沒有任何改變。為擺脫 COBOL,程序員經常將其翻譯成另一種語言(基本上是 Java)實現。
四、好與壞:如何評價編程語言?
那么,你到底如何評價一門古老語言究竟是好還是壞呢?
Fortran 語言曾紅過半邊天,它的“生死”取決于功能。與 Fortran 不同,LISP 則憑借靈活性的優點逐漸被發展起來。
問題來了,編程語言的功能是否決定了語言的好壞呢?這其實得具體情況具體分析。
如果你問 Fortran 用戶:“你需要語言變得更容易編程嗎?”他們會說:“我不在乎!”而 LISP 用戶也不會把語言的具體功能放在首要位置。BASH 用戶需要的是兼容性、穩定性和易用性并希望它能夠輕松排除 bug。
也許 Ruby 或 Python 當前的用戶更關心語言的功能而不是表現力;也許用戶最初是由于部署方式而選擇了 PHP。而專業的 Laravel 用戶可能需要語言更簡潔、更具表現力,并愿意為此犧牲兼容性和可用性。
五、迭代速度:決定語言的發展方向
Python 在迭代過程中進行了極其緩慢和認真的更改,使其具備了出色的向后兼容性。而 Ruby 并沒有向用戶過多宣傳向后兼容性,因此迭代速度快。
由于迭代速度有所不同,Python 贏得了 20 年后才需要運行程序的數學/科學社區,而 Ruby 則贏得了網絡開發者社區,標準需要每 5 年改變一次。
順便說一句,這并不意味著“Ruby 對而 Python 錯”。這用事實闡述了使小眾用戶群變得更強大的另一種方式:“接受語言在某方面表現得好而在另一方面表現得不好,那么,你就可以擊敗在兩方面都不出色的通用語言。”
有沒有一種語言可以兼顧迭代速度與功能呢?這并非不可能。但它最終將不得不與迭代較快和較慢的后代競爭。
例如,Perl 就是如此。很久以前,Perl 是唯一的一種腳本語言。對于總結大塊文本文件來說十分好用。但是現在,它要與 Ruby 和 Python 同時競爭。Ruby 占領了網絡開發這個利基市場,而 Perl 終將失去這個市場。
六、寫在最后:如何讓編程語言屹立百年不倒
日歷頁隨風飄揚,回首向來蕭瑟處,編程語言已如耄耋老人般走過近 70 年的滄桑歲月。
自 1956 年美國計算機科學家約翰·巴克斯帶領團隊開發出世界上第一個高級編程語言 FORTRAN 開始,潘多拉魔盒就已被打開,也隨之揭開了與計算機對話的神秘面紗。
雖然現在的編程語言五花八門、功能各異,那些古老的編程語言也并沒有被世人遺忘,反倒是經過歲月的洗禮,變得愈發厚重。如今,編程語言和框架也被軟件開發人員和商業人士津津樂道。
你可以讀到美國著名程序員保羅·格雷厄姆(Paul Graham)對古老語言的高談闊論。他認為:“古老語言的痕跡 100 年后仍將以可識別的形式與我們同在。”
人們常說:“一門語言要想在一百年后仍然可用,就需要具備良好的性能。”而我們更想知道,100 年后,哪些語言依然能夠存在并且可用。
那么,你如何使編程語言能夠“存活”百年,使其成為時代的紀念碑呢?在如此漫長的 100 年歲月里,人們會一直需要你提供的語言嗎?
這需要你并不能只關注語言的特性和語法,更需要關注開發者社區。這對于 Java、Fortran、Ruby 或其它熱門語言來說都是如此。
具體來講,為保證一門語言的可持續性,你需要對社區中的開發者做出承諾,鞏固它在程序員心目中的地位,如,特定的新功能是好還是壞?
話雖如此,承諾大多數情況下可能微不足道,有時,你與用戶的核心理念還會相互沖突。如,在 Fortran 中,他們更看重的是表達能力而不是速度。而在 Rust 中,內存安全是最重要的。