- 主题:20年了,大家现在再看看linus对C++的负面评价
先不说这些观点本身,但是Linus对待Rust和C++简直是双标。在年初的Rust风波里,linus对那些拒绝Rust代码的一些模块负责人这样说:"你可以不喜欢Rust,也可以不用Rust,但是你不能阻止别人用Rust",他的这些话导致了一些linux内核代码审核人辞职。
(1)C++ 中的异常处理
“整个 C++ 的异常处理机制从根本上就是错误的。对于内核来说,它更是错得离谱。”
(2)C++ 编译器中的内存管理
“任何喜欢在背后隐藏内存分配等操作的编译器或语言,都不是内核开发的好选择。”
(3)C++ 与 C 中的面向对象编程
“你可以在 C 语言中编写面向对象的代码(对系统文件等场景很有用),而无需使用 C++中的那些垃圾。”
(4)C++ 库和依赖项的稳定性
“当这些库无法工作时,会带来无尽的痛苦(任何告诉我 STL 和 Boost 是稳定和可移植的人,简直是满嘴跑火车,而且一点都不好笑)。”
(5)你最终还是会用回纯 C
“换句话说,唯一能写出高效、系统级且可移植的 C++ 代码的方法,就是限制自己只使用那些基本上在 C 中可用的东西。”
“将项目限制在 C 语言中,意味着人们不会搞砸,也意味着你会吸引到许多真正理解底层问题的程序员,他们不会因为愚蠢的‘对象模型’而搞砸事情。”
(6)下一步是什么,Rust、Go 还是甚至原生 Java?
“C 语言最终是一种非常简单的语言,这也是我喜欢 C 语言、以及许多 C 程序员喜欢 C 语言的原因之一。然而,也正是因为其简单性,它也容易出错,而 Rust 就不会。” ——源自 Linus Torvalds 与 Dirk Hohndel 的一次对话
--
FROM 58.246.152.*
其实,我看过 linus 看的 c++ 代码,还是 Qt 的哈哈。他写那个潜水软件。
很明显,linus 并非不喜欢 c++,他不喜欢的是 C++ 这个社区的人。尤其不喜欢搞元编程的这伙人。
【 在 foliver 的大作中提到: 】
: 先不说这些观点本身,但是Linus对待Rust和C++简直是双标。在年初的Rust风波里,linus对那些拒绝Rust代码的一些模块负责人这样说:"你可以不喜欢Rust,也可以不用Rust,但是你不能阻止别人用Rust",他的这些话导致了一些linux内核代码审核人辞职。
: (1)C++ 中的异常处理
: “整个 C++ 的异常处理机制从根本上就是错误的。对于内核来说,它更是错得离谱。”
: ...................
--
修改:hgoldfish FROM 120.37.22.*
FROM 120.37.22.*
好像跟我的观点一致唉。
【 在 foliver 的大作中提到: 】
: 先不说这些观点本身,但是Linus对待Rust和C++简直是双标。在年初的Rust风波里,linus对那些拒绝Rust代码的一些模块负责人这样说:"你可以不喜欢Rust,也可以不用Rust,但是你不能阻止别人用Rust",他的这些话导致了一些linux内核代码审核人辞职。
:
: (1)C++ 中的异常处理
: ...................
--
FROM 221.218.61.*
linus不喜欢c++,就没人用c++了?
kernel是个限制严格的环境,有些特性不能用,不是很正常的事情?咋不要求java/py/js/php能用在kernel编程呢?
--
FROM 123.115.134.*
在kernel等这些特定领域之外的地方还抱着C不放而不用C++、Rust的这些人,才是奥特曼,自己吭哧吭哧手工把C++编译器早就自动搞定的东西每次都重新轮一遍,不知道自己落后愚昧,还沾沾自喜。你咋不用汇编、机器码去轮一遍呢
--
FROM 123.115.134.*
完全同意,
尤其是面向对象,
简直是debug噩梦。
【 在 foliver 的大作中提到: 】
: 先不说这些观点本身,但是Linus对待Rust和C++简直是双标。在年初的Rust风波里,linus对那些拒绝Rust代码的一些模块负责人这样说:"你可以不喜欢Rust,也可以不用Rust,但是你不能阻止别人用Rust",他的这些话导致了一些linux内核代码审核人辞职。
:
: (1)C++ 中的异常处理
: ...................
--
FROM 120.230.113.*
linux kernel一直被linus把持,他不让c++代码进入linux kernel,那肯定没辙
windows早就有人尝试用C++写driver了,DriverStudio几乎是最早的。MSVC用/kernel参数可以生成适合kernel driver的代码,但会限制某些c++ feature的使用。这说明通过编译器的改造,可以用C++的子集来写kernel代码。
C++ exception也有一个可以用在windows kernel driver的实现,只不过不是官方的。
Windows官方的KMDF整个都是用C++写的(导出的是C接口),十几年前。
这说明什么呢?经常被人骂的MS,以及windows kernel driver社区,心态比被linus一个人的品味把持的linux kernel社区的更加开放。
--
修改:z16166 FROM 123.115.134.*
FROM 123.115.134.*
面向对象是一种抽象建模的思维方式,哪种语言不面向对象编程?跟C++有什么关系?跟debug有什么关系?
【 在 heyuanlie 的大作中提到: 】
: 完全同意,
: 尤其是面向对象,
: 简直是debug噩梦。
: ...................
--
FROM 123.116.177.*
cpp的各种虚继承、虚函数、函数多样性、友类、私有函数,还有与这些对应的各种指针、引用、模板库、容器等等,debug时遇到这些就很崩溃了。
我要是遇到stl或者boost调用崩了,就直接放弃debug了。
【 在 CMOO 的大作中提到: 】
: 面向对象是一种抽象建模的思维方式,哪种语言不面向对象编程?跟C++有什么关系?跟debug有什么关系?
:
--
FROM 120.230.113.*
有一点不明,c++的函数名,并非是你写的函数名,真正的函数名取决于编译器,而且无法主动使用。这样如何做到可移植性?没有可移植性,如何能做系统内核?
【 在 z16166 的大作中提到: 】
: linux kernel一直被linus把持,他不让c++代码进入linux kernel,那肯定没辙
: windows早就有人尝试用C++写driver了,DriverStudio几乎是最早的。MSVC用/kernel参数可以生成适合kernel driver的代码,但会限制某些c++ feature的使用。这说明通过编译器的改造,可以用C++的子集来写kernel代码。
: C++ exception也有一个可以用在windows kernel driver的实现,只不过不是官方的。
: ...................
--
FROM 221.218.61.*