本文是由O'Reilly的编辑Andy Oram采访Brian Kernighan写成。(Andy参加了Making Software,Beautiful Code等多部著作的编写。)原文发表在O'Reilly Radar。

“柯尼汉和里奇”(K&R)已经成为一个计算机术语,拥有了其独立的意思,甚至脱离了构成该词的词法标记。丹尼斯·里奇两周前不幸去世,享年70岁。我上周五和布里安·柯尼汉谈到了里奇。布里安为O'Reilly出版的Beautiful Code(《代码之美》)写了正则表达式那章,因此跟我算认识了。他说:“我们大家都仍然在依赖着丹尼斯创造出的东西,这一点真是非同凡响。”他还说丹尼斯从不去宣传自己的功绩,只是安静地去做他认为需要做的事情。

过去四十多年来,大家已经花了很多笔墨描述C语言和Unix操作系统的巨大影响,这两种技术都很大程度上源自里奇的工作。由C和Unix提出的诸多重要原则推动了计算机技术的许多重大发展,在这方面大家的著述更是汗牛充栋——关于可移植性,封装,小程序通过管道技术相互协作,偏向用文本形式表示数据,等等。因此,我没有把话题集中在这些大家熟悉的老观点上,而是和柯尼汉谈论了里奇工作的其他一些方面。

C依旧在流传

值得注意的是,Android通过原生开发套件(NDK)增加了对C的支持。虽然其初衷是因为必须这样才能通过OpenGL库(用C写成)提供三维图形,但是那些希望用特定于设备的代码(这也只能是用C写出来)去美化其应用的程序员们是特别爱用NDK的。

苹果的Cocoa和iOS比较直接地具有C语言支持,因为Objective-C代码是可以直接调用C函数的。整个大的“C家族”(包含Objective-C和C++)显然十分兴旺发达,而旧的C也仍然是一门很重要的语言。柯尼汉大方地承认,“不少事情用其他语言实现起来更好”,但是在底层编程的“效率和表达性”方面,C还依然是技压群芳。

里奇创造C语言是想着硬件的,其目的是在尽可能高效地访问硬件的条件下,还要保有汇编语言所缺乏的可读性和可移植性。因此,至今C还用于嵌入式系统和其他需要引用硬件端口和特定内存位置的代码中,就不足为奇了。不过,C还极其适用于需要进行位级别操作的代码。最后,C还依旧是那些需要快速响应的应用的第一选择,所以能看到,每个现代的脚本语言都有某种C的网关,程序员遇到某些操作还依然需要求助于C。自然,如果你在你最爱的脚本语言里使用了printf或cos等函数,极有可能你是站在巨人的肩上,使用了别人已经为你写好了的C库函数。

柯尼汉告诉我说,里奇始终意识到使用最少资源的好处。他当年所做的很多事情都是对当时使用的同类系统的反思,比如与肯·汤普森发明Unix就是对Multics操作系统的反思,C语言则是对Multics用的PL/1的反思。而EPL、Bliss尤其是BCPL则对C语言有着更多积极的影响。这些促使C语言取得成功的因素不仅启发了后来的其他语言和系统,而且也使C语言能继续和后来的新语言和系统并驾齐驱。

Unix之后,里奇在Rob Pike的Plan 9系统上做了不少工作。他不仅完全使用这个操作系统,而且还亲自写代码,并在贝尔实验室帮助管理这个项目。

约束

20世纪70年代的计算受到当时条件的严重制约,简直不堪想象。柯尼汉说里奇和汤普森设计Unix时只能让它运行24 000字节。类似的约束无所不在:磁盘空间、带宽(网络才刚发明),甚至I/O设备。Unix的命令和输出都十分简短,这是根据所用的打印机做的预计,为了在使用的时候可以省纸。

不过那时这么做也还凑合。文件名可以限定不超过14个字符,因为程序不能分成太多个小文件,整个工作最多只能有几百个文件。不允许运行多于32 768个进程,系统也只能监听1024个以内的传入连接。Unix对于时间的定义很快就总出问题,因为有些Unix程序会需要记录超过2038年的秒数,而且经常需要用少于1秒的粒度来计量时间。

不过柯尼汉指出,把东西限定在一个字长(对于里奇用的PDP-11就是16位)也有好处,就是减少了复杂度,从而也减少了出错的机会。如果想要在一个目录下容纳很大量的文件,就必须为文件设计一个复杂的寻址系统。但这个复杂系统会很耗费资源,因此只能保留简单的老系统,而创建一系列层级,让用户在向目录中增加文件时一级级递增。这样做的话,就很难设计出无错的系统,更别提精简而快速了。

纯粹计算机科学之乐趣

柯尼汉和里奇那本影响深远的著作出版于20世纪70年代,柯尼汉说那时的计算机领域做出点成果还是不难的。也许是因为他们那代人做得太出色了,我们在基础的计算机发展方面已经没有太多可做的事情,今天程序员们关注的焦点都是在上层的不断变化的协议和应用,也取得了丰盛的成果。新的算法还会不断发展,部分归功于多处理能力的增长,尤其是异构处理器的发展。在这样的环境下也需要新的操作系统结构。但是,计算机的主要研究已经从基础的计算机科学转向了应用领域,直接面向现实世界的行为。

