幾種計算機語言的評價(修訂版)

阮一峰發表於2010-03-20

程式設計新手都有一個同樣的問題:"我應該學習哪一種語言?"。

《Unix程式設計藝術》(Eric Raymond著)第十四章,對各種語言進行了評價,正好可以用來回答這個問題。下面是我的筆記,整理了六種主要計算機語言的優缺點。讀完就會知道,對於不同的任務,應該選擇哪一種語言了。

原文寫於2003年。網上曾經有一個不完整的中譯本,我也在這個網誌中轉貼過,所以今天貼的只能算修訂版了。

====================

幾種計算機語言的評價

作者:Eric Raymond

摘自《Unix程式設計藝術(第十四章)》

幾種計算機語言的評價(修訂版)

一、C

C語言的優點是,執行效率高和接近機器語言。它特別適用於以下幾種程式:

  1. 對執行速度要求很高的程式。

  2. 與作業系統核心關係密切的程式。

  3. 必須在多個作業系統上移植的程式。

除此之外,學習C語言有一個最大的理由,那就是它能幫助我們學會,在硬體層次上考慮問題。如果你想以程式設計作為自己的人生事業,C是一定要學習的。

C的最大缺點是,在程式設計過程中,你不得不花很多時間,考慮與你要解決的問題完全無關、且非常複雜的硬體資源管理問題。

二、C++

C++在80年代中期推出,支援OO(物件導向程式設計),原意是作為C語言的取代者。

但是它沒能做到做一點,原因有以下幾個:

  1. 它也沒有解決"記憶體管理"問題,雖然比C有所改善。

  2. 標準化不成功。各個編譯器都只支援自己選擇的一個子集,導致跨平臺性不如C。

  3. 過分的精細和複雜了。C++的複雜度,超過了C和OO的複雜度之和。

  4. OO並沒有帶來多少優勢,反而帶來了一些副作用,比如厚重的膠合層和龐大的程式碼體積。

總的來說,C++的優勢還是程式效率,以及物件導向程式設計能力,糟糕之處是它鼓勵複雜的設計。

三、Shell

Shell程式寫起來很容易,對於簡單的任務,開發速度很快。

當程式變大時,它就不太適合了,很難維護,而且將變得非常專用(只能在你自己的機器上使用),因為 Shell必須呼叫各種外部程式,無法保證每一臺機器都同樣安裝了這些程式。

最常見的Shell是bash,它的一些語法規則很混亂,會產生很難閱讀的程式碼。另外,shell只能在Unix上使用,無法跨平臺。

Shell的最佳用途如下:

  1. 執行簡單的系統管理任務。

  2. 編寫系統啟動時的初始化指令碼。

  3. 作為其他語言開發的程式的包裝器。

四、Perl

Perl釋出於1987年,基本上就是一個增強的Shell。

它的最大長處是強勁的文字處理能力,無以倫比的正規表示式支援,而且有全套Unix API的內部支援,顯著減少了對C的需求。

Perl的主要缺點是某些部分設計得非常醜陋,且無法補救,某些部分也過於複雜。當程式規模增大時,必須嚴格遵守約定,才能保證模組化和設計的可控性,難於維護。

五、Python

Python釋出於1991年,是一種與C語言緊密整合的指令碼語言。

Python的優點是非常乾淨優雅,鼓勵清晰易讀的程式碼,易學易用;提供了物件導向程式設計的可能,但並不把這個選擇強加於設計者;具有出色的模組化特性,同Java一樣,適合用來做需要協同開發的大型複雜專案。在很多方面,它都比Java簡單。此外,Python標準中包括了對許多網路協議的支援,因此也很適合網路管理任務。

Python的缺點主要是效率低下,速度緩慢。在執行速度上,它不僅無法與C/C++競爭,而且也不如其他主要的指令碼語言。但是,這其實並不是一個嚴重的問題,有時網路或磁碟的延遲,會完全抵消Python本身消耗的時間。而且因為Python特別容易和C結合起來,因此效能關鍵的 Python模組,可以很方便地轉化成C語言來提高速度。

總的來說,對於小型專案和大量依靠正規表示式的專案,Python不如Perl的表達能力強。至於更小的專案,Python則是大材小用,shell也許更適合。

六、Java

Java釋出於1995年,設計目標有兩個。

一個是"write once, run anywhere"(一次編寫,到處執行),即不依賴於特定的平臺;另一個是在網頁中嵌入互動程式(applet),可以在任何一個瀏覽器中執行。由於它的所有者Sun公司的一系列失誤,第一個目標並沒有完全實現,第二個目標則是徹底失敗。但是Java依然在系統程式設計和應用程式設計方面非常強大,足以挑戰C和 C++。

Java的優點是比C++小巧簡單,可以自動管理記憶體,支援類似C的語法和OO程式設計,與C程式的結合也很好。

Java的缺點是某些部分過於複雜,比如內部類和匿名類的運用會產生很混亂費解的程式碼;某些部分功能不完善,也無法利用作業系統提供的功能介面,比如在Java中讀取和處理文字檔案,並不像其他語言那樣容易。此外,Java配置環境和版本的混亂,也讓人很頭疼。

總的來說,除了系統程式設計和某些對執行速度要求很高的程式設計之外,Java都是比C++更好的選擇。如果和Python相比,Java可能在大型專案上有優勢,但是也不是絕對的。

(完)

相關文章