有時候大量的爛大街的主流開發語言也沒辦法滿足你對特定問題的開發需求。有時候你不得不展望未來以期待能出現一門語言:有著良好的語言結構,能提供額外的功能,無需不斷調整優化就能使你的程式碼提高執行速度。這門語言有著更好的穩定性以及良好的的程式碼結構,能幫你避免寫出雜亂的或者錯誤的程式碼。
這個世界有太多靈巧的語言,例如 C#,Java,Javascript。有些語言可能只有少數擁護者,但是大多數語言,擁有龐大的社群擁護者,這些擁護者有著對這門語言能解決特定領域問題能力的相同的喜愛。可能知道這門語言語法的程式設計師沒有過億,但是有時候稍稍的變動或許是有價值的,當你學習了一門新的語言,說不定下個專案就能發揮用處。
以下的九門語言應該列在每一位程式眼的讀書列表中。它們可能並不適合每個工程,因為大多數語言都是針對特定領域的。它們都值得研究和投入精力去學習,說不定哪一天就能派上用場。
Erlang:面向實時系統的函式式語言
Erlang 最初是由瑞典電信裝置製造商愛立信為通訊應用(電話交換機)設計的。愛立信的開發者鼓吹 Erlang 的9個9指標的效能,聲稱 Erlang 能夠傳輸99.9999999%的資料。這時 Erlang 才開始引起人們的關注。
Erlang 的祕密是它的函式式設計範例。大部分程式碼都被強制執行於它的虛擬機器中,這很好的避免了其他系統的干擾。函式都在虛擬機器內部執行,執行在小的“類似沙箱模式的輕量級程式中”,並且只能通過訊息傳遞相互通訊。你不可能僅僅抓取一個指標就夠快速該變指標在棧中的狀態。你必須保持在呼叫層次內部來保證函式狀態的一致性。設計上或許有些不妥,但是這樣很好的保證了錯誤向外擴散。
這種模式簡化了執行邏輯,讓執行時程式碼決定同時能夠執行什麼任務。併發處理也很容易管理,執行排程程式能夠減少上下文切換。Erlang 迷們喜歡吹噓“在Web伺服器上同時執行2000萬”處理器“(輕量級程式)。假如你正在構架一個類似行動電話交換機的實時收費系統,但是並沒有足夠的空間儲存資料,那麼 Erlang 正好符合你的需求。
Go:簡單、動態
谷歌不是第一家調查集合語言的組織,最終發現語言雜亂,複雜並且效率不高。2009年,谷歌釋出了它自己的解決方案:一門靜態型別的語言,類似於 C 語言但是包含了其所不具備的特徵,它讓程式設計師避免了型別宣告和被 malloc 呼叫鎖迷惑。通過 Go 語言,程式設計師能夠受益於塔的簡潔、已編譯的c語言的結構以及動態指令碼語言的的易用性。
同時,Sun 和 Apple 也以相同的方式建立了 Java 和 Swift 語言,相應的,Google 做出了一個重要的不同的決定:Go 語言的發明者希望它能足夠簡單以至於每個程式設計師都能輕鬆的掌握。
Rob Pike,發明者之一,向 Ars Technica 豪言道:長遠來說,通過將事件分開處理,你能夠獲得更多。因此,Go語言還有一些靈活的特性,泛型,型別繼承,斷言,只通過乾淨的簡單程式碼塊操作字串、數字以及雜湊表。
據報導這門這門語言在巨大谷歌帝國內部被很好的接受,在其它方面也獲得了認可,動態語言 Python 和 Ruby 的愛好者接受了編譯已編譯語言的嚴密性。假如你想要獲得 Google 的青睞,並且需要建立伺服器端的業務邏輯,那麼 Go 會是一個好的選擇。
Groovy:提供 Java 的指令碼支援
Java 世界是異常的靈活。但是你需要仍忍受它”穿個揹帶褲又要系皮帶”的方式,例如,宣告,每個變數的型別,分行代表每行結束,類的訪問只是返回一個值。但是 Go 語言瞄準了動態語言的吸引人之處並且將它自身緊緊的與 Java 相整合。
Groovy 棄置了 Java 乏味的引號和分號方式,提供一種簡單的程式設計習慣,也能用於擴充套件現有的 Java程式碼。執行在 jvm 上。不僅僅如此,Groovy 緊緊的月 JavaJAR 相結合,所以你能和好的利用一有的Java 程式碼。Groovy 執行起來像一門動態型別語言,並且能夠訪問靜態型別 Java 物件的資料。
Groovy 程式眼認為他們技術與 Java 程式設計師,同事也是 Groovy 程式設計師。基於 Java 程式碼,能夠提供非常多的功能。充分使用 Java 擁有的閉包,操作符過載,多型性。不要忘了使用問號來做空指標的判斷的簡易性,這比使用 if-then 語句來判斷要簡單得多。因此,簡潔的語法,使程式設計師敲擊鍵盤次數減少了。誰會不喜歡呢?
最後,令所有 Java 程式設計師羨慕的動態語言的簡單特點讓他們能夠減少工作量,有更多的娛樂時間,但是又不跳出 Java 圈。
OCaml:複雜資料層次把戲
一些程式設計師不喜歡宣告變數,於是他們建立了動態語言。其他人喜歡宣告一個變數的特定型別,integer,string 或者是 object。對於他們來說,大多胡編譯型語言都對型別宣告提供了支援。
這是一些喜歡詳細宣告變數層次型別的,甚至談到要建立“algebras”(代數)型別。他們想象列表和多種型別的表能用來表示複雜、多層次的資料。他們提到了多型,模式匹配原型以及資料封裝。這隻會他們期望的複雜的,高結構化型別、原型以及原原型世界的基礎。
對於他們,OCaml,一門有多個程式設計社群為了讓前述想法被廣泛接受而共同努力的語言。OCaml 提供類物件的支援,自動記憶體管理以及跨平臺。甚至蘋果App商店也提供了 OCaml 的 App 支援。OCaml 的理想的工程可能是建立一個符號數學網站來教授代數。
CoffeeScript:使 JavaScript 更簡潔
技術角度來說,CoffeeScript 並不是一門語言。這是一個將你寫的程式碼轉換 Javascript 的前處理器。但是它看起來有所與眾不同,因為它缺少大量的標點符號。你可以人為他是 Ruby 或者 Python,儘管內部表現像 Javascript。
當封號厭惡者被強制用瀏覽器支援的 Javascript 程式設計的時候,Coffeescript 開始流行了。改變瀏覽器工作的指令碼語言是不切實際的,於是他們寫了他們自己的預處理。結果是程式設計師們能夠寫乾淨的嗲嗎並且讓 CoffeeScript 將那些程式碼轉譯成各種符號的 Javascript 語言指令來操控瀏覽器。
少了分號緊緊支援開始。通過 CoffeeScript,你甚至不需要通過var來宣告變數。宣告函式也不需要function 關鍵字或者大括號。事實上,大括號在 CoffeeScript 中也不太被使用。程式碼是如此的簡潔,以至於相比於哥特式教堂,它看起來像現代主義建築物。這就是為什麼很多新的 Javascript 框架通常是用 CoffeeScript 寫的然後編譯成 Javascript。
Scala:JVM上的函數語言程式設計
假如你想要讓你的程式碼有物件導向的清晰層次結構又喜歡函式型程式設計模式,那你有很多選擇。假如你熟悉 Java,Scala 會是你的一個選擇。
Scala 執行在 JVM 上,並將所有的清晰的函數語言程式設計的約束轉變成 Java 支援的語法以及聯接到具體的 JAR 檔案。假如那些額外的 JAR 中有副作用和其他不可避免的令人討厭的頭痛程式碼,那麼使用Scala 剛剛適合業務場景,你的程式碼會變得很清晰。
Scala 是靜態型別的。編譯器負責在編譯時推斷出具體型別,物件型別和原始型別沒有區別,因為Scala 想讓每一個物件都繼承自 Any。Scala 的語法比 Java 更加簡潔。Scala 程式設計師稱之為“低禮節”。你可以把駝峰式命名方式遺留在 Java 世界了。
Scala 提供了很多函式型語言的特徵,例如懶初始化,尾遞迴,常量。但是為了能在 JVM 中執行,做了適當的修改。基本的原型別或者列表變數(像lists和雜湊表),可以是可變或者不可變的。尾遞迴通過簡單的例子執行,而不是必須通過詳細宣告的可變遞迴。以上是 Scala 的全部實現思想,但是因為需要執行在 JVM 上,具體實現會有所限制。Scala 能夠所有 Java 平臺上執行,能很好的與已存在的開源 Java 程式碼混用。這對於許多實踐性問題是一種權衡。
假如你需要將資料放在一千個處理器的叢集中處理,並且有一堆遺留的 Java 程式碼,那麼 Scala 是一個很好的解決方案。
Dart:不像 JavaScript 的 JavaScript
流行並不是被吹捧出來的。可能有越來越多領域使用到了 JavaScript,“事君數,斯辱矣;朋友數,斯疏矣”,有時候太過於親近反而會導致疏遠,疏遠瞭然後就開始尋找替代。Dart 是 Google 出品的一門適用於 Web 瀏覽器端的新語言。
Dart 並沒有從 JavaScript 基本概念中脫離出來。它工作在瀏覽器中,操作所有的 DIV 和我們所見的Web 物件。Dart 的作者僅僅只是為了清除 JavaScript 中所有惱人的部分,使之變得更簡潔。底層結構並沒有太大的變化。因為他們希望將 Dart 程式碼轉成 Javascript 來提高執行速度。
高亮可能在許多 JavaScript 類庫中提供的額外功能。你不需要通過 jQuery 或者其他通用類庫來修改部分 HTML 頁面。Dart 提供了預設的支援。也許一些熟悉的資料型別以及語法的速記技巧能夠少敲幾次鍵盤。Google 通過提供開源的支援大多數主流平臺的開源工具來答題推廣 Dart。
假如你正在建立一個動態的 Web 應用。並且已經對於 JavaScript 厭煩了,Dart 提供了清晰的語法結構來建立有多種 Web 資源資料的 Div 塊。
Haskell:通用純函數語言程式設計語言
經過超過20年的時間,一直研究函式型程式設計的學術研究者開發了 Haskell 語言,一門用來表達他們對於副作用的壞處的想法的語言。這是一門更加存粹的表示式函式型語言,通過精細的機制來處理 I/O Channels 和其他不可避免的副作用。其餘的程式碼應該是相當有用的。
Haskell 社群相當活躍,那裡有很多 Haskell 的變體等著你去探究。有些是單機版的,其他的是通過與像 Java(Jaskell,Frege)或者 Python 那樣的主流語言整合的。大多數的名字顯示他們來自蘇格蘭,那裡是 Haskell 研究,或者是哲學家/邏輯學家(他們是許多 Haskell 思想的啟蒙者)的溫床。假如你認為你的資料結構和型別太複雜了,你可以考慮用 Haskell。
Julia:給Python界帶來了新的訊息
科學計算領域有一群 Python 的愛好者,享受 Python 帶來的簡單語法以及能夠避免陷入亂用指標和位元組的細節中的自由自在。除了所有的優點,Python 通常在科學計算中處理大資料所表現的令人發狂的執行速度一值是一個詬病。為了提高執行速度,很多科學家轉而使用c語言來編寫核心的執行程式碼。但是這帶來了新的問題,用兩種語言寫的程式很難修改或者擴充套件。
Julia 是這種複雜問題的一種解決方案。它的作者帶來了零 Python 程式設計師欣賞的乾淨語法並且做了稍稍修改使之能夠在後臺編譯程式碼。通過這種方式,你能夠像 Python 那樣開啟個記事本或者命令列來編碼,但是你寫的任何程式碼都會被即時編譯。
Julia 真是非常了不起的語言。它提供了非常強大的型別分析引擎能夠幫助優化程式碼。假如你喜歡超程式設計,這門語言提供了足夠的擴充套件介面。它最大的附加價值是通過叢集釋出並行演算法的簡單機制。其內建了大量的數學演算法庫用來做資料分析。
最好的訊息應該是它的執行速度。它的許多基本標準的執行速度是 Python 的30倍,甚至比 C 語言還快一點,假如你需要處理大量資料並且喜歡 Python 的語法,那麼你最好快去學學 Julia 吧。
(原文:Infoworld,譯者:m1361459098)
來自:CSDN
相關閱讀
評論(1)