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