您當前位置: 南順網絡>> 官方資訊>> 行業動態

十種可能改變IT行業走向的編程語言__編程語言前沿

作為開發人員,我們真的還需要學習那么多的新型編程語言嗎?,F在所擁有的選擇已經是相當的豐富,命令語言、函數語言、面向對象型語言、動態語言、編譯語言、解釋型語言以及腳本語言等等。這些身處業界前沿的編程語言為軟件開發工作的未來提供了獨到的解析視角。


我們真的還需要那么多新型編程語言嗎。當前開發人員們所擁有的選擇無疑已經相當豐富。命令型語言、函數型語言、面向對象型語言、動態語言、編譯語言解釋型語言以及腳本語言等等似乎已經完全罩得住我們可能面對的一切任務,而且今日也幾乎沒有哪位專業人士能夠通曉上述全部語言。



然而,新型語言仍然在以驚人的速度不斷涌現。有些是學生或者愛好者以個人項目的形式所設計,另一些則是來自大型IT供應商的產品。連中小型企業也不甘勢弱,積極針對其所在行業的需要開發出服務用語言。為什么人們如此熱衷于這種重復性勞動呢。


答案其實很簡單,盡管目前大家手頭的語言在功能性與通用性方面已經相當強大,但仍然沒有哪種單獨的語法規則能程度迎合任何一種實際需求。更重要的是,編程行為自身也處于不斷的發展變化當中。多核CPU的崛起、云計算的升溫、高流動性與分布式體系結構,這一切的一切都向開發人員提出了新的技術性挑戰。要為現有語言——尤其是當下流行的語言——添加新功能、范例以及模式可以說比登天還難。有時候直接搞一套新語言往往是解決方案。


那么在這里,我將帶大家一同縱覽十種位居業界前沿的編程語言;其中每種方案都從全新的視角詮釋了軟件開發工作的藝術性,并以各自不同的特色解決了某些具體問題或是彌補了當下某款主流語言的獨有缺憾。它們中有些是已經頗為成熟的項目,而有些則尚處于自身發展的初級階段。有些可能對于大家來說還相當陌生且顯得晦澀但懂,但毋庸置疑的是,它們很可能在未來給開發業界帶來顛覆性的突破,并徹底改變今年數年的編程工具發展趨勢——在新一代語言面世前,它們就是未來的生力軍。




實驗性編程語言: Dart


JavaScript在為網絡頁面添加基本交互功能方面表現拔群,但當網頁應用程序的體積達到數千行代碼時,該語言的局限性就將暴露無遺。谷歌正是基于這種缺憾而推出了Dart,而這種語言也承載了谷歌為網頁編程帶來全新標準的雄心壯志。


38c32459-c785-4450-adf4-113ec18976db.jpg



與JavaScript相似,Dart采用了與C語言相似的語法及關鍵字。然而Dart與JavaScript最為顯著的區別在于,前者中的對象明確指向類及接口,這與C++及Java頗有異曲同工之妙。Dart還允許程序員們利用靜態式有選擇地聲明變量。追溯設計者的思路,他們應該是希望Dart與JavaScript一樣更易于學習、保有動態特色以及流暢的執行效果,這樣一來開發人員就能夠在編寫代碼方面投入較少的時間,產品維護也將更為便捷,同時細小的錯誤帶來的影響也將被降程度。


目前我們還不能用Dart解決太多實際問題。其設計理念是希望該語言能夠同時運行于客戶機與服務器之上(與Node.js差不多),但現在惟一能夠讓Dart代碼在客戶端上運行的辦法是將其通過編譯轉換為JavaScript。它還不能正確作用于每一款瀏覽器。不過由于Dart以BSD類開源許可方式進行發布,因此任何購買了谷歌版本的廠商都可以隨意將其構建于自己的產品當中。谷歌要做的只是說服業界接受這個編程領域的新生兒即可。




實驗性編程語言第二位: Ceylon


Gavin King并不承認Ceylon這款他在紅帽公司中創造出來的語言肩負著“Java終結者”的歷史使命。在King的從業經歷中,最為耀眼的一頁正是他作為Hibernate——Java對象關系映射框架的創建者所贏得的贊譽。他喜歡Java,但他仍然認為Java還有很多提升空間。


