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