Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?

看板C_and_CPP (C/C++)作者 (ggg)時間16年前 (2009/03/08 11:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串25/37 (看更多)
※ 引述《guest0079 (火辣辣的大姊姊)》之銘言: : 標題: Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢? : : 在我所發的文中,強調的是語言本身的特性,而不是編譯器的好壞。效能、易讀性、物件 : 導向、複雜度,四點內容所講的全是"語言本身"。問題出在於:"語言本身"所代表的效 : 能涵意是什麼?"程式碼的效能"事實上是與平台密切相關的,但是語言本身又與平台無 : 關。所以語言本身與實際測到的效能是完完全全的兩回事。 ============ 高階語言多數需要 compiler/interpreter 協助, 而 compiler 是由專業 的人寫出來的軟體. compiler 根據語言語法做出的轉譯模組就相當於是由 這些專業的人替使用者寫出那段組語程式(或者說是機碼 code). 談效率又分為兩部份, 一部份是 programmer 耗費的發展時間, 一部份是 執行碼執行的時間. 如果 programmer 堅持用組語自行將需要的功能用自 己的 code 實現, 這位 programmer 當然是相信自己產生的 code 比 編 譯器產生的好. 大家也都知道這位 programmer 在開發的時間上, 就一般 人言, 通常不會很小. 高階語言的作用之一就是協助 programmer 開發軟體時, 縮短開發時 程用的. 那麼, 如果不談轉譯出來的執行碼的執行效率, 而是問那種語言 的開發時間會比較短 ? 這種時候就會像是問 interpreter, compiler 那 種語言工具開發時程比較短. 這道題問的是 OS , 那還得問是那一種模式(model)的 OS , 是老式 的 kernel/monitor 模式 或是 u-kernel 式的 client/server model 還 是 fully distributed object model . 另外, 一個不能排除的因素是可以拿來參考的 OS open source 多數 是那種語言寫的, 有參考來源, 通常開發時程就會縮短. : 比較C與Java兩種語言,哪種寫 : 出來的程式效能會比較好?答案是:視執行平台而定。(說這句一定有人想轉joke了) : 在一般的處理器上(x86, 8051, ARM, xxx單晶片),絕對是用C寫的程式的效能較高 : 只要系統的RAM夠大,再把用C寫的JVM porting到某平台上,就能跑JAVA程式,但是效能 : 一定很差。但是,如果SUM出了一顆新CPU,是一顆JVM硬体處理器,也就把本來是軟体的 : JVM用硬体來實作,則Java程式在該顆CPU上會擁有絕佳的效能,同時,這時候想在上面 : 跑C也不是不可能,只要寫得出compiler就行了。此時,用C程式在這顆CPU上跑的程式八 : 成會遠較Java程式慢 (N年前就聽說SUM要出這種Java專用的CPU,不知出了沒有,我想這 : 有一定的難度) : 我舉這個例子,就是想說明如果要比較程式碼的效能,就一定要指定特定的編譯器與執 : 行平台才有意義 : ======== 如果只談傳統的 kernel/monitor model OS (如老式 unix), 有個語言特性 被提出來, 那就是語言指述能否處理 concurrency 的需求, 因為這是多工 作業系統必然要用到的. 不過, 多數僅止於 monitor 的敘述. 到了網路分 散式系統時代, O-O 被提出來還強調了 message-passing 這個要求. 假如要開發的 OS 是 kernel/object model (這是比較接近 java 的 o-o), 顯然用 O-O-PL 會比較容易敘述與維護. 這是假設這個高階的語言是針對 distributed object 而設計的, 就像 FORTRAN 對於科學計算, 做科學計算 的 programmer 多數使用 FORTRAN. 現在的爭議是 C 跟 C++ , 那就要看要實現的 OS 是使用那種 model, C++ 如同 C 不強調 concurrency 能力, 所以 Kernel 部份是同樣的無能. 如果 是 kernel/object model , 顯然 C++ 應該比較適合. 但在單機或者是share memory 的多機上, 狀況會如何 ? reference pointer 與 message passing 是考量先天的隔離問題. 在這一點上, C++ 是兩面策略, 但強調 o-o 的 message-passing 概念, 而且 inter-process communication 的 process 還是隔離的空間, 幾乎可用網路模式來套用. 開發出的 OS 有個要求就是要堅固可靠, 不能頻頻蕩機. 所以開發需求上是要 時程短又高度可靠堪用. 開發 OS 的喜歡號稱 OS 是被叫用的底層, 經常被用到, 所以要考慮效率. 專 業的開發師開發的應該很有效率, 但其實她的可靠性與易用性佔非常重要的因 素, 因此是小改而非大改. 除了實驗系統外, 一般是較保守的. ..... : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 220.136.212.64 : 推 abcdefghi:C的語法比C++單純很多,所有合法的C都很容易算出overhead 03/08 03:16 : → abcdefghi:,目前的OS kernel也沒複雜到用C會造成實作上的困難,尤其 03/08 03:18 : → abcdefghi:在user-kernel之間溝通時,也沒辦法直接用OO的界面,那到 03/08 03:19 : → abcdefghi:底為什麼要用C++來寫OS? 其實大家討論這麼多,為什麼不弄 03/08 03:20 : → abcdefghi:個小project,直接用C++寫個小kernel,用太多想像和理論來 03/08 03:22 : → abcdefghi:評斷一個軟體專案的實務問題,永遠會輕忽很多的小細節. 03/08 03:23 =============== 這段倒是很合理的要求, 也很配合實際. 不過, 要用 u-kernel/server model 來要求才會顯現語言的功能特性. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
文章代碼(AID): #19ipsgnG (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19ipsgnG (C_and_CPP)