King對于Java的抱怨主要集中在冗長的語法結構,這種語言缺乏一級與高端功能,而且對元編程的支持也相當薄弱。而更令他感到沮喪的是,Java中對于結構化數據定義的聲明性語法極為欠缺,用他的話來說這使得Java“與XML根本無法分割?!盋eylon的目標就是解決上述疑難雜癥。


King與他的團隊并不打算完全從零做起。Ceylon虛擬機就不會出現,此類功能將通過Ceylon編譯器將內容轉換為Java字節代碼,進而運行于JVM當中。不過Ceylon絕不會止步于一款編譯器這么簡單。該項目的一大雄心是打造一套全新的Ceylon SDK體系來取代Java SDK,引用King對于后者的評價——結構臃腫、笨拙,且從來沒有得到“適當的、與時俱進的調整?!?/p>


這是一項艱巨的任務,因為紅帽公司到目前為止還沒有發布過任何一款Ceylon工具。King表示自己期待著能在年內看到一款編譯器出現,但不會指望短時間內會有“由Ceylon編寫”的軟件問世。





實驗性編程語言第三位: Go


解釋程序、虛擬機以及托管代碼如今正風靡一時。我們真的需要另一款用于將目標內容編譯為本地二進制文件的老式語言嗎。來自谷歌工程師團隊的小組——由Robert Griesemer以及貝爾實驗室的傳奇式人物Ken Thompson與Rob Pike共同執掌——給出的答案是肯定的。


19d21be9-495d-4fce-8b60-ca434a4420ba.jpg




Go是一種通用型編程語言,且適用于從應用程序開發到系統編程等各種工作需求。從這種意義上來說,它更接近于C語言或C++,而不是Java或是C#。但與后兩者一樣,Go中也包含著各類現代化功能,包括垃圾收集、運行時間映象以及對并行性的支持。


同樣重要的是,Go在設計上有意降低了編程難度。其基礎語法與C語言非常相近,但卻消除了多余的語法及樣板文件,同時簡化了對象定義等常用功能的操作。Go項目小組的目標是打造出了一款像動態腳本語言那樣擁有親切代碼的語言,并且能夠像編譯語言那樣提供強大的功能性。


Go尚處于創建過程之中,而且其語言規范也仍可能發生變動。也就是說,我們目前已經可以開始嘗試使用了。谷歌已經為其打造了對應的可用工具與編譯器,說明文檔之類也相當豐富;舉例來說,Effective Go教程就是大家了解Go與其它早期語言不同之處的上佳起點。






實驗性編程語言第四位: F#


函數型程序設計在計算機科學家以及學術界一直都相當流行,但像Lisp以及Haskell這樣的純函數型語言通常被人們認為無法作用于實際應用中的軟件開發工作。對于函數型代碼,大家抱怨最多的是它們很難與由C++及Java等命令型語言所寫成的代碼與庫相整合。


說起F#(發音為“F=sharp”),這款微軟推出的語言在設計上可謂兼顧了功能性與實用性。由于F#在.Net公共語言運行(簡稱CLR)中屬于一級語言,因此能夠訪問其它CLR語言的所有同類庫及功能,包括C#及Visual Basic等。


F#代碼與OCaml多少有些類似,但它同時擁有不少相當有趣的特色語法。例如,F#中的數字型數據可以通過分配獲得計量單位,進而為科學類計算服務。F#還為異步式I/O、CPU并行處理以及GPU負載分擔等功能提供了必要的理論支持。


在度過了微軟研究中心中漫長的醞釀期后,F#現在終于同Visual Studio 2010一同面世了。更妙的是,微軟這一次不按常理出牌,將F#編譯器與代碼庫通過Apache開源許可呈現在我們面前;大家不僅能夠使用這款語言,更可以將其引入Mac及Linux系統(通過Mono運行工具)。





實驗性語言第五位: Opa


Web開發工作是公認的繁雜無比。就算是最簡單的一款Web應用程序也需要不計其數的代碼行與多種語言交替使用:HTML與JavaScript處理客戶端、Java或PHP應對服務器、SQL負責數據庫等等。


