新聞動態 / News

如果我們在2015發明一種語言的話,那么它該長成什么樣子呢?要面向對象么?要有類型推導系統么?要有列表生成式(listcomprehension)么?要有內置的模式匹配么?要有多值返回么?選用actor模型還是軟件事務內存(STM)?要不要有內置的分布式透明性以及容錯機制?應該有垃圾回收么?要支持惰性求值(lazyevaluation)么?可能我們心中還是有無數的工程設計上的考慮,但有一點貌似不用懷疑,那就是它幾乎肯定是開源的。

開源

說道編程語言和開源,我們不禁回想起那個舊時代,幾乎所有的好的編譯器都把持在商業公司手里。曾幾何時,我們無論如何也不會相信有一天Borland,Microsoft,Intel,Sun會把自己的看家寶拿出來開源。但世事難料,有的公司不再了,有的公司再也把持不住了,終于全面擁抱了開源。

第一個要說的就是微軟了。在2015年,微軟可以說是態度最為端正的社區參與者了,不但繼續加大.Net開源的力度,而且還派Anders大神到處游說。不過話又說回來了,微軟醒悟的早,但是動作一直太慢,所以.Net特別缺乏有效聯盟伙伴,只能看著Java平臺的JBoss,Spring,Apache三家斗地主,獨自一人生悶氣。微軟可是Apache的大金主啊,錢沒少出,吃也沒吃,喝也沒喝,自然是不開心的。

要是從語言特性上來說.NET的當家花旦C#實際上依然是相對于Java先進很多,可能主要是底子好吧。Java那個不爭氣的泛型和C#沒法比啊,也才剛剛有Lambda這種非常基本的支持。更不要說微軟還有F#這種大殺器,語言特性層面完全和Scala有的一拼的,只是生不逢時,還沒有綻放可能就凋謝了。說到這,就得多說兩句了,ML系的語言,或者收到ML影響的語言,比如Ocaml,Haskell,Scala,F#等在過去的一年里被大家談論的越來越多了。說白了,類型可能還是對真實世界的較為合理的抽象,而且嚴格的類型系統對系統設計師提出很多有意思的挑戰,但卻能極大程度上在編譯器期就能發現系統的很多Bug。所以在比較復雜的大型系統中,大家越來越愿意使用這些語言。

不過要指出的是,我國的計算機教育在這一塊差的很遠,絕大多數國內的計算機專業并不會教授StandardML或者Haskell這種非常適合教學的函數式語言,真的是非常的遺憾。既然這里說的是微軟,那就再推薦讀者去看看微軟有個《第九頻道》的教學網站,里面有很多函數式編程的內容。微軟已經徹底開放了,不但有編譯平臺,Core,周邊的Framework也都毫無保留,不過想一想在.Net領域的前十個重量級的開源項目都是微軟的,也是一種悲傷。

當然微軟還遠遠不止這些,年底的時候又開源了自己的JavaScript引擎ChakraCore,這是一種什么樣的精神,當然是與Google死磕的精神。憑借微軟在編程語言方面的積累,這次放出的大招著實讓人驚嘆。

第二個要說的就是蘋果開源了Swift。很多人都說蘋果這個公司很封閉,這次鬧出這么大事兒有點出乎意料。我倒是覺得很正常,蘋果之前一直開放了WebKit,包括Chrome在內都受益了很長一段時間。蘋果拉攏Intel搞編譯器平臺LLVM這個也是盡人皆知,所以今天能開放出來Swift并不讓人感到十分意外。編程語言年年有,但往往死的都很慘。蘋果這是要拼了老命也要在編程語言上占有一席之地啊。Object-C已經太老了,Swift本來就是接班的,這次蘋果的動作不算大,但也足可以看出來,頂級IT公司還是很在意自己的顏值的。Oracle有Java,Google有Go,微軟有.Net,蘋果也得做一個體面的玩家啊。可能之前大家都是覺得Swift就是用來開發蘋果上面的應用的,可是仔細看看官網就會發現,Swift的野心可要大得太多,原本人家就是要干掉C/C++/Objective-C的,所以這個和Go的定位有什么不同呢?其實很多技術的流行,最后都要有強大的資金支持,蘋果這個大金主,這么開放地去做Swift絕對會很大程度上提升Swift的影響力。這其中的關鍵點可能就在于構建一個生命力旺盛的生態,吸引各種玩家進來,幫助這些玩家實現利益最大化。Swift下一步可能還要做的就是標準化,這可能是成熟語言的一個標志,也是開放生態的又一個里程碑。

性能

使用各種語言的人最愿意拿性能說事兒,也最愿意拿性能作為武器攻擊其他語言。的確,性能是計算機領域永遠追求目標,所以我們也看看2015年,哪些語言放了性能大招。

