Linux中國

為什麼一些古老的編程語言不會消亡?

當今許多知名的編程語言已經都非常古老了。PHP 語言20年、Python 語言23年、HTML 語言21年、Ruby 語言和 JavaScript 語言已經19年,C 語言更是高達42年之久。

這是沒人能預料得到的,即使是計算機科學家 Brian Kernighan 也一樣。他是寫著第一本關於 C 語言的作者之一,直到今天這本書還在印刷著。(C 語言本身的發明者 Dennis Ritchie 是 Kernighan 的合著者,他於 2011 年已辭世。)

「我依稀記得早期跟編輯們的談話,告訴他們我們已經賣出了5000冊左右的量,」最近採訪 Kernighan 時他告訴我說。「我們設法做的更好。我沒有想到的是在2014年的教科書里學生仍然在使用第一個版本的書。」

關於 C 語言的持久性特別顯著的就是 Google 開發出了新的語言 Go,解決同一問題比用 C 語言更有效率。不過,我仍然很難想像 Go 能徹底殺死 C,無論它有多麼好。

「大多數語言並不會消失或者至少很大一部分用戶承認它們不會消失,」他說。「C 語言仍然在一定的領域獨領風騷,所以它很接地氣。」

編寫所熟悉的

為什麼某些計算機編程語言要比其它的更流行?因為開發者都選擇使用它們。邏輯上來說,這解釋已經足夠,但還想深入了解為什麼開發人員會選擇使用它們呢,這就有點棘手了。

分別來自普林斯頓大學和加州大學伯克利分校的研究者 Ari Rabkin 和 Leo Meyerovich 花費了兩年時間來研究解決上面的問題。他們的研究報告,《編程語言使用情況實例分析》,記錄了對超過 200,000 個 Sourceforge 項目和超過 13,000 個程序員投票結果的分析。

他們主要的發現是什麼呢?大多數時候程序員選擇的編程語言都是他們所熟悉的。

「這些我們使用的語言還繼續存在是因為我們經常使用他們,」 Rabkin 告訴我。「例如:天文學家就經常使用 IDL [互動式數據語言]來開發他們的計算機程序,並不是因為它具有什麼特殊的亮點功能或其它特點,而是因為用它形成習慣了。他們已經用些語言構建出很優秀的程序了,並且想保持原狀。」

換句話說,它部分要歸功於這些語言所創立的知名度仍保持較高。當然,這並不意味著流行的語言不會變化。Rabkin 指出我們今天在使用的 C 語言就跟 Kernighan 第一次創建時的一點都不同,那時的 C 編譯器跟現代的也不是完全兼容。

「有一個古老的,關於工程師的笑話。工程師被問到哪一種編程語言人們會使用30年,他說,『我不知道,但它總會被叫做 Fortran』,」 Rabkin 說到。「長期存活的語言跟他們在70年代和80年代剛設計出來的時候不太一樣了。人們通常都是在上面增加功能,而不會刪除功能,因為要保持向後兼容,但有些功能會被修正。」

向後兼容意思就是當語言升級後,程序員不僅可以使用升級語言的新特性,也不用回去重寫已經實現的老代碼塊。老的「遺留代碼」的語法規則已經不用了,但捨棄是要花成本的。只要它們存在,我們就有理由相信相關的語言也會存在。

PHP: 存活長久語言的一個案例學習

遺留代碼指的是用過時的源代碼編寫的程序或部分程序。想想看,一個企業或工程項目的關鍵程序功能部分是用沒人維護的編程語言寫出來的。因為它們仍起著作用,用現代的源代碼重寫非常困難或著代價太高,所以它們不得不保留下來,即使其它部分的代碼都變動了,程序員也必須不斷折騰以保證它們能正常工作。

任何編程語言,存在了超過幾十年時間都具有某種形式的遺留代碼問題, PHP 也不例外。PHP 是一個很有趣的例子,因為它的遺留代碼跟現在的代碼明顯不同,支持者或評論家都承認這是一個巨大的進步。

