Linux之父话糙理不糙

原创 2007年09月08日 14:33:00
     Linus Torvalds曾经在十多年前尝试用C++来开发Linux内核,由于种种原因,很快失败了。自那时起他就不时表达对C++的不满。刘江blog上的记录的这个事件只是最近的一次而已。尽管言辞激烈,但其实话糙理不糙。

     时至今日,在一般的场合下,C和C++语言的主要用途就是系统级软件的开发。具体地说,C/C++写平台、工具和基础库,支持高层的语言来完成应用逻辑。 在9月份《程序员》杂志上刊登的一篇《微软架构师谈编程语言发展》的文章里,Brian Beckman直截了当地说,C++语言主要是用来开发别的语言的。这话片面一点,如果改成 “C++语言主要是用来支持别的语言的”,那就大体没错了。

     做系统软件开发的时候,重要的是理解系统的运作方式,那些漂亮的抽象手法和高级特性是次要的。

     有一个有趣的现象,不少做系统软件的老手,在用过一段C++之后,又回到C。因为在这个层次上,C++对于C的优势就不突出了。那些高级的抽象结构往往是 不必要的,反而是由于抽象层次的提高,使得开发者要弄清楚“下面实际发生的事情”变得不太容易了。所以很多老手实际上觉得用C语言控制力更强一些,更得心 应手一些。真正的C语言高手,对于语言和编译器都很熟悉了,基本上在写C时候就已经知道编译器优化以后产生汇编代码是个什么样子,甚至可以改变C代码来引 导编译器产生最优化的机器码。而C++的机制很丰富,很多机制是为了满足高层应用和框架的需求而准备的,在这个层次上发挥不出来,反而把清晰性给牺牲掉 了。很多时候,一个简单的语句,到底背后会发生什么,即使是老手也说不清。比如:

     std::string s(“Linux Torvalds");
     std::string scopy = s;

     上面这段代码不过是创建两个内容相同的字符串副本,但是没有任何一个人能够在不了解更多信息的情况下清楚地描述背后所发生的事情,因为不同的STL对于 string的实现方式不同,因此在copy assignment时表现也不同,有的可能是简单地复制字符串对象,有的可能具有ref-counting机制,需要创建对象、设定对象值、增加引用计 数,有的没有考虑线程安全性,有的考虑了线程安全性,还得加锁解锁,对不起,加解锁也还有很多做法。创建新的string对象时,有时还需要调用内存分配 器,而这个东西的实现又五花八门,有的直接new char[],有的从内建的memory pool申请,memeory pool是不是线程安全的?对不起,这次
可能又要涉及加解锁问题。memeory pool会不会已经满了?要不要次第调用new/malloc申请新的内存块?总之,后面的事情够多够复杂,没有相当功力,对平台了解不够深入,很难说出个子午卯酉来。

      一个字符串复制尚且如此,别的高级特性就更不用说了。所以很多人宁可麻烦一点,也不愿意使用C++,这还是可以理解的。

      就我个人来说,我还是愿意用C++的,特别是在C里写一遍又一遍realloc的时候,就想起 string::operator+=()的好处来了。大概是STL给我的印象太深了,写算法程序的时候,不用STL就觉得不爽,一个transform 就可以搞定的事情,非要用for循环,这会让我感觉浑身不自在。所以一般情况下,拿到一个什么问题,我还是会用C++去解决的。对我来说, Torvalds的话其实是很中肯的,即使是用C++,也要尽可能搞清楚其背后发生的事情,这样在写low level程序的时候才会有把握。如果是设计应用级别的程序,就尽可能不用C/C++,把底层的事情都忘掉,专心专意做好应用层的设计才是正道。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux之父炮轰C++:糟糕程序员的垃圾语言

 【图灵图书推荐】Linux程序设计(第3版)  众所期待的程序设计圣经【写在前面】此文贴出后,引起了大家的较多关注,是意料之中的事情。毕竟,C、C++、Linux之父,都是大家最最熟悉的东西。但...
  • turingbook
  • turingbook
  • 2007年09月07日 03:24
  • 319422

Linux之父—托瓦尔兹

托瓦尔兹对成功的独特见解!
  • J_Kang
  • J_Kang
  • 2016年05月05日 21:22
  • 843

Linux之父Linus Torvalds恶评Intel漏洞修复补丁:完全是个垃圾

点击上方“CSDN”,选择“置顶公众号”关键时刻,第一时间送达!图片来源:YouTube2018年1月2日,英特尔曝出的CPU设计漏洞事件一经曝光,就迅速引起业内硬件同行、操作系统厂商、云供应商的迅速...
  • csdnnews
  • csdnnews
  • 2018年01月23日 00:00
  • 2038

Linux之父又骂C++了(一)

  • nanyu
  • nanyu
  • 2010年06月16日 02:07
  • 10855

只是为了好玩-linux之父自传

  • 2017年09月01日 10:55
  • 2.8MB
  • 下载

Linux之父访谈录:设计内核只为了好玩

http://os.it168.com/a2010/0917/1105/000001105175.shtml
  • wishfly
  • wishfly
  • 2010年09月19日 19:05
  • 442

Linux之父话糙理不糙

     Linus Torvalds曾经在十多年前尝试用C++来开发Linux内核,由于种种原因,很快失败了。自那时起他就不时表达对C++的不满。刘江blog上的记录的这个事件只是最近的一次而已。尽...
  • myan
  • myan
  • 2007年09月08日 14:33
  • 85433

linux之父自传

  • 2015年03月18日 16:33
  • 2.8MB
  • 下载

Linux之父话糙理不糙

孟岩的原文===================================================Linux之父话糙理不糙  Linus Torvalds曾经在十多年前尝试用C++来开发...
  • yevv
  • yevv
  • 2007年09月10日 15:16
  • 948

郭德纲家训--话糙理不糙

甲午年,正月初九。我儿子十八了,正所谓成人长大。学名奇临,取奇妙降临之意。后下海,艺名麒麟,乃仿周大师之遗韵。人生一世,极不容易。   登天难,求人更难。黄连苦,无钱更苦。江湖险,人心更险。春冰...
  • luckykapok918
  • luckykapok918
  • 2014年03月25日 22:43
  • 437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux之父话糙理不糙
举报原因:
原因补充:

(最多只允许输入30个字)