Opa其實并不打算單獨取代上述任何一種語言。相反,它存在的目的是希望通過為Web編程設定一套全新規范的方式一次性將各類方案直接抹殺。在Opa應用程序中,客戶端UI、服務器端邏輯以及數據庫I/O都由同一種語言負責實施——也就是Opa本身。


而要完成這一目標,Opa需要將客戶端與服務器端框架進行整合。由Opa編譯器來決定某個特定程序是否應該運行于客戶端、服務器端或是同時運行于二者之上,其后該編譯器將輸出運行所必需的代碼。對于客戶端型程序而言,編譯器會將Opa的代碼內容轉換為相應的JavaScript代碼,包括其中的AJAX調用。


當然,這樣規模的整合型系統也暗藏著一些后臺機關。Opa的運行環境將其Web服務器與數據庫管理系統捆綁在一起,也就是說我們無法用其它獨立的備選方案取代它們的位置。這當然可以算是一點缺憾,但為了保持標準的細致化與完整性,并使得數據驅動的Web應用程序能夠以短短數十行代碼得以表達,這一切都是值得的。Opa項目完全開源,并且目前已經支持64位Linux以及Mac OS X平臺;今后隨著工作的深入還將有更多端口得以開放。






實驗性編程語言第六位: Fantom


我們是否應該在開發自己的應用程序時考慮對java及.Net的支持。如果使用Fantom來編寫代碼,那么一切都不必擔心,連交換機平臺也不在話下。這是因為Fantom在設計上兼顧到了跨平臺的可移植特性。Fantom項目中不僅包括能夠為JVM或者.Net CLI輸出字節代碼的編譯器,同時也擁有一組能夠容納Java及.Net接口的抽象化API,也就是創建了一套額外的可移植層。


Fanrom的可移植性還有著進一步的擴展規劃。目前由Fantom到JavaScript編譯器已經可以使用,而接下來我們還可以期望看到包括LLVM編譯器、Parrot虛擬機以及iOS版Objective-C在內的各類延展型項目。


不過千萬別把可移植性當作Fantom語言惟一的存在理由。雖然它在本質上仍然是以C語言為基礎,但它同時也對該原始模型進行了充分改良。Fantom語言試圖在某些頗具爭議的語法討論——例如牢固與動態或者接口與類——之中獲取中立身份。它不僅增加了對數據結構說明及序列化對象的簡化說明,還囊括了對函數型程序設計及并行性創建工作的有力支持。


Fantom是基于Academic許可3.0版本的開源項目,并且現在在Windows以及Unix類平臺(包括Mac OS X)上已經可以付諸使用。




實驗性編程語言第七位: Zimbu


大多數編程語言都從其它早期語言中借用到了某些功能或是語法。而Zimbu則把這種拿來主義精神發揮到。作為Vim文本編輯器作者Bram Moolenaar的另一款得意之作,Zimbu的目標是成為一款速度快、語法簡潔、適應移植需求且便于閱讀的語言,并最終使得來自任何圖形用戶界面的應用程序代碼得以運行于目標操作系統內核當中。


由于Zimbu與生俱來的雜交血統,其語法也相當獨特,但同時卻又功能豐富。它采用與C語言相似的表達式及運算符,但卻使用自己的一套關鍵字、數據類型及塊狀結構體系。另外,它還支持內存管理、線程及通道等功能。


可移植性一直是個關鍵問題。盡管Zimbu是一款編譯型語言,但其編譯器輸出的是ANSI C碼,這就使得文件只能由具備本地C編譯器的平臺來生成。


遺憾的是,Zimbu項目如今尚處于起步階段。而其編譯器雖然已經能夠為自身及其它程序創建一些演示范例,但并不是全部Zimbu有效代碼都能夠正確運行。不過預期功能目前還不完善,其中一些還只是加以草草設置,因此我相信只要假以時日,這些問題都能得到妥善解決。另外語言規范也很可能隨著時間的推移而產生變化,例如在必要時添加新的關鍵字、類型以及語法等。所以說明文檔等材料目前還沒有統一的結論。不過如果大家對這種語言有興趣的話,其初始工具已經在Apache許可基礎上得以公布。





實驗性編程語言第八位: X10