Andi Gutmans 是已經成為 PHP4 的標準編譯器的 Zend Engine 的發明者之一。Gutmans 說他和搭檔本來是想改進完善 PHP3 的,他們的工作如此成功,以至於 PHP 的原發明者 Rasmus Lerdorf 也加入他們的項目。結果就成為了 PHP4 和他的後續者 PHP5 的編譯器。

因此,當今的 PHP 與它的祖先——即最開始的 PHP 是完全不同的。然而,在 Gutmans 看來,在用古老的 PHP 語言版本寫的遺留代碼的地方一直存在著偏見以至於上升到整個語言的高度。比如 PHP 充滿著安全漏洞或沒有「集群」功能來支持大規模的計算任務等概念。

「批評 PHP 的人們通常批評的是在 1998 年時候的 PHP 版本,」他說。「這些人都沒有與時俱進。當今的 PHP 已經有了很成熟的生態系統了。」

如今,Gutmans 說,他作為一個管理者最重要的事情就是鼓勵人們升級到最新版本。「PHP有個很大的社區,足以支持您的遺留代碼的問題,」他說。「但總的來說,我們的社區大部分都在 PHP5.3 及以上的。」

問題是,任何語言用戶都不會全部升級到最新版本。這就是為什麼 Python 用戶仍在使用 2000 年發布的 Python 2,而不是使用 2008 年發布的 Python 3 的原因。甚至在六年後,大多數像 Google 這樣的用戶仍沒有升級。這種情況是多種原因造成的,但它使得很多開發者在承擔風險。

「任何東西都不會消亡的,」Rabkin 說。「任何語言的遺留代碼都會一直存在。重寫的代價是非常高昂的,如果它們不出問題就不要去改動。」

開發者是稀缺的資源

當然,開發者是不會選擇那些僅僅只是為了維護老舊代碼的的程序語言的。當談論到對語言選擇的偏好時,Rabkin 和 Meyerovich 發現年齡僅僅只代表個數字。Rabkin 告訴我說:

有一件事使我們被深深震撼到了。這事最重要的就是我們給人們按年齡分組,然後詢問他們知道多少編程語言。我們主觀的認為隨著年齡的增長知道的會越來越多,但實際上卻不是,25歲年齡組和45歲年齡組知道的語言數目是一樣的。幾個反覆詢問的問題這裡持續不變的。您知道一種語言的幾率並不與您的年齡掛鉤。

換句話說,不僅僅年長的開發者堅持傳統,年輕的程序員也會認可並採用古老的編程語言作為他們的第一們語言。這可能是因為這些語言具有很有趣的開發庫及功能特點,也可能是因為在社區里開發者都是喜愛這種開發語言的一伙人。

「在全球程序員關注的語言的數量是有定數的,」 Rabkin 說。「如果一們語言表現出足夠獨特的價值,人們將會學習和使用它。如果是和您交流代碼和知識的的某個人分享一門編程語言,您將會學習它。因此,例如,只要那些 Python 庫存在、 社區也對 Python 語言很有經驗的話,那麼 Python 仍將會大行其道。」

研究人員發現關於語言實現的功能,社區是一個巨大的因素。雖然像 Python 和 Ruby 這樣的高級語言並沒有太大的差別,但,程序員總是容易覺得一種比另一種優越。

「Rails 不一定要用 Ruby 語言編寫,但它用了,這就是社區因素在起作用,」 Rabkin 說。「例如,復活 Objective-C 語言這件事就是蘋果的工程師團隊說『讓我們使用它吧,』 他們就沒得選擇了。」

通觀社會的影響及老舊代碼這些問題,我們發現最古老的和最新的計算機語言都有巨大的惰性。Go 語言怎麼樣才能超越 C 語言呢?如果有合適的人或公司說它超越它就超越。

「它歸結為誰傳播的更好誰就好,」 Rabkin 說。

開始的圖片來自 Blake Patterson

via: http://readwrite.com/2014/09/02/programming-language-coding-lifetime

作者:Lauren Orsini 譯者:runningwater 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國