当前位置: 首页 > 科技观察

C语言简史

时间:2023-03-20 18:12:41 科技观察

这是我对《C 程序设计语言The C Programming Language》一书的合著者BrianKernighan(与丹尼斯里奇)的采访,我们在其中谈论了C语言及其50年的历史。由两位作者编写的原始C语言编程指南,大约在1978年。C语言将在2022年迎来50岁生日。然而,尽管它的历史悠久,但在“许多调查”中,C语言仍然是“使用最多”的编程语言之一。流行的编程语言”。例如,您可以查看TIOBE指数,它跟踪不同编程语言的流行程度。许多Linux应用程序都是用C语言编写的,例如GNOME桌面。我采访了BrianKernighan,以了解有关C语言及其历史的更多信息。他(与丹尼斯·里奇)是《C 程序设计语言The C Programming Language》一书的合著者。C是怎么来的?C是从一个以系统编程为目标的语言家族演变而来的,它正在编写类似编译器、汇编器、编辑器,最终是操作系统的程序。MIT与贝尔实验室有一个Multics项目,计划用一种高级语言编写系统的所有部分(1965年的新想法)。他们打算使用IBM的PL/1,但是非常复杂,承诺的编译器也没有及时交付。在与一个叫做EPL的子集(由贝尔实验室的DouglasMcIlroy设计)进行了短暂的交流之后,Multics转向了BCPL,一种更简单、更Clean的语言,我记得他在麻省理工学院访问。当KenThompson开始研究后来成为Unix的东西时,他创建了一种基于BCPL的更简单的语言,他称之为B语言。1969年,他为支持第一个Unix原型的PDP-7计算机实现了语言。BCPL和B都是“无类型”语言。也就是说,它们只有一种数据类型,整数。DEC的PDP-11计算机于1971年左右投入使用,它采用了第一个真正的Unix系统。PDP-11支持多种数据类型,特别是8位字节和16位整数。因此,同时支持多种数据类型的语言是更好的选择。这就是C语言的由来。C在贝尔实验室和早期版本的Unix中是如何使用的?C最初仅在Unix上使用,尽管一段时间后也出现了用于其他机器和操作系统的C编译器。它主要用于系统级编程,涵盖了很多有趣的领域,并且有很多系统用于管理AT&T电话网络的运行。在贝尔实验室用C编写的最有趣的程序是什么?可以说,最有趣、最令人难忘和最重要的C程序是Unix操作系统本身。1971年的第一个Unix版本是用PDP-11汇编语言编写的,但是到了1973年左右的第四个版本,我们用C语言重写了它。这很关键,因为这意味着操作系统(及其所有支持软件)可以本质上是重新编译以移植到不同类型的计算机。这在实践中并不是那么简单,但也不远了。您与DennisRitchie合着了《C 程序设计语言》一书。那本书是怎么来的,你和丹尼斯是如何一起工作的?我曾经写过一篇关于B的KenThompson教程,以帮助人们快速掌握它。当它可用时,我会将其升级为C语言的教程。过了一段时间,我说服了丹尼斯和我一起写一本C语言的书。基本上,除了系统调用章节,大部分教程都是我写的,Dennis写了参考手册,非常好。然后我们迭代修改,让教程部分更流畅。参考手册几乎保持不变,因为它从一开始就写得很好。这本书是用troff格式化程序格式化的,它是Unix上的众多工具之一,我完成了大部分格式化工作。C什么时候成为贝尔实验室以外的其他程序员曾经使用过的东西?我真的记不太清楚了,但我认为大约是前五六年,C主要与Unix一起开发。随着其他操作系统上编译器的发展,它开始传播到Unix以外的系统。我不记得我们什么时候意识到C和Unix产生了真正的影响,但一定是在70年代中后期。为什么C语言成为如此有影响力的编程语言?早期的主要原因是它与Unix的联系,后者在世界范围内迅速传播。如果你使用Unix,你就用C编程。后来,C语言传播到不一定运行Unix的计算机,这主要是因为SteveJohnson编写了PortableC编译器。在工作站领域,SunMicrosystems、MIPS(后来的SGI)等公司因Unix和C的结合而获得成功。IBMPC出现得稍晚,大约在1982年。后来C语言成为标准编程语言之一。在MS-DOS和Windows下。今天,大多数物联网(IoT)设备都使用C语言。今天,在它诞生大约50年后,C仍然是一种流行的编程语言。为什么它仍然如此受欢迎?我认为C在效率和表现力之间取得了平衡。在早期,效率确实很重要,因为与我们今天使用的计算机相比,计算机运行缓慢且内存非常有限。C语言非常高效,因为它可以编译成高效的机器代码,而且它非常简单,人们可以轻松学习如何编译它。同时,它具有表现力、易写性、紧凑性。没有一种语言能做到这一点,至少在我看来是正确的。这些年来,C语言是如何发展和变化的?适度,我想,但我没有太注意C语言标准的发展。C已经发生了很大的变化,以至于80年代编写的代码需要一些前期工作才能编译,但这主要与类型有关。较新的功能,如复数,可能会有用,但对我来说不是,所以我不能发表明智的评论。用C最容易解决哪些编程问题?好吧,它是一门适用于任何事物的伟大语言,但是在拥有充足的内存和处理能力的今天,大多数程序员都可以使用Python这样的语言来进行内存管理和处理其他更高级别的构造。C语言仍然是底层编程的不错选择,因为充分利用CPU周期和每个字节进行底层编程仍然很重要。C语言影响了其他编程语言,包括C++、Java、Go和Rust。您如何看待这些编程语言?几乎每种语言在某种程度上都是对其前身的反应。简而言之,C++添加了控制信息访问的机制,因此对于真正的大型程序来说它比C更好。Java是对C++复杂性的反应。Go是对C++的复杂性和Java的局限性的反应。Rust尝试解决C(可能还有C++)中的内存管理问题,同时接近C的效率。它们都带来了某些积极的特性,但不知怎的,没有一种能被完全满足,所以总会有更多的语言,反过来又对以前的语言做出反应。与此同时,在大多数情况下,旧语言继续存在是因为它们做得很好并且具有嵌入式基础,旧语言可以完美地使用并用新事物重新创建。实施是不可行的。感谢Brian与我们分享C编程的伟大历史!