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

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間12年前 (2013/06/13 06:47), 編輯推噓23(23038)
留言61則, 25人參與, 最新討論串32/37 (看更多)
※ 引述《x3795566 (冀憶)》之銘言: : 如題 : 實在搞不懂為什麼 : 因為C++不是改良C的語言嗎? : 那為啥不用C++寫作業程式 而用C呢? : 難道C++有何缺點以至於不適合寫作業程式嗎? : 還是只是大部分設計人員的習慣呢? 能用 c 寫出 os 的開發人員, 也能用 c++ 寫出 os 嗎?可能不一定, 因為還需要 c++ 相關知識。 要打造什麼樣的環境才能從使用組合語言進而使用 c 語言呢? init bss, init stack, 在 x86 上使用 x86 Protected Mode Flat Memory Model 還要把 %cs, %ds, %ss 設為同一個值。 其他平台可能會有點小差異。 而要打造什麼樣的環境才能從使用組合語言進而使用 c++ 語言呢? 1. c 要做的 c++ 都要做。 2. 端看要使用哪些特性。 c++ 有很多多於 c 的特性, 我沒研究很多, 只提和 class 有關的部份。 global object ctor/dtor。 static object ctor/dtor。 global object 可能會被強調不要使用, 所以可能可以不要做這部份。 static object 可能就無法避免了。 這需要在進入 c++ code 之前就打造 static object 相關程式碼。 ref: descent-incoming.blogspot.tw/2012/10/c-runtime-local-static-object-0.html descent-incoming.blogspot.tw/2012/10/c-runtime-local-static-object-1.html 我自己寫完後, 重新再看一次也看不懂 XD pure virtual function 也要打造相關的程式碼。 exception handle 也是一樣。 重點不是打造這些程式碼, 使用這些都會額外加大程式碼, 而使用 exception handle 會 拖累執行效能 (為什麼我就不知道了)。binary hacker #38 ~ #41 在談這個。 所以就算我拿 c++ 寫 os, 我也不一定會使用這些 c++ 特性。 但若使用 c++ 的 c 子集就不會有額外負擔。 那你可能認為那乾脆用 c 就好了, 但 c++ 還是提供額外的好處。 更嚴格的型別檢查, 還有好用的 function overloaded, function template, inline function (好吧, c99 也有)。 這些都不會造成空間/時間額外負擔。 function overloaded 更可以省下 print_int, print_string, print_char, 這樣的寫法, 一個 print(int), print(const char *), print(char) 就搞定。 繼承 (不要使用 virtual function) 可能也不會有額外負擔, 不過這我不確定。 為什麼不用呢? 可能 c 程式員沒有學習 c++, 或是 c++ 太複雜, 寫 os 並不值得把心力花在這裡。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.51

06/13 16:04, , 1F
謝謝大大分享指教
06/13 16:04, 1F

06/13 16:41, , 2F
參考一下eCos,kernel用C++寫的,但直到我最後使用日期...
06/13 16:41, 2F

06/13 16:43, , 3F
它的application只能用C
06/13 16:43, 3F

06/13 17:11, , 4F
這串是好久好久以前的文了.....
06/13 17:11, 4F

06/13 17:16, , 5F
從2009戰到2013,每個版都有不能碰的關鍵句XD
06/13 17:16, 5F

06/13 17:31, , 6F
haiku就是C++寫的,「沒人用C++寫OS」本身就是偽命題
06/13 17:31, 6F

06/13 18:12, , 7F
啥~現在已經2013年了?/揉眼睛
06/13 18:12, 7F

06/13 21:58, , 8F
再戰5千年!FireFox OS 表示: ......
06/13 21:58, 8F

06/13 22:13, , 9F
linux 單純只是因為 GNU 社群普遍反 C++ 吧XD
06/13 22:13, 9F

06/13 22:19, , 10F
open source社群並沒有普遍反C++,不然你哪來的g++可用
06/13 22:19, 10F

06/13 22:31, , 11F
linus覺得C++寫"好"的門嵌太高,所以不用
06/13 22:31, 11F

06/13 22:48, , 12F
C++的門檻真的好高……
06/13 22:48, 12F

06/13 23:32, , 13F
標題差點看錯,還以為在問作業為什麼都用 C 寫...XD
06/13 23:32, 13F

06/14 08:38, , 14F
OS範疇這麼大。個人覺得接近底層硬體用C就可以了,我只是
06/14 08:38, 14F

06/14 08:39, , 15F
要控制幾個硬體IO PORT,不需要搞個C++吧。至於其他schedu
06/14 08:39, 15F

06/14 08:39, , 16F
ling, memory management, process, ...等硬體無關的功能
06/14 08:39, 16F

06/14 08:39, , 17F
,用c++也許不錯。但是越好用的功能,效率一定比較慢。個
06/14 08:39, 17F

06/14 08:41, , 18F
人是覺個C一定比C++快,就如同assembly 比C快。
06/14 08:41, 18F

06/14 10:05, , 19F
「愈好用的功能效率一定比較慢」是哪來的?
06/14 10:05, 19F

06/14 10:06, , 20F
這年頭寫asm要寫贏compiler很難喔
06/14 10:06, 20F

06/14 10:21, , 21F
效率慢應該是因為包一大包,自己寫通常比較能善用資源
06/14 10:21, 21F

