是否有一種完美語言來終結“程式語言之爭”?
策劃|Tina
編輯|InfoQ 編輯部
針對目前流行的語言,InfoQ 組織的“程式語言”專題中,給您精選瞭如下文章!
大家都可能聽過“PHP 是最好的語言”段子。
程式語言很多,既然存在,就有每個存在的理由。其實沒必要評論哪個語言好,哪個語言不好。因為每個程式語言本身都不難,只要學會了一種語言,其他的都是相通的。難的,好壞之分,是理解,記憶,熟悉,和流暢的使用那些每個語言提供的基礎庫和擴充套件庫,也就是 LIBs,或是 APIs,或是 SDK,或是 Frameworks。
程式語言本身,就最簡單的集合來說,就是一堆保留的關鍵詞和一堆的語法,這個大家稍微看看就都會明白,還有其設計思想。就和學一門外語一樣,一些詞彙加上一些詞彙能組合的語法。這些通常包括的程式語言特性有:語句組成,變數定義,算術運算,迴圈語句,函式定義和呼叫,物件導向,指標操作,垃圾回收,輸入輸出等等。基礎的東西,大家如果學過或是使用過一種語言,其他的新的語言,花個一兩分鐘就能寫出一個 hello world 的入門程式,花個一兩個小時就能基本理解。
那麼,好壞之分,難的部分,實際上是那些基礎庫和各種擴充套件庫。這些庫,必須在實踐中一步一步熟悉和掌握。如果不經常使用,還特別容易忘記,儘管現代的程式設計環境有各種智慧輔助。會不會,熟不熟一門語言,很大程度上是對他們的持續使用和理解。這也是為什麼,沒有多個專案,或是幾年的實踐,很難說是一個語言的高手。
比如同樣對於網路的操作,有的語言的庫包裝的簡單高階易用全面,有的語言就基礎原始。那麼對於那些有高階包裝庫的語言,大家就會覺得好,語言好用,開發效率高,想要什麼都有,socket、tcp/ip、http、async/sync、select、event,甚至是 sever、client、crawler 等等。而對那些比較底層的包裝的語言,大家就學覺得開發效率低,難用,比如只有 select 和 socket。是不是大概如此?
學習完了程式語言基礎,大家一般要花很多的時間去了解和學習基礎庫和擴充套件庫,這個才是真正的痛處和難點,學了不用還容易忘記,用到的時候還得想到有這個函式庫。那麼,如果有一套對各種語言都適用的 API 或是庫函式定義,那麼,大家學習和使用一門新的語言的效率會大幅度提高。這時,哪個語言最好,也就不再是什麼問題了。
Protobuf、Thrift、COM、RPC 等等都已經在做這方面嘗試,如果有一天,大家不管用什麼程式語言,只要記住一套介面函式,那就太美好了。這時,估計沒有人會再爭論,PHP 是否是最好的語言了。
《架構師特刊:程式語言》序言,作者:陳利人
今日頭條 Go 建千億級微服務的實踐
Go 是 Google 開發的一種併發型,具有垃圾回收功能的程式語言。Go 語言最初由 Robert Griesemer, Rob Pike 和 Ken Thompson 在 2007 年末共同設計和實現,2009 年 11 月份正式釋出並開源,當它全部開源出來後,獲得了當年的年度語言。
Go 語言相對其它語言具有幾點天然的優勢:
語法簡單,上手快。
效能高,編譯快,開發效率也不低。
原生支援併發,協程模型是非常優秀的服務端模型,同時也適合網路呼叫。
部署方便,編譯包小,幾乎無依賴。
Go 適合用來做:1. 伺服器程式設計,通常以前是使用 C 或者 C++,用 Go 來做很合適,例如處理日誌、資料打包、虛擬機器處理、檔案系統等。2. 分散式系統,資料庫代理器等。3. 網路程式設計。4. 記憶體資料庫。5. 雲平臺。
Go 語言在中國發展也非常不錯,今日頭條當前後端服務超過 80% 的流量是跑在 Go 構建的服務上。微服務數量超過 100 個,高峰 QPS 超過 700 萬,日處理請求量超過 3000 億,是業內最大規模的 Go 應用。
在 2015 年之前,頭條的主要程式語言是 Python 以及部分 C++。隨著業務和流量的快速增長,服務端的壓力越來越大,隨之而來問題頻出。Python 的解釋性語言特性以及其落後的多程式服務模型受到了巨大的挑戰。
2015 年 6 月,今日頭條開始使用 Go 語言重構後端的 Feed 流服務,2016 年 6 月,Feed 流後端服務幾乎全部遷移到 Go。
點選下圖即可閱讀全文
Java 老矣,尚能飯否?
從 1995 年第一個版本釋出到現在,Java 語言已經在跌宕起伏中走過了 22 年,最新的 Java 版本也已經迭代到 Java 9。當年 Java 語言的跨平臺優勢如今看來也只不過是家常小菜,Go、Rust 等語言橫空出世,進一步拓寬了程式語言的邊界。當年發明 Java 語言的 Sun 公司早已被 Oracle 收購,Oracle 現在也正處於水深火熱的雲端計算浪潮當中,甚至連 Java 之父 James Gosling 也加入了當今世界最大的雲端計算公司 AWS。
Java 語言發展的這 20 年也正是全球網際網路迅猛發展的 20 年,Java 語言同時也見證了電商浪潮、移動網際網路浪潮、大資料浪潮、雲端計算浪潮,所以在現今各大網際網路公司身上都能看到 Java 的身影。
TIOBE 的語言排行榜顯示,自 2016 年初 Java 語言就出現了明顯的下頹趨勢,開發者社群也出現了一些唱衰 Java 語言的論調,編者心中也有些許疑問:Java 老矣,尚能『飯』否?基於這樣的背景,InfoQ 邀請到了 Java 資深專家張建鋒來為大家解讀 Java 語言的發展現狀以及未來。
點選下圖即可閱讀全文
Python 向來以慢著稱,為啥 Instagram 卻唯獨鍾愛它?
Python 的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989 年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,於是 Python 就誕生了。
儘管 Python 有時被粗略地分類為“指令碼語言”(script language),但是它具有最豐富和強大的類庫,以及良好的擴充套件性,於是在工業和科研上獲得廣泛的使用。
PyCon 是全世界最大的以 Python 程式語言 為主題的技術大會,大會由 Python 社群組織,每年舉辦一次。在 Python 2017 上,Instagram 的工程師們帶來了一個有關 Python 在 Instagram 的主題演講,同時還分享了 Instagram 如何將整個專案執行環境升級到 Python 3 的故事。
Instagram 的總註冊使用者達到 30 億,月活使用者超過 7 億 (作為對比,微信最新披露的月活躍使用者為 9.38 億)。而令人吃驚的是,這麼高的訪問量背後,竟完全是由以速度慢著稱的 Python + Django 支撐。Python 雖然執行很慢,不過,這對於 Instagram 不是問題,因為他們認為:『Instagram 的最大瓶頸在於開發效率,而不是程式碼的執行效率』。上面是 Instagram 這種業務上不依賴高強度運算的例項。對於計算強度高的業務,如果強調效能,可以使用 Cython(https://en.wikipedia.org/wiki/Cython)。或者如 Numpy\numba\NUFFT 之類專門優化過的計算庫。
點選下圖即可閱讀全文
我們為什麼要選擇小眾語言 Rust 來實現 TiKV?
Rust 是由 Mozilla 研究室主導開發的一門現代系統程式語言,自 2015 年 5 月釋出 1.0 之後,一直以每 6 週一個小版本的開發進度穩定向前推進。語言設計上跟 C++ 一樣強調零開銷抽象和 RAII。擁有極小的執行時和高效的 C 繫結,使其執行效率與 C/C++ 一個級別,非常適合對效能要求較高的系統程式設計領域。
Rust 作為一種新銳的語言,具備其獨有的優越性,雖然對於國內大多數開發者來說會顯得比較陌生,但是並不妨礙 Rust 已經在世界範圍內作為公認的 C/C++ 的有希望的挑戰者。目前在全球落地的專案中比較知名的比如,Dropbox 的後端分散式儲存系統(閉源),Firefox 的新的核心 Servo,作業系統 Redox,還包括 PingCAP 的分散式資料庫 TiDB 的儲存層 TiKV。TiKV 作為其中的一員,自上線以來非常引人注目,在 GitHub Rust 語言的全球排名專案中,基本上一直徘徊在前幾名的狀態。
點選下圖即可閱讀全文
最終,JavaScript 成為了一流語言
JavaScript 因為網際網路而生,緊隨著瀏覽器的出現而問世。它被世界上的絕大多數網站所使用,也被世界主流瀏覽器(Chrome、IE、FireFox、Safari、Opera)支援。
除了樣式效果外,JavaScript 也被越來越多地應用於軟體開發,例如後端任務、Web 伺服器以及資料處理。JavaScript 成型很快,起初只關注一個很小的目標,後來市場的力量改造了這門語言。
對 JavaScript 有正面影響的統計資料:
在 Github 上 JavaScript 開源專案的數量最多(比 Java 多出 50%)。
NodeJS 被評為 StackOverflow 2017 年開發者調查中最受歡迎的框架。
JavaScript 是 Stack Overflow 中最流行的程式語言。
JavaScript 已經達到以下這些成為一流程式語言的標準:
被創業公司和大型私營公司用作後端服務框架(NodeJS)。
有一個蓬勃發展的開源社群(在 Github 上最活躍)。
作為一門專業技能,有大量的招聘需求要求掌握 JavaScript 知識(Indee.com)。
點選下圖即可閱讀全文
Clojure 太靈活,我們能如何駕馭它?
Clojure 是一套現代的 Lisp 語言的動態語言版,函式式多用途的語言。目前其開發程式是社群主導的,在作者 Rich Hickey 以一個“終身的仁慈獨裁者”的身份監督下進行。Clojure 是 JVM 之上的語言,繼承了 lisp 的優美,也保留了 Java 的實效。本文整理自 QCon 演講,講師是 Morgan Stanley VP 何婧譽 (Loretta),專業使用 Clojure 5 年多,主要用 Clojure 做資料流處理。
戳 閱讀原文,免費下載程式語言專題迷你書!
今日薦文
點選下方圖片即可閱讀
要怎樣努力,才能修煉成一個架構師?
相關文章
- 巨頭們的程式語言之爭:我的語言就是比你好
- 程式語言特色:有始有終
- 我為什麼反對語言之爭?我的語言歷險
- 是否需要漢語程式語言
- 有一種介面,叫語言
- C語言:一種高效、易學的程式語言C語言
- 接下來該學哪種程式語言
- 假如女人是一種程式語言
- 有哪一種程式語言比其他的更安全嗎?
- 13 種程式語言名稱的來歷
- 程式語言有哪些
- C語言之結構體C語言結構體
- [譯]Python作為一種程式語言有多強大?Python
- 編譯語言、解釋語言與指令碼語言之間的區別編譯指令碼
- 有史以來最出彩的程式語言名字
- 不要和一種程式語言廝守終生:為工作正確選擇
- C語言完美體系C語言
- 學了十幾種程式語言後,我終於悟了!
- Java之父評價C語言之父:C語言撐起了一切JavaC語言
- 假如特沒普是一種程式語言
- 哪種程式語言最流行?
- 如果程式語言是種武器
- “D語言之父”Walter Bright為《D程式設計語言》寫的序程式設計
- 選擇一門程式語言,任何一門語言
- Solaris中文語言包問題終結(轉)
- java語言屬於哪種語言Java
- Java是一種廣泛使用的程式語言Java
- Hack:用於HHVM的一種新程式語言
- JavaScript演化成為一種重要程式語言JavaScript
- Dice :這 5 種程式語言未來可能各自成王
- 各種程式語言的適用場合-來自知乎
- 將會改變未來IT世界的十種程式語言
- 中文程式語言——易語言,到底是用來幹什麼的?易語言值得學習嗎?易語言的優勢有什麼?
- go語言之結構體和方法Go結構體
- C語言之雙向連結串列C語言
- C語言之單向連結串列C語言
- PHP語言終於有了正式的規範PHP
- 一種新的面嚮物件語言――Other語言(暫定名)物件R語言