作者hizuki (入赘桧月家,我妻彩花)
看板C_and_CPP
标题Re: [问题] 为什麽作业系统都用C写? 而不用C++呢?
时间Thu Jun 13 14:58:41 2019
我对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://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1560409135.A.48F.html
※ 编辑: hizuki (103.29.142.67 香港), 06/13/2019 14:59:37
1F:→ MOONRAKER: 吃bytecode应该有过了 吃python比较霹雳 XD 06/13 15:14
ARM的ThumbEE或者Jazelle不完全是哦,不过被破梗了其实说来就这种东西
纯粹看能支援多少class而已
※ 编辑: hizuki (103.29.142.67 香港), 06/13/2019 15:17:57
2F:推 CoNsTaR: Rust 的 std 不能算是语言特性吧 = = 06/13 17:18
3F:→ CoNsTaR: 现在有些 library 也都用 no_std + core 来拼效能,code 06/13 17:18
4F:→ CoNsTaR: 还是很 Rusty 啊 06/13 17:18
可是多数人理解的东西就是有std的情况阿,另外Rust我很不熟悉,想来和C++类似
※ 编辑: hizuki (103.29.142.67 香港), 06/13/2019 17:27:02
5F:推 aria0520: Rust特性是安全相关吧 06/13 21:14
6F:推 TitanEric: 推 06/13 23:10
7F:推 CoNsTaR: Rust 从语意上来看像函数式语言,虽然语法上像物件导向, 06/14 01:55
8F:→ CoNsTaR: 我只能说和 C++ 的初衷实在差满多... 06/14 01:55
9F:→ CoNsTaR: 而且实际上有在用 Rust 都知道 std 常常不是最佳方案, 06/14 01:55
10F:→ CoNsTaR: 例如 hashmap 有 hashbrown (hashbrown 之前有 fxhash), 06/14 01:55
11F:→ CoNsTaR: channel 有 crossbeam 06/14 01:55
12F:→ CoNsTaR: 个人的感受,这个语言最大的特性是高度抽象化(例如有类 06/14 01:55
13F:→ CoNsTaR: 似GADT)的同时却仍在乎对硬体的低阶控制(例如copy或ref 06/14 01:55
14F:→ CoNsTaR: ,struct成员顺序、padding),没有肥大的GC或一些奇怪 06/14 01:55
15F:→ CoNsTaR: 的物件导向理论(亦即不需要一个runtime或std来做背後的 06/14 01:56
16F:→ CoNsTaR: 事情)却能在编译期保证没有 memory 或 interprocess 的 06/14 01:56
17F:→ CoNsTaR: 问题,不用编译成 C (which c++ kinda needs to) 却 nati 06/14 01:56
18F:→ CoNsTaR: vely 支援多平台多架构,而且拥有高效能 06/14 01:56
19F:→ CoNsTaR: 我不觉得这些语言特性和 std 有什麽关系,也不觉得没有 s 06/14 01:56
20F:→ CoNsTaR: td Rust 就不像 Rust,更不觉得它只是 yet another C++ 06/14 01:56
21F:推 TitanEric: 推楼上 想问一下Rust的定位像C还是C++? 06/14 12:43
22F:推 lc85301: 我觉得都不太像 06/14 14:56
23F:推 CoNsTaR: 我觉得有点像认清现实的 Haskell lol 06/14 16:28
24F:→ CoNsTaR: 如果只和 C C++ 比的话,纯 Rust(只包含 core 不包含 st 06/14 16:28
25F:→ CoNsTaR: d)写出来的东西语意上比较像只用 templates 和 std::var 06/14 16:28
26F:→ CoNsTaR: iant, std::optional, std::function..., c++2a concepts 06/14 16:28
27F:→ CoNsTaR: 的 C++ 06/14 16:28
28F:→ CoNsTaR: 但语法上其实没有 template, concepts 什麽的,你看到的 06/14 16:28
29F:→ CoNsTaR: 都是一般函数,loops,结构定义,结构实作,变数宣告 06/14 16:28
30F:→ firejox: atomic 还是有用处的,如果你是跑在多核心的环境下会需要 06/14 21:57
31F:→ firejox: 的 06/14 21:57
我的意思是atomic特性很难在语言层面保证
32F:推 lc85301: 认清现实的Haskell XDDDD 06/15 18:58
33F:推 TitanEric: 感谢C大认真解说 06/15 23:36
34F:推 yoco: 同 CoNsTaR 06/16 02:24
※ 编辑: hizuki (103.29.142.67 香港), 06/17/2019 16:30:01
35F:推 jimmytzeng: 有新创用RISC-V 设计自己cpu,然後移micropython上去 06/22 11:31