问题

Linus Torvalds 的 C++ 水平如何,为什么他敢炮轰此编程语言?

回答


Linus Torvalds(Linux内核的创始人)对C++的批评主要源于他对编程语言设计哲学、实际应用需求以及开发效率的深刻理解。尽管他在C++领域可能并非专家,但他的批评基于对编程语言本质、系统编程需求以及实际开发经验的深刻洞察。以下是详细分析:



1. Linus Torvalds的C++水平:基于经验而非专家
技术背景:Linus Torvalds的编程生涯以C语言为核心,他开发的Linux内核完全使用C语言编写。C++作为C的超集,虽然在语法和功能上扩展了C,但Linus对C++的了解主要来自间接经验,而非系统性学习。
实际使用:Linux内核的开发团队中,C++的使用非常有限。Linus本人从未在内核开发中使用过C++,因此他对C++的批评更多基于他对C语言特性的理解以及对编程语言设计原则的思考。
技术观点:他可能对C++的某些设计决策(如模板元编程、RAII、继承等)有直观的负面看法,但并未深入研究C++的底层实现或高级特性。



2. 为什么Linus敢批评C++?
Linus的批评主要基于以下几点:

(1)C++的复杂性与可维护性问题
指针与内存管理:C++的指针操作、手动内存管理(如new/delete)和RAII(资源获取即初始化)机制,使代码容易出错且难以维护。Linus认为,这种复杂性会增加开发成本,并可能导致系统级错误(如内存泄漏、段错误)。
模板元编程:C++的模板系统虽然强大,但其编译时的复杂性导致代码难以理解,甚至可能生成不可读的中间代码(如模板膨胀)。Linus认为,这种复杂性会阻碍代码的可维护性。
过度的泛型:C++的泛型编程(如STL)虽然强大,但其设计哲学(如“以编译时计算代替运行时计算”)可能让程序员陷入“为泛型而泛型”的困境,导致代码冗余或难以调试。

(2)C++的“语言膨胀”问题
设计哲学的冲突:C++的设计目标是“扩展C”,但其不断新增的特性(如异常处理、运算符重载、类模板等)导致语言变得臃肿。Linus认为,这种“语言膨胀”会增加学习成本,并可能让程序员偏离“简洁、直接”的编程原则。
对C语言的“背叛”:Linus认为,C++对C语言的扩展(如面向对象编程、泛型)偏离了C语言“简洁、高效、直接”的本质,导致语言变得复杂且难以控制。

(3)C++的“过度抽象”问题
面向对象的局限性:C++的类和继承机制虽然在某些场景下有用,但Linus认为其在系统编程中容易导致代码结构混乱(如多继承、虚函数表)。他更倾向于用结构体和函数实现功能,而非面向对象。
模板的“隐式性”:C++的模板代码在编译时被展开,但这种隐式性可能导致代码难以调试和理解,尤其是在大型项目中。

(4)C++的“语言设计缺陷”
错误处理机制:C++的异常处理机制(try/catch)在某些情况下(如系统级编程)可能不如C语言的错误码更可靠,且容易导致代码“错误处理混乱”。
类型系统的复杂性:C++的类型推导、模板参数推导等机制让程序员需要更复杂的知识,而Linus认为这会增加开发门槛,导致代码质量下降。



3. Linus的批评是否合理?
从系统编程角度:Linus的批评在系统编程领域具有一定的合理性。Linux内核的开发需要高效、可维护、可移植的代码,而C++的复杂性可能让这种目标难以实现。例如,C++的模板系统可能导致编译时间过长,而Linux内核需要快速编译。
从语言设计哲学角度:Linus的批评反映了他对“语言简洁性”的追求,这与他设计Linux内核时的理念一致。他认为,语言应该以“可读性”和“可维护性”为核心,而非“功能扩展性”。
对C++的“过度设计”:C++的某些设计(如模板、RAII)确实让语言变得复杂,但这些特性在现代C++中被广泛使用(如C++11/14/17)。Linus的批评更多是基于他对C语言的“纯粹性”要求,而非对C++技术本身的否定。



4. Linus对C++的批评是否影响了他的技术判断?
局限性:Linus的批评更多是基于对C语言的热爱和对系统编程需求的理解,而非对C++技术的全面评估。他可能没有深入研究C++的底层实现,因此其批评可能带有“偏见”。
技术边界:Linus的批评更多是针对C++的“设计哲学”而非技术实现。例如,他可能认为C++的模板系统不适合系统级开发,但C++的模板在算法库(如STL)中确实有重要作用。



5. 总结:Linus的批评与C++的现状
技术视角:Linus的批评反映了他对系统编程语言的“理想化”需求,即语言应简单、直接、高效,且能直接操作硬件。C++虽然功能强大,但其复杂性可能让这种需求难以满足。
语言设计哲学:Linus的批评并非针对C++的技术缺陷,而是对C++设计哲学的不满。他认为C++的扩展性让语言变得难以控制,而C语言的简洁性更适合系统编程。
现实应用:C++在现代编程中仍然广泛使用(如游戏开发、嵌入式系统、高性能计算),但其复杂性确实让某些场景(如系统级开发)显得不理想。