我们知道有更多的丹尼斯·里奇成长起来,不过他们已经不再主要从事丹尼斯曾经努力研究过的基础领域。在相当大的程度上,我们可以说他已经完成了他所开创的事业,并且启发了与他同时代的许许多多人。

与柯尼汉谈丹尼斯·里奇相关推荐

  1. 丹尼斯·里奇-c语言之父,Unix之父

    丹尼斯·里奇,全名丹尼斯·麦卡利斯泰尔·里奇.C语言之父,UNIX之父.曾担任朗讯科技公司贝尔实验室下属的计算机科学研究中心系统软件研究部的主任一职.1978年与布莱恩·科尔尼干(Brian W. K ...

  2. c语言编译器 控制unix 故事,互联网发展史人物篇:布莱恩·克尼汉(Brian Kernighan)——Unix和C语言背后的巨人...

    选择什么教材来学习C语言? 上一篇文章我们讲到C语言的发明人丹尼斯·里奇(Dennis Ritchie),他于1972年左右发明了C语言,C语言里的时间/日期计算起点,有个unix timestamp ...

  3. Hello, World! 发明者布莱恩·W.克尼汉的传奇人生

    "Hello, World!" 这句简单英文,对于大部分计算机行业外的人士来说只是"你好,世界!",而对于计算机行业的人士来说,"Hello, Wor ...

  4. 【荐读】Hello, World! 发明者布莱恩·W.克尼汉的传奇人生

    点击上方"机器学习与生成对抗网络",关注星标 获取有趣.好玩的前沿干货! 注:拉至文末,有送书活动!!! "Hello, World!" 这句简单英文,对于大部 ...

  5. 记:丹尼斯·里奇(Dennis Ritchie)

    文章转载来源:http://www.dotcpp.com/wp/77.html 丹尼斯·里奇被誉为 " C语言之父 ",他在生前与贝尔实验室的合作伙伴肯·汤普森 ( Ken Tho ...

  6. 缅怀伟大程序员----丹尼斯·里奇(Dennis Ritchie)

    2011年的10月,世界IT业的灰色10月.两位IT巨星离开人间.一位是改变IT应用的苹果公司CEO史蒂夫·乔布斯(Steve Jobs):一位是改变系统和编程语言的丹尼斯·里奇(Dennis Rit ...

  7. 保持简单----纪念丹尼斯·里奇(Dennis Ritchie)

    丹尼斯·里奇对人类的贡献,被大大低估.此时此刻,全世界几十亿人正在使用的几百亿件电子产品,里面的软件最终都可以追溯到他的智力贡献. ================================== ...

  8. 计算机传奇人物之丹尼斯·里奇

    尼斯·里奇,C语言之父,UNIX之父.曾担任朗讯科技公司贝尔实验室 下属的计算机科学研究中心系统软件研究部的主任一职.1978年与布莱恩·科尔尼干(Brian W. Kernighan)一起出版了名著 ...

  9. 反思:乔布斯和丹尼斯·里奇的去世 C语言之父Dennis Ritchie辞世

    C语言发明人之一 Dennis Ritchie 北京时间10月13日上午消息,据国外媒体报道,美国著名计算机专家.C语言发明人之一Dennis Ritchie已于10月9日去世,享年70岁. Denn ...

  10. C语言之父,UNIX之父丹尼斯·里奇去世 享年70岁

    [caption id="attachment_84" align="alignleft" width="278" caption=&quo ...

最新文章

  1. Could not download lint-gradle.jar (com.android.tools.lint:lint-gradle:26.4.
  2. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
  3. 每日一皮:“快准恨”的程序员叠衣法,还不快学起来?
  4. 【路由交换实验】OSPF
  5. Java读取xml文件的四种方法
  6. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
  7. 程序代码错误检测_错误检测代码
  8. 使用证书登陆Linux服务器
  9. 豆瓣9.0,35万读者“搜不到信息”的神秘作者,我们帮你找到了
  10. 深入分析Cocos2d-x 2.0中的“纹理”和精灵-沈大海cocos2d-x教程20
  11. 互联网运营数据分析(2):转化分析
  12. H3C Telnet 配置(利用Windows10 cmd)
  13. win、linux下tomcat内存的修改
  14. 因子分析python代码_用Python实现因子分析
  15. 3Ds max彻底卸载方法
  16. github访问加速
  17. USGS下载LANDSAT5 2级别 影像问题
  18. ✖ subject may not be empty [subject-empty]
  19. 中断处理过程示意图_中断服务程序流程图
  20. CSDN云IDE怎样克隆代码

热门文章

  1. 抖音广告怎么投放【抖音广告投放教程】
  2. 游戏毕业设计参考文献合集
  3. 网上评卷系统连接不到服务器,在网上阅卷系统过程中可能存在的问题及解决方法...
  4. SQL 数据库清理数据库日志
  5. 解决Mac版 snipaste 不在菜单栏显示,无法修改快捷键
  6. mysql课程设计论文_课程设计项目源码,课程设计毕业设计项目,计算机毕业设计网 - 代码货栈...
  7. ERP生产线管理系统 with WAMP
  8. 算法数据结构 | 只要30行代码,实现快速匹配字符串的KMP算法
  9. MATLAB去除人声
  10. html在线画板代码,html5在线画板