Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
※ 引述《x3795566 (冀憶)》之銘言:
: 標題: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
: 實在搞不懂為什麼
: 因為C++不是改良C的語言嗎?
: 那為啥不用C++寫作業程式 而用C呢?
: 難道C++有何缺點以至於不適合寫作業程式嗎?
: 還是只是大部分設計人員的習慣呢?
: --
: 推 RouterHsieh:雖然我跟C++不熟..不過說是改良C語言這有點問題吧囧 03/06 01:36
: → tinlans:世界上有用 C++ 寫的 OS 啊,只是沒人想用。 03/06 01:56
: → tinlans:OS 這種東西不是靠技術就能生存的,還要硬體廠商肯挺你。 03/06 01:56
: → frank99977:是哪一種"作業"程式啊...XD 03/06 04:52
============================
正常的高階語言都能寫出作業系統, 只要加入適當部份的組語程式.
MS-DOS 的前身 CP/M 就是用 PL/M (一種與 IBM PL/1 類似但針對
微處理機精簡與改良的高階程式語言, 由 INTEL 支持開發)寫出來
的. INTEL 也出過 Real-Time multi-task kernel 的 OS 也是用
PL/M 來支援的, 跟 C 一樣都能箝入組語程式段做一些高階語言不
能做的事, 如變換 call/return stack 的內容.
C++ 理論上也可以跟 C 與 PL/M 做同樣的事, 但 Object 的概念
是由 OS 的 kernel/monitor 中的 monitor 概念延伸的, 除了
message passing 這個針對網路分散式而來的概念外, 其餘都很類
似.
在 OS 的 monitor 概念裡, 維持這種模組的單一入口與封裝
要求的, 需要 kernel 來支援. 但 O-O-Language 是假設由這個語
言的框架支援. 這個 OS kernel 的特性就是支援 interrupt/trap
與 multi-proceesor 下的 concurrent operation . 在此特性上,
C++ 與 Java 就顯現不同特性, Java 是有 concurrent 特性的,
C++ 則不提. 一般的 C 或 PL/M 就是靠組語來補充, 但兩者間的
特性不會有衝突性.
Java 一般被強調為 Virtual Machine 是因為她能掌控這個
VM 的 concurrency 特性, 但其下層是建立在另一個 OS 之上,
拿她來寫 OS 就要依賴下層的 OS . 當然也有在硬體上想要直接
執行的 Java VM , 但喜歡 compiler 工具的不會喜歡有個 Java
interprter 在內揮之不去, 另一大理由就是 效率.
C++ 當然不同於 Java , 但涉及 object 封裝, 要將 OS 的
功能梳離出來會是個大事, 其次是 object 一個重要概念就是可
再用性, 原始碼的再用跟 run-time module 的再用(免不了 因
併行造成共用)是兩種不同的狀況.
Window OS 的 register table 就是一種 object-id 與相互
關係記載的概念, 會讓整個 OS 隨之調整重新組裝, 像這種
object 相互溝通與管理的概念, C++ 是有的, 但顯然不是這樣方
式提供. 但理論上應該要有這種 object concept 功能. 像這些部
份就有了重疊與衝突.
針對 OS 的特性, 一部份有欠缺, 一部份又有重覆衝突. 這就
反而不如 C 的無能. 要用組語去添補反而變成要深究那些衝突的
部份, 這就違反模組化減少藕合的概念, 當然就少有人去做了.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.4.12
推
03/06 15:03, , 1F
03/06 15:03, 1F
→
03/07 19:08, , 2F
03/07 19:08, 2F
推
03/07 19:09, , 3F
03/07 19:09, 3F
→
03/07 19:10, , 4F
03/07 19:10, 4F
→
03/07 19:14, , 5F
03/07 19:14, 5F
※ 編輯: ggg12345 來自: 140.115.4.12 (03/07 19:40)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 37 篇):