结论
Linus Torvalds对C++的批评主要基于他对系统编程语言的“理想化”需求,而非对C++技术的全面评估。他的批评反映了对C语言简洁性、直接性以及可维护性的偏好,但这些观点更多是基于对C语言的热爱和对系统编程需求的理解,而非对C++技术的深入研究。因此,他的批评在技术上可能有其合理性,但并非对C++的全面否定。

网友意见

user avatar

Linus 只炮轰过一次,那是因为 git 选择了 C 语言,很多人「选择性无视了这段话的由来」。这段话的来由是因为有一位大炮在邮件列表中公开说 Linus 在 git 项目中使用 C 语言进行开发的理由是 「BULLSHIT」,所以 Linus 才开炮说「你才是 BULLSHIT 」,然后明确说明了(大意),因为 C++ 有一群猪队友,为了避免使用 C++ 的猪队友来搞乱代码,所以 git 项目使用纯 C 写作。

各位简单的思考一下,你开发一个软件,人家骂人的都跑到你的邮件列表(国人可以理解为这就是官方论坛)里面来开骂了,你还不发飚能行?

是否炮轰,与他本人的 C++ 水平没有关系,而且他炮轰的只是那个大炮,以及一部分猪队友,而非所有的 C++ 程序员。这只与他能接触到的那些 C++ 程序员的水平有关系。作为非商业的开源软件,其实他并不能选择谁来参与他的项目。不能够根据项目的技术需求来挑选人,而只能通过现有人才的力量来选择项目技术。

事实上,他的观点没什么大问题。Linus 自称在 Linux 团队中的主要职责是代码审查。换句话说他评估什么代码是好的,什么是不好的,什么该进入代码,什么不该进入。

他明白哪些人会来参加他的项目,哪些人会为他的项目贡献代码,如果这些人的 C++ 能力都不如 C 能力,那么他就绝对不能选择 C++ ,这与他本人的 C++ 能力没有关系,也与 C++ 本身没有关系,而是作为代码审查者,他太清楚与他合作的那些人写 C++ 程序的能力水平了

user avatar

我觉得,他的意思是 写操作系统内核,最好就采用汇编。因为这就是cpu提供的原生的接口,这样做,性能最高,也能让人少犯错。

c是相对最接近汇编的。也容易让人自动脑补汇编怎么实现。

c++和汇编的距离就比较远了。