并行處理一度作為軟件開發領域中的獨特生態圈存在,但隨著多核心CPU及分布式計算技術的日益普及,并行化也崛起成為未來發展的主流方向。遺憾的是,今日,編程語言仍然沒能跟上時代的步伐。而這正是IBM研究中心苦心開發X10的原因,這是一種以提高開發人員生產效率為主旨的實用型語言,希望在現有基礎上將開發效率提高“十倍”。


X10利用劃分式全局地址空間(簡稱)編程模型來解決并行類任務。代碼與數據作為各自獨立的單位,分別位于一個或多個“空間”當中,這就使得將單線程字節代碼(單獨空間)向高性能集群中單核心或多核心處理器(多個空間)的多線程處理能力轉化的過程更為簡便。


X10代碼總體來說與Java比較相近;事實上,X10運行環境可以直接作為本地可執行文件以及類文件應用于JVM當中。X10編譯器能夠輸出C++或是Java類型的源代碼。達成與Java語言之間的直接操作性是該項目的努力方向。


就目前而言,這種語言雖然還處于發展變化中,但也已經算得上相當成熟。其編譯器與運行環境支持一系列平臺,包括Linux、Mac OS X以及Windows。包括基于Eclipse的IDE及調試工具等都已經以Eclipse公共許可為基礎進行發布。




實驗性編程語言第九位: haXe


大多數語言都可以用來編寫可移植代碼。C語言編譯器能夠作用于幾乎每一種CPU架構,而Java字節代碼則能夠在一切具備JVM的環境中發揮功效。但haXe(讀音為“hex”)能做的則比可移植性更多。它是一款跨平臺語言,能夠適應各種不同類型的運行環境——包括本地二進制解釋程序及虛擬機。


開發人員可以利用haXe編寫程序,然后將結果編譯為對象代碼,例如時下流行的JavaScript、PHP、Flash/ActionScript或者NekoVM等等;而像C#、Java等其它輸出模塊目前仍處于研發階段。在核心語言之外有haXe標準庫作為補充,其指向各類目標的功能也同樣齊全,而且還為目標平臺的獨特功能配備了專用的函數庫。


haXe在語法上與C語言相似,函數集合相當豐富。它的主要優勢在于規避了目標平臺自身固有的缺陷。舉例來說,haXe具備JavaScript所欠缺的嚴謹歸類;它在ActionScript的基礎上增加了通用語句及類型推導;它還完全消除了PHP語言在語法方面的設計疏漏與雜亂無序。


雖然仍處于開發階段,但haXe在其創造者Motion Twin游戲工作室的推動下已經進入商業化運營,因此我們已經應該用嚴肅的眼光看待它。它支持Linux、Mac OS X以及Windows平臺,并采用數款開源類許可相結合的分布模式。




實驗性編程語言第十位: Chapel


在高性能計算領域,很少有哪家企業的風頭能夠蓋過Cray,因此Cray公司的原始編程語言Chapel能夠上榜也就毫不奇怪了。這是一款在設計上主要考慮到超級計算機及集群實際需求的語言。


Chapel是Cray公司Cascade Program項目的一部分,該項目可謂野心勃勃,其部分計劃內資金甚是由美國國防部研究計劃局(簡稱DARPA)所提供。其目標主要是從底層硬件中提取抽象并行算法,進而提高現有架構的性能表現,并使得并行類程序具備更好的可移植性。


Chapel的語法脫胎自許多來源。除了幾款我們常見的主流語言(例如C、C++以及Java),它還從像Fortran及Matlab這樣的科學類編程語言中借鑒了不少概念型內容。它的并行處理能力在一定程度上與ZPL及高性能Fortran密切相關,另一些Cray早期項目也是它的學習目標。


Chapel最引人注目的特色之一是其“多分辨率編程”功能,這項功能使得開發人員能夠在應用程序中引入更多抽象化代碼,并在實施中添加更多細節闡述以使得定義本身更加明確。


Chapel仍處于開發階段。目前它能夠運行于Cray超級計算機及各類高性能集群之上,并且可以移植到大多數Unix類系統(包括Mac OS X以及安裝了Cygwin的Windows系統)當中。該語言源代碼采用BSD型開源許可。


編輯:--ns868