读Linus Torvalds发表批评C++的文章和孟岩BLOG回帖有感

本文探讨了Linus Torvalds对C++的批评,他认为C++的复杂性可能导致代码质量下降,而孟岩则认为C++在特定场景下是支持其他语言的角色。文章指出,选择编程语言应考虑具体应用环境,Linux操作系统开发更适合C语言。此外,社区不应因个人喜好而左右开发方向,应尊重权威并遵循领域内的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
Torvalds可能是愤然于缺乏规范开发的程序员所写的糟糕代码进而迁怒于C++,并且积怨可能从他从前用C++开发Linux失败开始。
我想说的是抛开你具体的应用环境来讨论语言啊,设计方法啊什么的没什么实际的意义。我们都是为了更好的做好自己的事,编程不是什么大不了的事,也不高深。但究其具体应用就有不同的选择。OO很好,但不是放之四海而皆准的万能之法。对于孟岩的说法我比较认同:“C++语言主要是用来支持别的语言的”,他所处的位置本身就是一个比较中间的位置,偏底层他并不像C那样简约直接,论OO他并不像JAVA那样完全的面向对象,所以说他是比较中间的语言比较好一点或说是支持其他语言的语言更好些。软件开发过程是分层次的,而且根据您的应用领域层次的定义,开发语言的选择都是不同的。没有一个铁的定律说某一层就用XXX语言就最好,别的都白扯,这是一种错误的想法。抛离具体应用而论没什么意义。Torvalds是开发Linux的,一个操作系统,当然要用能开发出高效,简约,直接的代码的语言来开发,所以在他尝试用C++开发失败后他选择了C,然后他比较满意用C开发,并且C也比较适合开发,于是他觉得C好,这是因为他的应用环境应用层次是操作系统开发,脱离了这一具体的应用领域或环境,你干嘛不和JAVA比较呢,怎么老揪C和C++的区别优异呢。Torvalds在系统级开发中最终认可或说回归了C语言是因为他想更好的做好他的事情,编写出更好的Linux OS。然后根据自己多年的经验和多年来看到Linux贡献者中不规范的C++开发者给Linux发展带来的影响(估计是维护规范他们开发的东西或版本控制的时候带来的维护负担太重)发表了自己的看法,这没什么。言论是自由的,导致一个人在特定的场合发表一些言论的因素有很多,没必要加以指责批评。我就看张三不顺眼你能把我怎么样,你非的要跟我讲道理让我喜欢他?

还有就是说到现在Linux OS已经成为了一个大家共同开发的东西,不应该以权威的喜恶来左右。我想说,我们还是应该相信权威的,起码在这一领域他是创始人,层次本身就比我们高,同时他也在努力使这一领域健康良性的发展,所以我们在没达到他那个层次的时候没什么资格来决定这一领域的命运。电影明星喜欢的人很多,这当中也不乏优秀之人,但电影明星适合当国家领导人么?难道就因为喜欢他的人比较多就让他来决定国家命运?

下面是我觉得回帖中比较好的摘录如下:

C语言的简单性恰恰是一种优势。C++的复杂性会使很多人误用。而C语言的简单性,一般情况下都会迫使你使用比较简单的设计,例如C语言不能在语言层次上提供类继承的方式,那么它会迫使你更多的使用组合,而不是继承这样的重用方式,即使你可以用函数指针表的方式实现多态,也不可能象C++那样把类层次扩展了一层又一层,在c语言中,函数指针表的在c语言中以更接近于定义接口的方式被使用。这些都是C语言的简单性迫使你做出的选择。
而很多C++的程序员却在C++的丰富的特性前面忘了简单性原则的重要性

Linux从来都是C的世界,可以说是历史原因,也可以说是Unix文化C++从来都不是Unix下编程必须的,MFC好多年来都是最庞大的C++库(现在是不是我不知道)如果你用Windows下的VC开发,你应该知道MFC中的很多类只是API的简单封装(我估计MS开始也不敢封装的太高级),而这些API原型都是C风格的(我没看过源码,不敢说一定就是C而不是C++写的)我猜想他们是C写的,但是让最终用户通过直接调用API来写GUI程序,代码量是很恐怖的,所以现在我始终认为,C++在Windows平台上的使用,就是简化编程,和提高编程效率而已,而MS在Windows下编程之所以敢大量使用C++完全是因为底层API提供了安全可靠的系统支撑!

让"最终用户通过直接调用API来写GUI程序" 代码量也没那么恐怖, 写好一个框架, 填代码就是了, c++对类的封装(尤其是MFC)能"简化编程","提高编程效率"简直就是一个笑话


C用来实现封装性很简单。比较难以用C直接实现的是继承和多态。不过在现实中继承和多态真的是可以用的少之又少的。很多所谓的继承和多态的“设计”完全可以用基于策略的方式来完成。基于策略的方式在C里用函数指针或者表驱动完全可以做到。很多不得不用C++高级特性的“设计”,其实从一开始就使用Java甚至script更容易做到。OO并不是模块化和可维护性的唯一可行方式,甚至不是最优的方式。而C++的OO实现也不是很好的实现。

马克思说:“人类和动物的区别在于会制造和使用工具”
大大们发明了计算机,你可以不用打算盘了
大大们发明了键盘,你可以不用在纸条上打孔了
大大们发明了汇编,你不用拿表查01了
大大们发明了C,你不用了解太多寄存器了
大大们发明了C++, 你发现写代码简单了
大大们发明了java,你发现写代码人效高了
大大们发明了C#,你发现用C++的人越来越少了
大大们用C++尝试写操作系统,发现不好用,说C++写操作系统不好用。
大大们说我们都用C语言吧,大家说,我们不是你,明天还要交活呢,等我们用C语言写个ERP,人家都出

下一代了。

用个比喻:我们村里人用锄头锄地,用爬犁翻地。爬犁有爬犁的用途,锄头也不能丢,因为爬锄不了地。

最近招聘vc的开始多了,原因是没有人了。说话的人多,坚持的人少。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值