Unix編程藝術的作者對幾種計算機語言的評價

編程新手都有一個同樣的問題:“我應該學習哪一種語言?”。

《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可能在大型項目上 有優勢,但是也不是絕對的。

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