code.club

 找回密碼
 立即註冊
搜索
查看: 6237|回復: 0
打印 上一主題 下一主題

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

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2015-1-30 00:53:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
當今許多知名的編程語言已經都非常古老了。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

通過:http://readwrite.com/2014/09/02/ ... age-coding-lifetime

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

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|手機版|Archiver|code.club  

GMT+8, 2024-4-25 13:22 , Processed in 0.078830 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表