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

作者: hizuki (ayaka)   2019-06-13 14:58:41
我對C++不熟悉,熟悉的kernel或者作業系統只有GNU Linux
作業系統其實是很廣泛的一個東西,可以指kernel上的變動,比如Debian
也可以指userspace的變動比如Android
我這篇文章專門講Kernel層級的東西,我不熟悉的東西麻煩大家指正
: → bdvstg: 不同編譯器裝飾名稱規則不同? 06/12 23:17
: → MOONRAKER: 有時要看你主要開發平台上有什麼好用 06/13 10:12
: 推 loadingN: ABI的問題嗎? 06/13 10:42
對kernel其實不是很大的問題,畢竟Linux kernel很長一段時間都是只能用gcc編譯的
Intel試過去支援,llvm也是一個。很多Marco或者struct declaiming無法相容許
※ 引述《jobsdone (完工了)》之銘言:
: 標題: Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
: 時間: Wed Jun 12 22:20:09 2019
: fuchsia的kernel叫作zircon,是個microkernel
: 看了檔案名稱,大部分是cpp結尾
: 看了一下原始碼的內容,給我的感覺更像c而不是c++,至少跟modern c++差很多
: 雖然c++的彈性很大,想寫成像c也可以
: 但是為什麼不乾脆寫c就好呢?
問題就再於大家會問這個問題的人都太熟悉standard library了,可是在kernel space
下根本沒有這種東西,更不要提基礎的I/O操作了或者memory作業了。
C++在我的觀點下,早期版本真的和C89很想,只是多了幾個對struct上的重命名擴展(繼承),
還有規定了一個struct的初始化與釋放通用命名,允許對某個struct進行運算符重設定
多數C89不支援的功能,都可以用Marco定義來解決,其實沒有多多少
仔細想以上上述的功能,到底有多少是必須的?好想也沒有那麼多需求的
然後我們現在要處理這個多出來的繼承功能,linker要大傷腦筋了,整個building的
速度就被拖下來了。這就要問為什麼要用C++了?
回頭來看,C++後來的標準加入了一堆heap操作,atomic符號,signal/event處理,
這些東西對kernel space有什麼意義?compiler看了也不知道要怎麼做阿?那C++
還真沒什麼用處。結果又要為了這些功能擋掉一堆compiler的功能,不然就是拖慢
速度,可能別的小新開發者也會靠北靠母,為什麼自己想好好的程式這邊不能用。
: 作業系統用c++寫的也不是說沒有,最近還有一篇論文是用go寫作業系統
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.26.103.74 (臺灣)
: ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1560349211.A.234.html
: 推 TitanEric: 之前看到有人用Rust寫 06/12 23:34
: → firejox: 看過用haskell寫的 06/13 03:14
: 推 CoNsTaR: 用 Rust 寫問題會是什麼?目的碼體積太大? 06/13 10:51
和Go的問題一樣,他們語言的特性都沒有了,這些語言設計的時候,就是沒有考慮
過如果沒有standard library的情況下會如何
Go還更糟糕,如果沒有Go runtime,到底這個語言有什麼優勢?programming model
都要大改了,順便說一下thread什麼的,在kernel space其實一點意義都沒有。
有人給我錢的話,我可以設計一個CPU可以吃Java bytecode或者Python。
作者: MOONRAKER (㊣牛鶴鰻毛人)   2019-06-13 15:14:00
吃bytecode應該有過了 吃python比較霹靂 XD
作者: CoNsTaR ((const *))   2019-06-13 17:18:00
Rust 的 std 不能算是語言特性吧 = =現在有些 library 也都用 no_std + core 來拼效能,code還是很 Rusty 啊
作者: aria0520 (紫)   2019-06-13 21:14:00
Rust特性是安全相關吧
作者: TitanEric (泰坦)   2019-06-13 23:10:00
作者: CoNsTaR ((const *))   2019-06-14 01:55:00
Rust 從語意上來看像函數式語言,雖然語法上像物件導向,我只能說和 C++ 的初衷實在差滿多...而且實際上有在用 Rust 都知道 std 常常不是最佳方案,例如 hashmap 有 hashbrown (hashbrown 之前有 fxhash),channel 有 crossbeam個人的感受,這個語言最大的特性是高度抽象化(例如有類似GADT)的同時卻仍在乎對硬體的低階控制(例如copy或ref,struct成員順序、padding),沒有肥大的GC或一些奇怪的物件導向理論(亦即不需要一個runtime或std來做背後的事情)卻能在編譯期保證沒有 memory 或 interprocess 的問題,不用編譯成 C (which c++ kinda needs to) 卻 natively 支援多平臺多架構,而且擁有高效能我不覺得這些語言特性和 std 有什麼關係,也不覺得沒有 std Rust 就不像 Rust,更不覺得它只是 yet another C++
作者: TitanEric (泰坦)   2019-06-14 12:43:00
推樓上 想問一下Rust的定位像C還是C++?
作者: lc85301 (pomelocandy)   2019-06-14 14:56:00
我覺得都不太像
作者: CoNsTaR ((const *))   2019-06-14 16:28:00
我覺得有點像認清現實的 Haskell lol如果只和 C C++ 比的話,純 Rust(只包含 core 不包含 std)寫出來的東西語意上比較像只用 templates 和 std::variant, std::optional, std::function..., c++2a concepts的 C++但語法上其實沒有 template, concepts 什麼的,你看到的都是一般函數,loops,結構定義,結構實作,變數宣告
作者: firejox (Tangent)   2019-06-14 21:57:00
atomic 還是有用處的,如果你是跑在多核心的環境下會需要的
作者: lc85301 (pomelocandy)   2019-06-15 18:58:00
認清現實的Haskell XDDDD
作者: TitanEric (泰坦)   2019-06-15 23:36:00
感謝C大認真解說
作者: yoco (眠月)   2019-06-16 02:24:00
同 CoNsTaR
作者: jimmytzeng (jimmytseng)   2019-06-22 11:31:00
有新創用RISC-V 設計自己cpu,然後移micropython上去

Links booklink

Contact Us: admin [ a t ] ucptt.com