看板 PLT 關於我們 聯絡資訊
※ 引述《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)
PsMonkey:好個賀版文... 推...(不過有些不太同意就是了 [逃]) 02/23 19:38
godfat::D 02/23 20:43