作者reader (讀者)
看板PLT
標題Re: 何謂「好的」程式語言
時間Fri Feb 23 17:23:53 2007
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: 這個問題其實困擾我很久...
: 反正這個版開了,就先站上來當標靶
: 各位請隨意砲轟... [茶]
那我就隨便說說,充當賀板。
其實一般的程式語言論戰,往往都是在說,某某狀況時 a 比 b 更好用,
另一方就反擊說這個狀況可以避免、不常見、不好學、不夠快、不自由、
不怎樣怎樣... 等等。
這種論戰所呈現的,並不是理論層次上的比較,而是偏向程式語言特性的
比較,是不同的程式語言陣營在相互叫陣。
就長期而言,愈複雜的程式語言,若沒有設計失當,最終會獲得勝利,而
較簡單的程式語言則會保有一定的最佳應用範圍,能存活但會逐漸失勢。
ASM vs. C, C vs. C++ 都是這個狀況。至於 C++ vs. Java 則是雙方都
還在增加複雜度,不過看來 Java 是加碼得比較快,頗有勝利機會。
但在這個演化過程中,若一個新程式語言突然過度加大複雜性,則可能會
出現一個中間性的語言,因為較容易學習的關係,而取代這個大家沒辦法
快速適應的語言,像是 Algol-68, PL/1, Ada 都是這樣失敗的。
原因很簡單,就是人們持續不斷但速度緩慢的學習的結果。
不過,拋開這種人類自身的學習因素,就理論而言,程式語言並不是這麼
比較的。
以理論來說,程式語言之間的比較,大概就是三樣:
1. 程式語言的資訊控制處理能力
通常非通用程式語言的資訊控制能力會弱於通用程式語言,而處理能力卻
不會高於通用程式語言輔以程式庫,這就是通用程式語言之所以是通用的
程式語言的原因。
這在處理多媒體檔案格式時會相當明顯,不能單靠內建語言機制和標準的
程式庫就能處理非內建支援的多媒體檔案的時候,大概就可以區別非通用
程式語言了。
2. 程式語言所提供的抽象化機制
抽象化是相當難說明的東西,用比較簡單的話來說,能夠不依靠記憶體的
資訊、不依靠特定識別字就能做出相應變化的程度,就是抽象化的程度。
型別處理是其中最主要的抽象化機制,因此有許多的程式語言理論,都在
討論型別的問題,像 C 有型別系統,卻沒有抽象型別,所以抽象化能力
就比不上 C++.
C++ 在這方面的優勢,可說是主流的通用程式語言中最為強大的,它可以
支援 template metaprogramming, generative programming 之類的高階
程式設計方法,至於 Java 在這方面就顯得蒼白無力。
3. 程式語言所特設的自動化機制
這是最容易被誤解的事情,例如 GC 是程式語言有沒有內建支援的問題,
不是程式語言的自動化機制差異,例如 C++ 如果需要 GC 的話,就可以
使用 libgc 程式庫,或是自行實作也不會很難。
像是例外處理 (exception handling), object destructor 才是這類的
自動化機制,若程式語言不提供的話,就很難自行實作。
這種程式語言的比較,是比較理論意義上的程式語言能力的比較。但未必
能力比較強的程式語言,就一定在使用上比較「好」,否則新的程式語言
免不了就會比較強,像是 Objective Caml, Scala 這類的新程式語言,
在程式語言能力上顯然比 C++, Java 來得強,若不考慮編譯程式問題,
甚至像 Python, Ruby 也比 C++ 強,但到目前為止,都未必足夠實用。
而若要論實用性,及考慮學習的因素,在程式語言的能力之外,最重要的
關鍵則可能是 C 語法相容性,無論過去或可預見的未來,不能與 C 語法
相容的程式語言,就沒有機會成為主流程式語言,或是被 C 語法的相似
程式語言取代。
: 先把「語言」的範圍排除像 HTML, XML 那種描述性語言
: 也跳過 SQL 這種... 我不知道怎麼歸類的語言
: 然後,為了簡單起見,也跳過 web 開發語言
: (像 JSP、PHP、JavaScript、ActionScript)
: 就只講最傳統定義的語言
應該講通用程式語言 (general purpose programming language), 專指可
廣泛應用於所有程式設計需求的程式語言。
我寫的很浮泛,但本來許多主流程式語言之間的差別就沒有那麼大,若是
硬要比較差不多的程式語言,例如 C++ 和 Java, 我想只是個人偏好問題
比較多,根本就吵不完。
效率爭論也是,那根本就是一翻兩瞪眼的明白事情,就老是有人會想要用
哪種程式語言比較容易寫得好,造成效率如何如何來爭論。簡直是把專業
軟體工程師當成菜鳥、小白來比較。
像 GC 重不重要,跟它是否變成程式語言內建的功能,相關性並不大,那
主要是程式語言的設計哲學和使用者偏好問題,搞得像是天大地大的問題
一樣,實在沒有意義。
至於 godfat 所提及的 D 語言問題,它先把規格好好穩定下來再說吧。
還有它的編譯程式一直不能支援 64-bit 系統,像我的主機是 AMD64 的
FreeBSD, 就沒辦法使用,這種狀況就不必談它是什麼樣的語言了。
--
※ 編輯: reader 來自: 61.222.173.26 (02/23 18:33)
1F:推 PsMonkey:好個賀版文... 推...(不過有些不太同意就是了 [逃]) 02/23 19:38
2F:推 godfat::D 02/23 20:43