Re: [問題] 為什麼作業系統都用C寫? 而不用C++呢?
看板C_and_CPP作者hizuki (入贅桧月家,我妻彩花)時間6年前發表 (2019/06/13 06:58), 6年前編輯推噓11(11推 0噓 24→)留言35則, 8人參與, 6年前最新討論串37/37 (看更多)
我對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。
--
你比較喜歡哪一個?
當年不是黨國大老但是被江浙財團捧紅的中國帥哥
跟同樣擁兵一方的諸侯約會裁軍結果半途諸侯們爽約,平常有在寫日記的莊嚴男人開始發飆
在旁邊讀著荒漠甘泉冷眼旁觀看著薔薇戰爭的人,為了中國的事情爭吵
別國調侃是不是中國總統,義正詞嚴的說著我是民族的燈塔的威嚴老先生
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 103.29.142.67 (香港)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1560409135.A.48F.html
※ 編輯: hizuki (103.29.142.67 香港), 06/13/2019 14:59:37
→
06/13 15:14,
6年前
, 1F
06/13 15:14, 1F
ARM的ThumbEE或者Jazelle不完全是哦,不過被破梗了其實說來就這種東西
純粹看能支援多少class而已
※ 編輯: hizuki (103.29.142.67 香港), 06/13/2019 15:17:57
推
06/13 17:18,
6年前
, 2F
06/13 17:18, 2F
→
06/13 17:18,
6年前
, 3F
06/13 17:18, 3F
→
06/13 17:18,
6年前
, 4F
06/13 17:18, 4F
可是多數人理解的東西就是有std的情況阿,另外Rust我很不熟悉,想來和C++類似
※ 編輯: hizuki (103.29.142.67 香港), 06/13/2019 17:27:02
推
06/13 21:14,
6年前
, 5F
06/13 21:14, 5F
推
06/13 23:10,
6年前
, 6F
06/13 23:10, 6F
推
06/14 01:55,
6年前
, 7F
06/14 01:55, 7F
→
06/14 01:55,
6年前
, 8F
06/14 01:55, 8F
→
06/14 01:55,
6年前
, 9F
06/14 01:55, 9F
→
06/14 01:55,
6年前
, 10F
06/14 01:55, 10F
→
06/14 01:55,
6年前
, 11F
06/14 01:55, 11F
→
06/14 01:55,
6年前
, 12F
06/14 01:55, 12F
→
06/14 01:55,
6年前
, 13F
06/14 01:55, 13F
→
06/14 01:55,
6年前
, 14F
06/14 01:55, 14F
→
06/14 01:56,
6年前
, 15F
06/14 01:56, 15F
→
06/14 01:56,
6年前
, 16F
06/14 01:56, 16F
→
06/14 01:56,
6年前
, 17F
06/14 01:56, 17F
→
06/14 01:56,
6年前
, 18F
06/14 01:56, 18F
→
06/14 01:56,
6年前
, 19F
06/14 01:56, 19F
→
06/14 01:56,
6年前
, 20F
06/14 01:56, 20F
推
06/14 12:43,
6年前
, 21F
06/14 12:43, 21F
推
06/14 14:56,
6年前
, 22F
06/14 14:56, 22F
推
06/14 16:28,
6年前
, 23F
06/14 16:28, 23F
→
06/14 16:28,
6年前
, 24F
06/14 16:28, 24F
→
06/14 16:28,
6年前
, 25F
06/14 16:28, 25F
→
06/14 16:28,
6年前
, 26F
06/14 16:28, 26F
→
06/14 16:28,
6年前
, 27F
06/14 16:28, 27F
→
06/14 16:28,
6年前
, 28F
06/14 16:28, 28F
→
06/14 16:28,
6年前
, 29F
06/14 16:28, 29F
→
06/14 21:57,
6年前
, 30F
06/14 21:57, 30F
→
06/14 21:57,
6年前
, 31F
06/14 21:57, 31F
我的意思是atomic特性很難在語言層面保證
推
06/15 18:58,
6年前
, 32F
06/15 18:58, 32F
推
06/15 23:36,
6年前
, 33F
06/15 23:36, 33F
推
06/16 02:24,
6年前
, 34F
06/16 02:24, 34F
※ 編輯: hizuki (103.29.142.67 香港), 06/17/2019 16:30:01
推
06/22 11:31,
6年前
, 35F
06/22 11:31, 35F
討論串 (同標題文章)
完整討論串 (本文為第 37 之 37 篇):