Linus Torvalds:“C++ 真是一门很烂的语言!”

2023-12-18 06:59

本文主要是介绍Linus Torvalds:“C++ 真是一门很烂的语言!”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

凌云时刻

他来了他来了!Linus 带着他的“暴脾气”又来了!

近日,Rust 进入 Linux 内核的决定已正式提上议程,上周其内核开发者  Miguel Ojeda 提交了一份在 Linux 内核中添加 Rust 支持的 RFC 引起热议。

对于这件事,许多人自然想知道 Linux 之父——Linus Torvalds 的看法,毕竟这是 Linux 这么多年以来,第一次要在其内核中加入除了 C 以外的第二门编程语言。因而外媒 IT Wire 就此问题采访了 Linus。

起初他还比较“矜持”,只是比较官方地回应说 Linux 内核对 Rust 的支持还在早期阶段,等到 5.14 版本可能才会合并相关补丁。

但在知道有开发者认为“应该用 C++ 而不是 Rust”时,Linus 的“暴脾气”终于还是藏不住了。

他大笑并讽刺道:“C++ 真是一门很烂的语言!”

十多年来,坚持站在炮轰 C++ 第一线

如果说,Linus 对 Linux 的“爱”这三十年来从未变过,那他对 C++ 的“恨”也可以说是十几年如一日。

他早在 2007 年就开始炮轰 C++ 了。

彼时,有位名为 Dmitry Kakurin 的开发者查看了 Git 源代码发现使用的是纯 C 而非 C++ 后,他表示不可理解,于是发帖喷道:“别拿可移植性说事儿,这是胡扯(原句这里是 BS,即 bullshit)。”

好家伙,结果这句“BS”直接引爆了 Linus 的炸弹脾气。

向来以言辞犀利著称、甚至曾对 Nvidia 比中指的 Linus 自然不避讳什么脏话粗话,因此他回怼的第一句就“以其人之道还治其人之身”:“*YOU* are full of bullshit.”

报了“BS”的仇之后,Linus 接下来还把 C++ 批的一无是处:“C++ 是一门很糟糕的语言”、“很多不合格的程序员都在使用它”、“我要把喜欢用 C++ 而不是 C 来开发项目的程序员都踢出去,免得他们来搞乱我参与的项目”、“C++ 最后做出来的就是一堆可怕、难以维护的垃圾”......

自此,Linus 与 C++ 算是彻底杠上。

这还不算完,2010 年,Linus 又在邮件列表中接连发帖吐槽 C++。依他来看,C++ 真是一门很烂的语言。他表示,无论什么时候 C++ 都不可能是最正确的选择:系统编程里直接用 C 就可以,而非系统编程里,最好选择一种有垃圾收集的语言,但 C++ 的特性除了捣乱,基本无用。

他还嘲笑 C++ 的 new 关键字很蠢,认为“C++ 就是废物,根本没啥设计,只是在 C 上面加了些渣滓而已。”

而这次采访是 Linus 时隔多年以来再次于公共场合对 C++ 进行炮轰。

再一次被骂“很烂”的 C++

这次引得 Linus 再次炮轰 C++ 的是 Linux Weekly News 网站上网友 @mss 的一条评论:

解决方案很简单:用 C++ 代替 Rust。

当代码调用不安全函数时,Rust 的内存安全就得不到保证了,而目前几乎所有内核 API 都在其中。不过,你也可以轻松地使用 C++ 进行此类手动标记。

本来呢,每个人都有发言权利,尤其在现在的互联网时代,网友发言更加随心随性,哪种编程语言更好也自然是“仁者见仁,智者见智”。

可这对 Linus 来说可就不同了。他一直视 C++ 为“废物”、认为它“无用”,结果居然有人认为他们精心挑选可以进入 Linux 内核的 Rust 还比不上 C++?

因此听到这个评论的 Linus 没控制住嗤笑出声,他鄙夷说道:“C++ 根本解决不了 C 语言的问题,它只会让事情变得更糟。这真是一门很烂的语言。”

他认为,那些不喜欢 C 语言的人可以去寻找真正能给你带来价值的语言。比如具有内存安全性并可以避免 C 导致的隐患的语言,或者具有内部 GC(垃圾回收)支持并简化内存管理的语言。而这个语言明显不是 C++,因为在 Linus 看来,C++ 解决的都是错误的问题,因而那些说“用 C++ 重写内核”的人都太无知了。

与 C++ 相比,Linus 选择无条件站在 C 这一边。“当人们谈到由 C 导致的危险时,也谈到了 C 如此强大的部分原因:'它允许你高效地实现所有这些低级的东西'。”Linus 提到。此外,尽管大多数情况下 GC 对于简化编程而言都是一件挺好的事,但是它通常不是你在低级系统编程中所能做的事情。

网友:C++ 不是垃圾

相信大家经常可以在网上看到许多人争论有关“最佳编程语言”的话题,但随着时间的推移,越来越多新兴编程语言的崛起,大多数的人都意识到了一个事实:每种编程语言都有自身局限性,也拥有其最擅长的用武之地。

因此这次 Linus 把 C++ 骂得“一无是处”引来许多开发者的抗议。

网友@ Chuck Messenger :

C++ 的伟大之处在于它“就是 C”。你能用 C 语言做一些 C++ 做不到的事情吗?据我所知没有。在每次新的迭代中,C++ 都提供了对抽象的改进支持,

我对 Rust 很感兴趣,也有可能向它迁移。但是,C++ 在任何意义上都不是“垃圾”。

网友@stikves:

他说 C++ 不适合 Linux 内核可能是对的。不过对于 C++ 这个语言......大家都知道他的看法一直比较强烈吧。

当然,C++ 也适用于其他操作系统,比如 Windows、Mac OS,甚至Android。所以这都取决于不同的项目。


这次 Linus 又把 C++ 程序员得罪了一通,不过这么多年来他的“暴脾气”也没怎么改,或许就跟编程语言一样,Linus 的“火爆”也是部分开发者的“心头好”吧!

参考链接:

https://developers.slashdot.org/story/21/04/17/009241/linus-torvalds-says-rust-closer-for-linux-kernel-development-calls-c-a-crap-language#comments

https://lwn.net/Articles/852758/

END


长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

投稿及合作请联系邮箱:lingyunshike@163.com

这篇关于Linus Torvalds:“C++ 真是一门很烂的语言!”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507469

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现