選擇正確的開源編程語言

Luckrockwm 8年前發布 | 11K 次閱讀 函數式編程 開源

選擇編程語言通常是一項艱巨的任務,因為有大量的選擇。 在這篇文章中,給試圖學習編碼的新手可以鳥瞰頂尖的編程語言,允許他們檢查編碼的簡潔性或復雜性,然后權衡每種語言的利弊。

精通各種編程語言的

程序員、Web開發人員和應用程序開發人員。多種開源和商業編程語言今天都是可用的,每種都有不同的特征和功能。

軟件開發的支柱是源代碼,它是由成千上萬的程序員編寫由計算機解釋的指令集。源代碼指示應用程序做什么以及如何做。源代碼是程序的藍圖。

為了編碼,程序員決定采用哪種編程語言是非常重要的,因為有很多可用的。一些編程語言是開源的,一些是商業的。現在的趨勢是每個IT企業都在轉向開源。根據最新的調查,超過80%的企業使用開源技術構建各種應用程序。

下面給出了一些頂級的開源編程語言,以及一個簡短的描述,讓讀者熟悉它們。

1. Google 的 Go

Google 的編程語言 Go,也就是常說的 golang,由 Robert Griesemer、Rob Pike 和 Ken Thompson 創造。Go 及基配套工具的主要目的是高效而富有表現的編譯和執行,以及高效的編寫健壯可靠的程序。Go 是一種靜態類型語言,語法和 C 相似。它提供了垃圾收集,類型安全,具有動態類型能力以及許多高級的內建類型,比如可變長度的數組、鍵值映射表等。

Go 是一種易于表達、簡潔、干凈和高效的語言。利用它的并發機制可以很容易的編寫程序來利用多核和網絡中的設備,而其獨特的類型系統可以構造靈活和模塊化的程序。Go 可以很快的編譯出機器代碼,擁有垃圾回收的能力的在運行時強大的反射處理能力。它是快速的,靜態類型的,編譯型的語言,然后使用起來卻有動態類型、解釋型的語言的感覺。

Go 最新的版本是 1.6.3。

用 Go 編寫的 ‘Hello World’ 在這里:

