永不磨滅的九大尖端編程語言

這些可作爲當前流行語言強力替代的語言正在蒸蒸日上,或許你的下個項目正好能用到它。

20150121093458948.jpg

有時候大量的爛大街的主流開發語言也沒辦法滿足你對特定問題的開發需求。有時候你不得不展望未來以期待能出現一門語言:有着良好的語言結構,能提 供額外的功能,無需不斷調整優化就能使你的代碼提高運行速度。這門語言有着更好的穩定性以及良好的的代碼結構,能幫你避免寫出雜亂的或者錯誤的代碼。

這個世界有太多靈巧的語言,例如 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 吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章