程式語言在2011年中的起起落落

發表於2012-01-16

原文連結:http://drdobbs.com/mobile/232400093,編譯:51cto

隨著移動裝置成為主流開發平臺,指令碼語言開始逐漸失勢。在過去的一年裡,程式設計領域迎來了翻天覆地的變化:移動裝置成為程式設計工作的主要平臺,而另一方面雲也成為資料及應用程式的一大特定平臺。

在過去的一年裡,程式設計領域迎來了翻天覆地的變化:移動裝置成為程式設計工作的主要平臺,而另一方面雲也成為資料及應用程式的一大特定平臺。在二者之間,桌上型電腦與膝上型電腦則在記憶體容量及處理器核心數方面突飛猛進。可以預見的是,上述變化將給開發語言的選擇帶來深遠影響。

極負盛名的Tiobe程式語言排名榜(一份相當權威的榜單,不僅密切關注各種語言及衍生產品,還會以百分比形式及時公佈具體的變動幅度)表示,在過去一年中發展勢頭最強勁的語言為Objective-C。我相信大家對這一結果應該不會太過驚訝。隨著iPhone、iPod以及iPad(Mac也在一定程度上推波助瀾)在全球範圍內的風靡,對Objective-C使用技能的需求也得到了顯著提高。

移動裝置的興起同樣對Java造成衝擊。儘管在過去十年中,Java在Tiobe榜單上的各項資料已經處於衰退之中,但近兩年卻又有捲土重來之勢——我相信這與Android開發領域的繁榮密不可分——一年來,Java甚至成功捍衛了自己的市場佔有率。根據我的分析,Android平臺的出現成功為Java找到了一展身手的空間,尤其是在諸如Scala、Groovy以及JRuby等JVM語言逐步蠶食桌上型電腦及伺服器平臺的大環境之下,新平臺堪稱是Java的救星。

隨著移動程式設計的繁榮發展,開發人員們也將注意力轉移到較為低階但更貼近硬體本身的程式語言上。通常情況下,由於移動裝置上的應用程式往往使用較小的程式碼庫,同時充分發揮硬體功能也需要使用特定種類的語言,因此指令碼語言在這方面也顯得較為疲軟(蘋果公司對程式語言及工具的嚴格控制也助長了這種趨勢)。綜上所述,多年以來(也可能是有史以來)各種主流指令碼語言——包括Perl、Python、Ruby以及PHP等——第一次兵敗滑鐵盧。其中Python與Ruby則折戟沉沙得更加徹底。

根據Ohloh.net網站的總結,Ruby作為一款開源程式語言贏得了開發者們廣泛的關注,這從其獲得的捐贈數額上可見一斑;憑藉這樣的人氣,Ruby佔據了Tiobe排行榜中的榜眼位置。而去年Ruby在程式碼使用規模方面達到了06年以來的最低水平——只有08年鼎盛時期的五分之一。我認為這種現象的出現,部分原因在於Ruby on Rails(簡稱RoR)引發的熱潮漸漸平息;另外雖然Ruby框架本身不存在任何固有缺陷,但必須承認它只能作為大型專案的備選解決方案之一,而無法搞定所有問題。另外,其它型別的框架也已經開始在原創優勢方面痛下苦功,這進一步削弱了RoR的賣點。Python在Tiobe排行榜中的下滑並沒有反映在Ohloh統計數字中,這可能表明儘管Python使用者群體並未縮水,但由於市場整體規模的迅速擴張,導致其相對份額變得更小。

我個人認為PHP的頹勢主要源自JavaScript的崛起。JavaScript雖然在Tiobe排行榜中的晉升幅度並不誇張,但其在開源軟體專案中的使用比例卻有了長足進步。PHP與JavaScript在功能性方面有著一定程度的重疊,而很明顯後者正慢慢成為時代的寵兒。一項新的調查(感謝PHP的出品公司Zend預先向我們透露了這份調查內容)顯示,82%的PHP開發人員將JavaScript作為各選語言(而在二者之外排到第三位的競爭者Java則僅佔據了微不足道的24%)。不過目前還難以判斷JavaScript是否能夠將這種優勢一直保持下去。正如我在幾個月前的文章中所說,我越來越認同JavaScript將成為一種通用型中間語言的趨勢,而Coffeescript與Dart等則會成為前端語言的主流代表。就個人而言,我希望各瀏覽器廠商能夠願意將JavaScript編譯化二進位制程式作為未來瀏覽器加速機制的重要組成部分;不過我認為這同時可能會給某些瀏覽器在指令擴充套件方面走向開源,進而阻礙有針對性的效能優化。

由指令碼語言轉向本機語言的的流行趨勢在.NET領域也表現得相當明顯。C#的一炮而紅就很說明問題(其提升幅度僅次於Objective-C而排在第二),這股趨勢甚至一舉讓C#穩居C++之上,佔據了Tiobe排行榜的探花位置。我相信這種增幅在很大程度上與開發人員脫離Visual Basic有關。這種趨勢非常奇怪地削弱了.NET的主旨,即開發者在同一平臺上使用多種互操作語言的習慣。但事實上,與.NET相關的各類語言緊密圍繞在了以C#為核心的中央周圍,進而弱化了原有使用習慣帶來的益處(具有諷刺意味的是,JVM則遭遇到完全相反的事態,即多種具有互操作性的備用語言逐漸佔據上風)。

一年還不足以使一種趨勢成為常態,因此上述變化將以何種方式收尾目前還無法得到定論。然而非指令碼語言的發展由於其遍地開花的良好勢頭,可能真的預示著長期以來束縛著開發者們的固定習慣即將動搖。儘管執行平臺在效能與接合的嚴密程度方面難免有所損失,但相比之下似乎一切都是值得的。結局會怎樣?讓我們拭目以待吧。

相關文章