首先要說的肯定是PHP7的發布了。PHP在編程語言的學術討論當中很沒有地位,但這并不妨礙大眾對其的喜愛。要知道,如果按照網站數量來計算,整個互聯網很大程度上是用PHP寫的。當我們看過PHP7所做優化的介紹以后,不禁會問一個問題,為什么這些優化是在2015年做的,而不是十年前。

其實本質上來說,最近發布新版本并沒有什么是經典教科書上沒有的東西。從改進上來說我們也看到一種趨勢,類似于JVM那樣的中間平臺是必要的,以便進行各個層面的優化。JIT必須有,其他沒有JIT的解釋型語言要努力加把勁了,PHP的VM應該說還處于一個非常早期的階段,但由于大量的真實應用會促使它很快速的更新和改進。至少PHP7對我來說不僅僅是性能上的一次卓越的提升,更是讓PHP的底層走到一個更為光明寬廣的道路上。整個這次大版本的更新也證明了一個事情:科學技術就是第一生產力,看書學習是有用處的。

Go也是發布了一個大版本1.5。去不去掉里面的C代碼我并不是太關心,相信對很多用戶來講也不是那么重要的。完完全全重新設計垃圾收集才是對語言使用者最應該關注的事情。

Go一直為大家所津津樂道的好處之一就是性能,現在看來性能上的改進也依然是一個長期的任務。只要涉及到垃圾收集,這個優化看來就是一條漫漫的不歸路。Java今年是20年了,在垃圾收集這條道路上依然沒有體制腳步,Go要走路會更長。當然總會有想抄近路的壞小子,比如Rust,不要垃圾收集了,而且還是內存安全的,貌似一個不可能的任務。Rust的背后是Mozilla,明顯財力上不如谷歌,但貌似野心不小,不知道什么時候能看見用Rust寫的明星級別的系統軟件,比如Docker這樣的。那將是對這門語言的極大促進,也就不需要用各種Benchmark說事兒了。嚴格的類型系統的確是語言學習者的巨大障礙。但趨勢不可阻擋,Rust和Swift很多地方相互借鑒,這種嚴格的類型是未來的一部分。

JavaScript平臺覺得JavaScript僅僅是門編程語言的同學可能要重新看看JavaScript最近的發展了。隨著JavaScript引擎的各方面不斷提升,JavaScript已經成為一個非常繁榮的平臺,有點點JVM或者.Net平臺的味道了。不是有人說,能用JavaScript實現的東西,最后都會用JavaScript實現么。有沒有那么神奇不知道,但是在這個平臺上,新的語言層出不窮,比JVM得新語言貌似發展的還要好。

傳統意義上對JavaScript進行輕微改良的CoffeeScript就不說了,我們來看看這一年大家討論比較多的幾個新熱點:TypeScript,ClojureScript,Elm。TypeScript是Anders大神最近傾力打造的,最近獲得社區很多好評。其中包括Angular團隊宣布與TypeScript合作,事實上他們的確也這么干了。看來世界的確需要類,大型系統也的確需要更加有力的抽象。如果說TypeScript還算一個比較成功的對JavaScript的改良的話,ClojureScript做的就只是一個編譯工具了,只不過這個編譯工具能讓Clojure能執行在JavaScript平臺上。不知道其他語言怎么想,至少在Clojure官網有ClojureScript屬于正統的鏈接。雖說看上去意義不是那么大,但實際的效果就是一個React的ClojureScript綁定叫om,在Github竟然有4800多顆星。

真是但凡和JavaScript有關系的項目都會意外的火啊!最后這個Elm就是完全Haskell版本的JavaScript,沒錯,有類型推導!Reactive雖說是這一年特別流行的詞匯,但是為了Reactive能做一門語言來徹底貫徹這一理念實屬是大徹大悟。

前端引發的各種技術革命已經將戰火燒到了編程語言層面。JavaScript作為一個平臺,提供了很多和JVM類似的特性,比如JIT,垃圾收集,使得在此之上的編程語言會越來越豐富。還有微軟,蘋果,谷歌,Mozilla都是對此不遺余力地投入,標準制定和更迭都非常規范,社區的繁榮,龐大的用戶基數,這些都是我們繼續看好這個平臺的原因。

結語

設計語言特性和設計語言運行時平臺越來越分離,設計語言變得越來越容易,但做運行時平臺真實難上加難。新銳的語言都更多地邁向了函數式語言的領地。我們都需要學習新語言,每種語言都給我們帶來了不同的思考方式和看待世界的方式。每個真正的程序員都應該設計自己的編譯器或者解釋器,不知道這個是否在你的2016年計劃里?

作者簡介:

程顯峰,獨立顧問,之前任OneAPM公司首席運營官,積木盒子技術VP,擅長軟件研發團隊的管理。作為知名技術顧問,曾服務于花旗銀行、藍色光標、國家電網等多家大型集團。致力于推動開源軟件在國內的發展,是MongoDB和Docker技術在國內早期的推動者,并翻譯有《MongoDB權威指南》和《深入學習MongoDB》等書籍。喜歡研究各種編程語言

黑粗硬大欧美在线视频