06/14 10:33, , 22F
效率這串往上爬有討論過吧...不要再你個人覺得了....
06/14 10:33, 22F

06/14 12:00, , 23F
來來來你寫 ASM 我寫 C 咱們比一比 XD
06/14 12:00, 23F

06/14 14:57, , 24F
ASM效率一定是比C高的.. 如果寫的人懂everything的話
06/14 14:57, 24F

06/14 18:14, , 25F
來寫個 8-way issue 的 VLIW CPU asm 跟 compiler 比吧 XD
06/14 18:14, 25F

06/14 18:16, , 26F
好用的功能 = 你需要那個好用的功能 = 你在 C 要手刻出來
06/14 18:16, 26F

06/14 18:16, , 27F
所以事實上是一樣慢。你用不到那好用的功能,又硬用他幹嘛
06/14 18:16, 27F

06/14 18:19, , 28F
?最搞笑的是很多人用 C 硬刻還刻錯,我快笑死了。
06/14 18:19, 28F

06/14 18:23, , 29F
GNU 社群是有很多糟老頭,大家把 GCC 丟了來用 LLVM 吧 XD
06/14 18:23, 29F

06/14 18:23, , 30F
我家 FreeBSD 系統已經沒有裝 GCC 了...
06/14 18:23, 30F

06/14 19:35, , 31F
出來碾人了 xD
06/14 19:35, 31F

06/14 20:27, , 32F
最主要還是學好c++跟c的門檻差異太大了吧
06/14 20:27, 32F

06/14 20:37, , 33F
話說 freeBSD 會用 LLVM,主因還是 license 理念不合吧...
06/14 20:37, 33F

06/14 20:41, , 34F
clang已經要比gcc強大了....
06/14 20:41, 34F

06/14 21:02, , 35F
hilorrk 正解。但其實還是可以裝,只是我不想裝。
06/14 21:02, 35F

06/14 22:18, , 36F
題外話,近年clang > gcc (路人看法)的趨勢是為什麼呀?
06/14 22:18, 36F

06/14 22:29, , 37F
clang 比較沒有歷史包伏,gcc有很多優化跟實作的維護
06/14 22:29, 37F

06/14 22:29, , 38F
需要大內高手來維護,像研究所論文是改gcc的,都是強者(猛~
06/14 22:29, 38F

06/14 22:30, , 39F
能看懂那個code 真的很強 = =
06/14 22:30, 39F

06/15 00:45, , 40F
能用 C++ 維護就贏一半了。雖說新版 GCC 也在推能用 C++
06/15 00:45, 40F

06/15 00:45, , 41F
compiler 去 build,但也只是能 build 而已。很多毒瘤程式
06/15 00:45, 41F

06/15 00:46, , 42F
碼要拔還得慢慢等...該死的 reload pass。
06/15 00:46, 42F

06/15 02:08, , 43F
印度人的 LRA 看起來離拔掉reload已經至少看得到影子了XD
06/15 02:08, 43F

06/15 02:28, , 44F
說組語比較快的 我可以說我做電路可以更快....
06/15 02:28, 44F

06/15 02:28, , 45F
If you know everything 硬體一定贏軟體.....
06/15 02:28, 45F

06/15 02:29, , 46F
戰這沒意義, 關鍵還是硬體和compiler出成怎樣就照寫
06/15 02:29, 46F

06/15 02:29, , 47F
現在可能越來越多硬體會針對C++優化 就會越來越多C++ OS
06/15 02:29, 47F

06/15 07:19, , 48F
確實沒意義 但是就事實來說本來就是這樣...
06/15 07:19, 48F

06/15 07:20, , 49F
純粹講一下 就C比asm快不是真的而已
06/15 07:20, 49F

06/15 08:34, , 50F
其實真的未必。懂 everything 不代表願意做 everything,
06/15 08:34, 50F

06/15 08:35, , 51F
光是能 N-way issue 的 CPU,compiler 針對 ILP 做的最佳
06/15 08:35, 51F

06/15 08:36, , 52F
化就會讓人不太想用人腦和紙筆推算後再寫 ASM。
06/15 08:36, 52F

06/15 08:42, , 53F
特別是 loop,你人眼少漏看了幾個點,schedule length 多
06/15 08:42, 53F

06/15 08:43, , 54F
了幾個 cycle,跑出來的結果就會被 compiler 打趴。
06/15 08:43, 54F

06/15 08:43, , 55F
^ 這個「少」字刪掉
06/15 08:43, 55F

06/16 17:39, , 56F
我才不相信人腦optimizer可以贏compiler...
06/16 17:39, 56F

06/16 17:40, , 57F
你跑步可以跑贏騎腳踏車的嗎
06/16 17:40, 57F

06/16 17:40, , 58F
人力有其極限,不然為什麼要開發工具咧..
06/16 17:40, 58F

06/16 20:38, , 59F
深藍表示:
06/16 20:38, 59F

06/17 15:24, , 60F
忘了哪本書裡說這就像雙面刃... 為了要C++,你就必須C++.
06/17 15:24, 60F

06/19 00:45, , 61F
這應該要問Linus Torvalds和他的信徒......
06/19 00:45, 61F
文章代碼(AID): #1HkMiSCZ (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 32 之 37 篇):
文章代碼(AID): #1HkMiSCZ (C_and_CPP)