看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
pcedison:謝謝大大分享指教 06/13 16:04
lungswu:參考一下eCos,kernel用C++寫的,但直到我最後使用日期... 06/13 16:41
lungswu:它的application只能用C 06/13 16:43
legendmtg:這串是好久好久以前的文了..... 06/13 17:11
o07608:從2009戰到2013,每個版都有不能碰的關鍵句XD 06/13 17:16
littleshan:haiku就是C++寫的,「沒人用C++寫OS」本身就是偽命題 06/13 17:31
cuteclare:啥~現在已經2013年了?/揉眼睛 06/13 18:12
POSIX:再戰5千年!FireFox OS 表示: ...... 06/13 21:58
hilorrk:linux 單純只是因為 GNU 社群普遍反 C++ 吧XD 06/13 22:13
littleshan:open source社群並沒有普遍反C++,不然你哪來的g++可用 06/13 22:19
kdjf:linus覺得C++寫"好"的門嵌太高,所以不用 06/13 22:31
suhorng:C++的門檻真的好高…… 06/13 22:48
saxontai:標題差點看錯,還以為在問作業為什麼都用 C 寫...XD 06/13 23:32
Thelink:OS範疇這麼大。個人覺得接近底層硬體用C就可以了,我只是 06/14 08:38
Thelink:要控制幾個硬體IO PORT,不需要搞個C++吧。至於其他schedu 06/14 08:39
Thelink:ling, memory management, process, ...等硬體無關的功能 06/14 08:39
Thelink:,用c++也許不錯。但是越好用的功能,效率一定比較慢。個 06/14 08:39
Thelink:人是覺個C一定比C++快,就如同assembly 比C快。 06/14 08:41
littleshan:「愈好用的功能效率一定比較慢」是哪來的? 06/14 10:05
littleshan:這年頭寫asm要寫贏compiler很難喔 06/14 10:06
DarkPrincex:效率慢應該是因為包一大包,自己寫通常比較能善用資源 06/14 10:21
legendmtg:效率這串往上爬有討論過吧...不要再你個人覺得了.... 06/14 10:33
Ebergies:來來來你寫 ASM 我寫 C 咱們比一比 XD 06/14 12:00
singlovesong:ASM效率一定是比C高的.. 如果寫的人懂everything的話 06/14 14:57
tinlans:來寫個 8-way issue 的 VLIW CPU asm 跟 compiler 比吧 XD 06/14 18:14
tinlans:好用的功能 = 你需要那個好用的功能 = 你在 C 要手刻出來 06/14 18:16
tinlans:所以事實上是一樣慢。你用不到那好用的功能,又硬用他幹嘛 06/14 18:16
tinlans:?最搞笑的是很多人用 C 硬刻還刻錯,我快笑死了。 06/14 18:19
tinlans:GNU 社群是有很多糟老頭,大家把 GCC 丟了來用 LLVM 吧 XD 06/14 18:23
tinlans:我家 FreeBSD 系統已經沒有裝 GCC 了... 06/14 18:23
yoco315:出來碾人了 xD 06/14 19:35
UncleHS:最主要還是學好c++跟c的門檻差異太大了吧 06/14 20:27
hilorrk:話說 freeBSD 會用 LLVM,主因還是 license 理念不合吧... 06/14 20:37
legendmtg:clang已經要比gcc強大了.... 06/14 20:41
tinlans:hilorrk 正解。但其實還是可以裝,只是我不想裝。 06/14 21:02
POSIX:題外話,近年clang > gcc (路人看法)的趨勢是為什麼呀? 06/14 22:18
damody: clang 比較沒有歷史包伏,gcc有很多優化跟實作的維護 06/14 22:29
damody:需要大內高手來維護,像研究所論文是改gcc的,都是強者(猛~ 06/14 22:29
damody:能看懂那個code 真的很強 = = 06/14 22:30
tinlans:能用 C++ 維護就贏一半了。雖說新版 GCC 也在推能用 C++ 06/15 00:45
tinlans:compiler 去 build,但也只是能 build 而已。很多毒瘤程式 06/15 00:45
tinlans:碼要拔還得慢慢等...該死的 reload pass。 06/15 00:46
akasan:印度人的 LRA 看起來離拔掉reload已經至少看得到影子了XD 06/15 02:08
amozartea:說組語比較快的 我可以說我做電路可以更快.... 06/15 02:28
amozartea:If you know everything 硬體一定贏軟體..... 06/15 02:28
amozartea:戰這沒意義, 關鍵還是硬體和compiler出成怎樣就照寫 06/15 02:29
amozartea:現在可能越來越多硬體會針對C++優化 就會越來越多C++ OS 06/15 02:29
singlovesong:確實沒意義 但是就事實來說本來就是這樣... 06/15 07:19
singlovesong:純粹講一下 就C比asm快不是真的而已 06/15 07:20
tinlans:其實真的未必。懂 everything 不代表願意做 everything, 06/15 08:34
tinlans:光是能 N-way issue 的 CPU,compiler 針對 ILP 做的最佳 06/15 08:35
tinlans:化就會讓人不太想用人腦和紙筆推算後再寫 ASM。 06/15 08:36
tinlans:特別是 loop,你人眼少漏看了幾個點,schedule length 多 06/15 08:42
tinlans:了幾個 cycle,跑出來的結果就會被 compiler 打趴。 06/15 08:43
tinlans: ^ 這個「少」字刪掉 06/15 08:43
holymars:我才不相信人腦optimizer可以贏compiler... 06/16 17:39
holymars:你跑步可以跑贏騎腳踏車的嗎 06/16 17:40
holymars:人力有其極限,不然為什麼要開發工具咧.. 06/16 17:40
bleed1979:深藍表示: 06/16 20:38
ruthertw:忘了哪本書裡說這就像雙面刃... 為了要C++,你就必須C++. 06/17 15:24
RadiationXen:這應該要問Linus Torvalds和他的信徒...... 06/19 00:45