package main
import "fmt"
func main() {
          fmt.Println("Hello World”)
}

Go 的優點

  • 與其它語言相比,Go 語言編譯和執行都很快。即使與那些編譯速度很快的語言相比也是如此。它是非常時尚的高性能語言。

  • Go 被認為是一種非常強大的語言,本身就具有并發性和高度抽象的特點。它具備一系列程序來啟動并發工作,并使用通道的概念來處理通信和同步。

  • Go 是一種高級語言,具有標準文檔特性和一個強大而豐富的標準庫,包含了完全成功可用的 Web 服務。

  • Go 有一個活躍和社區,可以為各處問題提供支持。

Go 的缺點

  • Go 是一種較新主,還未擁有足夠的庫,所以需要辛苦開發者開發自己的庫。

  • Go 缺乏書箱資源、研究類文章和其它在線資源,難以提供給用戶系統學習的環境。

  • Go 學習難度大,其錯誤處理也讓人郁悶。

2. Swift

Swift是一種新通用,多范式,編譯型的編程語言,適用于iOS和OS X,watchOS,tvOS和Linux等系統。 它是由蘋果公司建立的,基于最好的C語言和Objective-C,對C語言的兼容性沒有任何約束。 Swift的開發由Chris Lattner與Apple的其他程序員開始進行的,通盤考慮了來自許多編程語言如Objective-C,Rust,Haskell,Ruby,Python,C#和CLU的想法。 Swift基本上用來開發與蘋果的Cocoa和Cocoa Touch框架相關的工作,并且Xcode 6中有一個內置的LLVM編譯器框架,使用的是Objective-C運行庫。

最新版本的Swift是3.0 Preview 2。

Swift中運行“Hello World”程序的語法是:

import Cocoa
/* My first program in Swift */
var myString = "Hello, World!"
println(myString)

Swift 的優點

  • Swift 因為減少了開銷和語法要求,相對容易閱讀和編寫,對于新手來說它非常友好。

  • Swift 有著將函數作為變量傳遞的獨特優勢,可以讓總體代碼較短。Swift 讓開發者能寫高度通用的代碼,執行不同的東西,減少重復。

  • Swift 能直接編譯成符合 Objective 2.0 和蘋果 ARC 內存管理技術的本地代碼和工具。

  • Swift 的語法和語言結構使其不容易出錯,只會出現幾種類型的錯誤,從而使其從崩潰和一些意想不到的行為中解脫出來。

Swift 的缺點

  • 多數內部的示例都使用  Objectvie C 編寫,所以為了使用  Swift 編程,還得學 Objective C。

  • Swift 還在經歷著重大的變化,新版本會帶來大量的變化,對于其中一些變化,不論專家還是新手都可能難以理解。

  • Swift 只能用于開發 iOS 和 OS X 應用,它受限于開發平臺。

  • Swift 比 Objective-C 更慢,也就是說這些現代的語法、簡潔的代碼結構以及在運行仿真和測試時,Swift 程序都需要花更多時間。

3. Hack

Hack 是開源的通用性編程語言,是一種腳本語言,用于 HipHop 虛擬機 (HHVM)。它是一個由 非死book 開發的 PHP方言。Hack 專門為開發 Web 而設計,非常容易與 HTML 集成。Hack 允許程序員使用靜態類型和動態類型,也稱為漸進類型,因此它支持對 PHP 進行快速的開發。

Hack 提供了各種重要的特性,下面列舉了其中一些。

類型注解:

此特性允許在代碼中顯式申明參數、類成員和返回值和類型。

泛型:

這允許類和方法可以像 C# 或者 Java 一樣參數化。

要空類型:

這個特性讓 Hack 以一種安全的方式,利用 ‘?’ 運算符處理 null。

集合:

這個特性提供了一流的、內置的、參數化的類型,比如 Vector、Map、Set 和 Pair。

Lambdas:

允許定義一等類型的函數

這里是 Hack 的 ‘Hello World’。

在安裝 HHVM 之后,輸入下面的命令啟動:

Hhvm –m server –p 8080
<?hh
Echo “Hello World!”;

Hack的優勢

  • Hack 代碼混合了PHP代碼. 在PHP中使用的 <?php ,  在Hack中用 <?hh 代替,這使得在Hack和PHP之間可以順利交替。

  • Hack 使用HHVM運行,HHVM具有階段性的類型檢查用來驗證代碼的一致性。

  • Hack 用于通過確保正確的組織和無錯誤的代碼并以極快的速度構建復雜的網站,而且為程序員提供了一個獨特的安全優勢來編寫無bug的代碼。

Hack的缺陷

  • 它包含一些過時的功能,這些就是使PHP成為一種簡單的語言的原因。

  • HTML代碼不能直接嵌入到Hack代碼中,并且代碼不能寫在函數或類之外。

  • 作為一種新語言,Hack有很多bug和錯誤,就目前來說,這些問題導致它成為一種不穩定的語言。

4. Rust

Rust被當做一門通用的,多種形態的系統編程語言。它被設計出來用于滿足三個主要目標:安全,速度快,支持并發性。來自Mozilla Research的 Graydon Hoare設計了 Rust, 他使用了LLVM作為Rust的后臺。歸功于開發小組編寫過叫 Servo的web瀏覽器布局引擎和Rust編譯器的經驗,Rust的設計得到了完善。 Rust是一門智能化的開源語言。相比其他編程語言,它有許多編譯期安全驗證,這樣就可以不用生成運行期支出以及清除掉所有數據痕跡,這是Rust的一個優點。對于多核系統的并發執行,Rust的內置功能最有用,它可以使在不使用垃圾收集的同時保證并發編程內存安全。值得一提的是,Rust是唯一支持這一功能的語言。

Rust最新穩定版是1.10。

‘Hello World’

編碼如下:

fn main() {
    println!("Hello, world!");
}

Rust的優勢

  • 除了低級別的優化和性能外,安全和穩定的運行使得Rust適用于開發人員和項目實踐。 Rust增加了許多高級的函數式編程技術,使它看上去即像低級語言又像高級語言。

  • Rust具有一個擴大的標準庫,且正在不停地擴展。這個標準庫聚焦于文件系統的訪問,計算機網絡設計、時間和集合 API。

  • Rust支持多平臺開發,從Windows,Android 到甚至ARM設備,還包括其他的平臺。

Rust的缺點

  • Rust學習難度大,編碼更加復雜。異常處理非常難,尤其對于新手來說。

  • Rust由于缺乏有用的文檔,是相當不成熟的語言。

  • 在整個行業里, Rust到目前為止還沒有得到太多使用。

5. Scala

Scala (意思是可伸縮的語言)是一種通用的語言,被設計來以簡潔、優雅和類型安裝的方式編寫程序。Scala 在2001 年,由 Martin Odersky 基于 Funnel 編程語言開發。Scala 基本上集成了面向對象語言和函數式編程語言的特性,編寫代碼的時候更為高效。Scala 擁有許多函數式編程語言的特性,就像 Scheme、Standard ML和 Haskell,擁有 柯里化、推斷類型、 不變性、延遲計算和模式匹配等特性 。與 Java 相比,Scala 更為高級,因為他集成了其它功能,如操作符重載、可選參數、命名參數、原始字符串和避免檢查異常。Scala 和 Java 相互它們過生日 編譯為字節碼并使用 JVM。Scala 完善兼容 Java。

Scala 的最新穩定版為 2.11.8。

Scala 的 ‘Hello World’ 程序:

object HelloWorld extends App {
   println("Hello, World!")
 }

Scala 的優點

  • Scala 允許開發者編寫簡單明了的文本,與 Java 相比,它要少寫三分之二的代碼,而且這些代碼更易讀和更易于理解。

  • Scala 有著快速實現和高性能,因為它把減少各種線程安全問題和處理函數作為首要任務。

  • Scala 預裝的 Actor 庫解決了各種各樣的并發問題。

  • 與其它語言相比,Scala 有著快速成長的生態系統。這體現在 IDE 工具、測試工作、文檔,以及庫和改進工作。這些都使得 Scala 的功能得到增強。

Scala 的缺點

  • Scala 與純粹的 Java 相比,學習起來非常難,而且開發環境也并不相同,它需要更加專業的開發者來理解、整理邏輯以開發沒有 BUG 的代碼。

  • 直到現在,完全使用 Scala 開發的項目仍然很少。簡而言之, 我們多數使用 Java 和 Scala 混合開發項目,然而混合開發會更耗時,更緩存,測試起來也很痛苦。

  • 由于 Scala 向后兼容性有限,不能兼容以前的版本,這在開發時間催促的情況下會造成問題。因此在時間的項目不并不推薦使用 Scala。

6. Dart

Dart 是一種基于類,單繼承的面向對象的和通用的編程語言,最初由 Google 開發,之后得到了 ECMA 的認可成為標準(ECMA-408)。在 Dart 成為一個開源的編程語言后,它可以創建更復雜、更高性能和高伸縮性的 Web 應用。Dart 捆綁在 Web Component Library 中發布,這個庫包含了由 HTML 和 JavaScript組件的 Web 代碼,可用于各種不同的頁面或項目。

Dart 擁有如下一些工具:

  • Dartboard: 讓開發者可以在 Web 瀏覽中編寫和運行 Dart 代碼。

  • Dart Editor: 提供給開發者創建、修改和運行 Dart 應用。

  • SDK: 包含命令行工具,如將 Dart 編譯成 JavaScript 的編譯器,Dart 虛擬機等。

  • Dartium: 包含一個內建的 Dart VM(虛擬機)。

Dart 的最新穩定版是 1.18.

用 Dart 寫的 ‘Hello World’ 程序:

void main() {
  print('Hello, World!');
}

Dart 的優點

  • Dart 常被認為不僅是一種編程語言,它還向 Web 開發者提供了優秀的開發平臺,以及一些新的特性,包括可選類型和類型識別。

  • Dart 核心庫提供的功能包括集合、日期、數學、HTML 綁定、服務端 I/O,比如套接字和 JSON。

  • Dart 的 VM 是從零開始創建的,它可以以命令行的方式作為服務器運行,也可以嵌入到 Web 瀏覽器中以客戶端應用的方式運行。

  • Dart 還有其它一些有用的特性,比如 mixins(混入)、隱式接口、語法上的閉包和 this、命名構造函數、字符串處理、在線函數以及 noSuchMethod。

Dart 的缺點

  • Dart 的 SDK 沒有訪問基于 SQL 的數據庫服務的能力,不過可以用第三方庫彌補。

  • Dart 在生成 JavaScript 這一點上還不完善。現在要想應用完整,用 Dart 創建的應用還得用 JavaScript 創建一次。

  • Dart 目前還不能完全與 JavaScript 協作,因為 Dart JavaScript 庫尚不穩定,它目前仍在開發階段。

7. Clojure

Clojure是一個動態通用編程語言。它結合了易接近,交互式腳本編程語言的優點,并提供了高效健壯的構件來滿足多線程編程。Clojure是一個與Rich Hickey創造的Lisp語言緊密相關的語言。它運行在Java虛擬機上并且與Java相結合。Clojure完全支持調用Java代碼,反之亦然。Clojure 提供函數作為第一類對象,一個交互式解釋器(REPL)和一個宏系統。它鼓勵使用第一類、高層次的、有價值的函數,并且結合它提供的一套高效不可變的數據結構。Clojure(核心數據結構是不可變的)提供了革新方式的解決方式,來應對并發和并行計算帶來的調整。

目前最終穩定版本為1.8.

下面是以Clojure語言實現的'Hello World':

On repl
Start repl. When you use Leiningen, type lein repl on Terminal (Command Prompt):

bash-3.2$ lein repl
nREPL server started on port 59553 on host 127.0.0.1
REPL-y 0.2.1
Clojure 1.5.1
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e
user=>
Type below on repl:
user=> (prn "Hello World")
"Hello World"
nil
user=> (println "Hello World")Hello World
nil
user=> (pr-str "Hello World")
"\"Hello World\""

Clojure 的優點

  • Clojure 代碼可用于生成 Java 庫。相應的,Clojure 庫也可以用于 Java 和 Clojure 應用。它可以像 Java 應用程序一樣打包并發布到任何地方。

  • Clojure 是 Lisp 環境的一部分,它保留了 Lisp 的最佳特性。Clojure 包含宏,這是在元編程和語法擴展中一個非常重要的方法。

  • Clojure 作為函數式編程語言,使開發者能夠使用一流的高階函數值。同時,它還擁有一套不可變數據的結構。

  • 作為一個動態編程語言,它支持在運行時動態更新和加載代碼,本地或遠程都是如此。

Clojure 的缺點

  • 在 Clojure 中調試處理和去除錯誤讓人覺得枯燥無味。

  • Clojure 只能在 Java 虛擬機中運行。

  • 新手很難掌握 Clojure,開發者在用它開發核心和專業程序時有時甚至會花大量的時間。

8. Haskell

Haskell 是一種現代的、標準的、非嚴格的純函數式編程語言。它同時擁有多態類型、延遲計算和高階函數等特性。Haskell 的類型系統包括類型推斷、延遲計算和類型類。它是純粹基于語義而非語法的 Miranda 語言,這是最初 Haskell 工作組專注的努力方向。

Haskell 擁有基于 Hindley-Milner 類型接口的強大的靜態類型系統。Haskell 的主要創新點包括加入了類型類。最初只是想通過一個特有的方法為語言添加重載能力,但后來發現這個功能更多用途。

Haskell 是種開放的語言,規范公開并存在很多實現。它最主要的實現是 Glasgow Haskell Compiler (GHC),它既是一個解釋器也是一個編譯器,可以運行在大多數平臺上。GHC 是并發和并行的高性能實現,有著結合了最新概念的豐富的類型系統,這些新概念包括廣義的代數數據類型和類型分類。Haskell 還有一個有趣的特性是函數可以被當作值來使用,就像整數和字符串那樣。

Haskell 的最新版本是 2014。

‘Hello World’ 程序:

module Main where
main :: IO ()
main = putStrLn "Hello, World!"

Haskell 的優點

  • 作為一個純粹的函數式編程語言,Haskell 可以給計算機一系列的任務,讓計算機去執行并完成這些任務。在執行的時候,任務會改變狀態。

  • Haskell 是一種具有延遲性的編程語言,它會在最終需要結果的時候才去執行函數和進行計算。它有較好的透明度,讓開發者專注于需要對數據進行一些什么樣的轉換。

  • Haskell 優雅簡潔。與其它編程語言相比,它的程序更短也更易于調試。

Haskell 的缺點

  • Haskell 并不適用于對時序要求嚴格的應用。

  • 作為一種新的編程語言,它比其它一些語言,比如 C 或者  C++ 更難以理解。它的社區支持和文檔也十分有限。

  • Haskell 代碼只能運行在極少數平臺上。

9. Apache Groovy

Grovvy 官網申稱 “Apache Groovy 是一個針對 Java 平臺,強大的、可選類型的動態語言,同時擁有靜態類型和靜態編譯能力,致力于提高開發效率和簡潔、熟悉和易于掌握的語法。它能與任何 Java 程序順利集成,并迅速交付應用程序的強大能力,包括腳本能力、特定域的語言編寫、運行時和編譯期的元編程和函數式編程。”

Apache Groovy 是一門動態語言,它的功能和 Python、Ruby、Perl 和 Smalltalk 相似。Grovvy 還支持模塊化、類型檢查、靜態編譯、Project Coin 語法增強、多 Catch 塊等,并使用 JDK7 的動態調用指令特性持續改進性能。Grovvy 通過內聯 DOM 語法提供了對各種標記語言的原生支持,比如 XML 和 HTML。這個特性允許 Groovy 使用統一而簡潔的語法和編程方法來定義和操作許多類型的各種數據。

Apache Groovy 最新發行版是 2.4.7。

下面是 ‘Hello World’ 的語法:

class Hello {
    String name;
        void say Hello() {
        Systematisation("Hello "+get Name()+"!");
    }
        void set Name(String name) {
        pathnames = name;
    }
        String get Name() {
        return name;
    }
        static void main(String[] rags) {
        Hello hello = new Hello(); Hellenisation("world");
        Hellenisations();
    }
}

Apache Groovy 的優點

  • Apache Groovy 易于學習和編寫代碼,這對 Java 程開發者來說尤為明顯。它包含閉包、創建者(模式)、運行時和編譯期的元程序、函數式編程、類型推斷和靜態編譯等功能。

  • Groovy 在 Web 開發、靈活性、并發性、并行庫、測試框架、構建工具、代碼分析和 GUI構建等方面擁有豐富而充滿活力的生態系統。

  • Groovy 能與 Java 平滑集成,并能與 Java 和其它第三方庫交互。

Apache Groovy 的缺點

  • Grovvy 具有 Duck-Typing、動態代碼、元編程等大量動態特性,所以在運行時需要進行更多處理,最終造成性能不佳的現象。

  • Groovy 缺少文檔和在線資源,難以幫助新手了解它。此外,它并未用于高端應用和關鍵應用。

 

來自:https://www.oschina.net/translate/open-source-programming-language

 

 本文由用戶 Luckrockwm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!