Linus:C++是一种糟糕的语言

本文内容摘自http://blog.csdn.net/turingbook/article/details/1775488程序员

 

C++是一种糟糕的(horrible)语言。并且由于有大量不够标准的程序员在使用而使状况更糟,以致于极容易产生彻头彻尾的垃圾(total and utter crap)。老实说,选择C就是为了把C++程序员踢出去。……我有这样的结论,任何喜欢用C++而不是C开发项目的程序员可能都是我但愿踢出去的人,省得他们来搞乱我参与的项目。C++会致使很是很是糟糕的设计选择。大家这些C++程序员老是一上来就用语言的那些"漂亮的"库特性好比STL、Boost和其余彻头彻尾的垃圾,这可能对大家的程序有所"帮助",可是却会致使:算法

——当库没法工做时无穷无尽的折磨(别跟我说什么STL尤为是Boost很稳定并且可移植性很好,那全是屁话,并且一点都不好笑)shell

——低效的抽象编程模型,可能在两年以后你会注意到有些抽象效果不怎么样,可是全部代码已经依赖于围绕它设计的‘漂亮’对象模型了,若是不重写应用程序,就没法改正。数据库

 

也就是说,使用优秀的、高效的、系统级的和可移植的C++的惟一方式,最终仍是限于使用C自己具备的全部特性。项目限制只用C,意味着参与的人不会捣乱,也意味着会获得许多真正懂得底层问题,而不会折腾那些白痴"对象模型"垃圾的程序员。编程

因此,我很抱歉,可是对于Git这样效率是主要目标的软件,C++的所谓优势只是巨大的错误。而咱们将看不到这一点的人排除在外却成了一个巨大的附加优点。数据结构

若是你想要用C++写的版本控制系统,去玩Monotone吧。他们确实使用了"真格的数据库",使用了"漂亮的面向对象库"、使用了"漂亮的C++抽象"。但是说老实话,全部这些对某些计算机专业人士而言富于吸引力的设计决定,其最终结果确是一堆可怕、难以维护的垃圾。数据结构和算法

事实上,Git比其余软件配置管理软件都要好,而好的品味(taste)和C正是缘由之一。说得更具体一些:编程语言

——简单和清晰的核心数据结构, 很是精益(lean)且颇具雄心的代码管理着它们,将”简单胜于花哨”这一方法发挥到极致。
——有意识地不抽象数据结构和算法,由于它们偏偏是Git核心的所有要素(whole point)。ide

若是你想用更花哨的语言,C++绝对是最糟糕的选择。若是想要真正的高级特性,那就选择有垃圾回收或者好的系统集成的,而不是既缺少C的简约(sparseness)又缺少C的直接并且没有重要概念的高层 绑定(high-level bindings to important concepts)的东西。优化

一言以蔽之,C++正处在困境当中,它既没法帮助原型化或者简单的GUI编程足够简化从而真正可用,又 不是C那样积极地鼓励你使用简单和直接的语言构造的精益系统编程语言。

好的品味永远不会过期。将C与汇编语言相提并论,偏偏说明你对本身所讨论的问题缺少起码的概念(don't have a friggin idea)。"

字符串/内存管理根本可有可无。仍是去看看源代码吧(我敢打赌你没有看过)。这不是重要的部分,并且也不复杂。惟一真正重要的部分是设计。有些部分之因此是用 "原型化语言"编写,偏偏是由于它们不是核心部分,并且会被C慢慢地替换掉。C++可没有办法替换shell脚本或者Perl代码。并且C++也没办法让真正核心的部分变得更好。

C在不少方面都远远优于C++(更优于C#),包括可移植性,还有接口和低层支持。

你固然能够用任何语言编写糟糕的代码。可是,有些语言,尤为是带有一些心理(mental)包袱的语言自己就很是糟糕。你这样的新手跑来指出一些绝对可有可无的补丁特性(此处应该指C++对C的加强特性),用它们做为一种语言优越的论据(这些东西语言原做者都不喜欢),这一事实自己偏偏说明你满脑子都是糊涂概念,应该好好醒悟一下了。

对于Git核心代码真正重要的,是诸如这样的事情:编写本身的对象分配代码,使内存占用尽量小,从而可以高效地记录百万对象的标志。这其实是为树形关系的多个对象编写本质上很是优化的分析程序,由于这里没有任何抽象。这绝对是在原始内存字节一级上的。

这些事情可以用C以外的语言编写吗?固然能够。可是那些认为C++字符串处理这样的高级特性很重要的人确定是写不出来的。

事实上,这正是C擅长的事情。不只指语言自己,还包括一种必需的心态(mentality)。C最大的优势之一,就是它不会使你认为程序是什么高层的东西。正是后一种心态会使你明显偏向其余语言,但实际上从Git的角度看来,所谓“高层”偏偏是错误的。

相关文章
相关标签/搜索