类似的话题

  • 回答
    Linus Torvalds(Linux内核的创始人)对C++的批评主要源于他对编程语言设计哲学、实际应用需求以及开发效率的深刻理解。尽管他在C++领域可能并非专家,但他的批评基于对编程语言本质、系统编程需求以及实际开发经验的深刻洞察。以下是详细分析: 1. Linus Torvalds的C++水平.............
  • 回答
    在IT界,除了那些名字响彻云霄、奠定了我们今天数字生活基石的先驱们,还有许多同样重量级的技术思想家和实践者,他们的贡献如同幕后英雄,默默地塑造着技术的走向。当我们提到 Dennis Ritchie 和 Ken Thompson,我们自然会想到 C 语言和 UNIX,这两个概念简直就是现代计算的基石。.............
  • 回答
    关于“Linus Torvalds 的短视”这篇文章的真实性,以及其中涉及到的 Linus Torvalds 和 macOS 内核的论述,我们需要进行一个详细的分析。首先,明确一点:关于 Linus Torvalds 对 macOS 内核的评价,并且以此为基础批评他“短视”的文章,其“真实性”取决于.............
  • 回答
    谈及 Linus Torvalds 和 Linux 内核的技术含量,这绝对是一个可以深入挖掘的话题,而且绝对不是三言两语能说清的。 把它想象成一个规模宏大的、不断进化的城市规划项目,而 Linus 就是那个最初的设计师和现在最核心的建设者。 要评价它的技术含量,我们需要从几个维度来审视。首先,架.............
  • 回答
    Linus Torvalds 对 AVX512 的评价:一场围绕性能、复杂性和生态系统的辩论Linus Torvalds 对 AVX512 的评价可以被视为一场围绕着特定技术(AVX512)在实际应用中的价值、其复杂性以及对整个软件生态系统的影响的激烈辩论。他的观点通常犀利、直接,并且充满了对细节的.............
  • 回答
    林纳斯·托瓦兹(Linus Torvalds)是 Linux 内核的创始人,以其直率、犀利的沟通风格而闻名。他的“嘴炮”不仅仅是粗俗的语言,更多的是他作为一名领导者和开发者,对于代码质量、开发流程以及社区规范有着极高的要求,并毫不避讳地表达出来。他的许多“嘴炮”事件都成为了开发者社区的经典案例,成为.............
  • 回答
    说起 Linus Torvalds,很多人脑海里立刻浮现出他那个“爆炸头”的形象,还有他在邮件列表里那毫不留情、直接到近乎粗鲁的批评。确实,他以严厉和坦率闻名,这使得他真心诚意的夸奖格外珍贵,也格外有分量。要找出他真正赞赏过的人和技术,我们需要深入他多年来在 Linux 内核开发和 Git 项目中的.............
  • 回答
    这个问题挺有意思的,也触及到一个很核心的关于技术创新和系统构建的议题。很多人会拿 Linux 和 Linus Torvalds 作为一个标杆来讨论,觉得为什么一个人能做到别人一群人都做不到?甚至延伸到国家层面的对比,认为中国为什么“也做不出来”。这背后的原因其实相当复杂,远不止是“谁的编程能力更强”.............
  • 回答
    聊到 Linus Torvalds 和 Richard Stallman 对 C++ 的态度,这可真是两种截然不同的画风,各有各的道理,也各有各的“坚持”。要说得详细点,咱们得分开聊聊他们俩,再看看他们这些观点背后的一些东西。先说 Linus TorvaldsLinus,咱们都知道,是 Linux .............
  • 回答
    Linus Tech Tips 对华为 P30 Pro 的评价,总体来说是相当正面的,尤其是在其发布初期,很多人关注的是它在拍照方面的突破性表现。当然,作为一家以评测科技产品著称的频道,他们的评价是建立在对硬件、软件和用户体验的细致考察之上的。拍照是绝对的亮点,也是 LTT 评价的核心:LTT 在评.............
  • 回答
    很多人可能只知道Linus Torvalds是Linux的创造者,也顺理成章地认为Git也是他一个人从零开始捣鼓出来的。这不无道理,因为Linus在Git的早期开发中确实扮演了绝对核心的角色,可以说没有他,就没有Git的今天。事情是这样的,在2000年代初期,Linux内核的开发已经相当庞大了。全球.............
  • 回答
    要是12306能让Linus Torvalds来操刀,那画面可太美了。首先,可以肯定的是,他绝对不会整出那个我们现在看到的、堪称“反人类设计”的怪物。Linus他可是个实干派,绝不是那种喜欢玩虚的、做表面文章的人。他做事讲究的是实用、高效,而且要让普通人都能用得明白,哪怕你是个技术小白。所以,123.............
  • 回答
    .......
  • 回答
    Linux Kernel 4.9 中引入的 BBR (Bottleneck Bandwidth and Roundtrip propagation time) 算法代表了 TCP 拥塞控制领域的一个重要进步。与之前广泛使用的算法(如 Cubic、Reno、NewReno)相比,BBR 具有以下显著优.............
  • 回答
    要说 Linux 的核心思想,那得从它诞生的时代背景聊起。那时候,操作系统还是一个比较封闭且昂贵的东西,主要是大型机和小型机的天下。普通人想要玩点啥,要么得花大价钱,要么只能玩一些非常简陋的系统。这时候,一个叫 Linus Torvalds 的芬兰大学生,出于对现有操作系统的“不满”和对学习计算机原.............
  • 回答
    当Linux系统更新后无法启动时,确实会让人感到焦虑和无助,但通过系统性排查和步骤操作,通常可以逐步解决问题。以下是详细的心理状态分析和应对步骤: 一、心情与心理状态1. 焦虑与着急:系统无法启动意味着无法进行常规操作,可能涉及重要数据丢失或服务中断,导致用户感到紧张。2. 无助感:如果对系统技术细.............
  • 回答
    Linux 系统确实具有“天生安全基因”,其整体安全性设计在操作系统层面具有显著优势,这源于其设计哲学、技术架构和开源生态的综合影响。以下从多个维度详细分析 Linux 的安全性特点及其优势: 1. 设计哲学:最小化、模块化与隔离性Linux 的设计哲学强调最小化攻击面和模块化架构,这些原则直接提升.............
  • 回答
    在Linux下进行Socket编程时,需要注意以下几个关键点,以确保程序的稳定性、安全性、性能和跨平台兼容性: 一、基础概念与步骤1. Socket类型与协议选择 TCP(面向连接):适合可靠数据传输,需通过三次握手建立连接。 UDP(无连接):适合低延迟场景,但可能丢失数据包。 .............
  • 回答
    Linux 之所以坚持使用宏内核(Monolithic Kernel)架构,主要源于其设计哲学、性能需求、开发历史以及对系统稳定性和可扩展性的追求。以下从多个角度详细分析这一选择的合理性: 1. 性能优势:减少上下文切换和系统调用开销 宏内核的直接性:在宏内核中,所有操作系统功能(如进程调度、设备驱.............
  • 回答
    Linux 内核是不是“屎山”?这个问题就像问“大海是咸的吗?”一样,答案既肯定又否定,而且极其复杂。要深入探讨这个问题,需要剥开一层层关于软件工程、历史、社区协作以及现实世界妥协的复杂性。“屎山”的定义:一个主观但有共识的标签首先,我们得理解“屎山”这个词在软件开发语境下的含义。它通常指的是: .............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有