C语言的发明历史

如果说C语言真的撼动了计算机世界,那就不足为奇了。不能低估C语言的影响,因为它完全改变了编程的视角。C语言的诞生是对一种结构化、高效和高级语言需求的直接结果,这种语言能够在创建系统程序时替换汇编代码。总的来说,C语言是由程序员设计的,也是为程序员设计的。

发明背后的策划者

丹尼斯·里奇
丹尼斯·里奇

那么,到底是谁有远见卓识,最终拥有了这样一种多功能编程语言呢?是丹尼斯·里奇。是的,丹尼斯·里奇,他经常被认为是计算机领域最伟大和最有影响力的头脑之一。难怪他被业内人士高度评价为技术开拓者。

里奇出生于纽约的布朗克斯维尔,在新泽西长大;后来,他进入哈佛大学,并于1963年获得物理学学位。里奇的父亲是贝尔实验室的交换系统工程师。里奇职业生涯的大部分时间都是在那里度过的。他的愿景是创造一种可以双重用途的计算机语言:实现程序员的智力水平,并为他们创造一种自由,让他们能够独立地创造和追求自己的爱好。

20世纪60年代末,里奇和他的程序员同事肯·汤普森创建了一个操作系统,该系统可以在当时即将问世的小型机上运行,当时的小型机非常强大。这种努力的结果就是UNIX。尽管UNIX的第一个版本是通用的,但它的特点是笨拙,这主要是因为它是用汇编语言编写的。所以,无论把它放在什么机器上,在内存和词汇方面都有很多限制。1973年,Ritchie和Thomson用自己的C语言重新编写了UNIX,找到了解决这个问题的最终方法。

导致C语言诞生的一系列事件

早期编程语言

早期,CPL或组合编程语言占主导地位;开发它的主要目的是创建一种具有高级、独立于机器编程能力的语言,并允许程序员控制每一位信息的行为。然而,CPL有一个主要缺点;它太大,无法在许多应用程序中使用。后来,在1967年,BCPL或基本CPL被开发为CPL的缩小版本;新的BCPL保留了CPL的基本功能。肯·汤普森(Ken Thompson)进一步开发了B语言,这是BCPL的缩小版。

Multics项目

20世纪60年代,里奇和贝尔实验室(AT & T)的其他几位专业人士一起从事一个名为Multics的项目。这个项目的愿景是为一台可能能被一千名用户使用的大型计算机构建一个操作系统。不幸的是,1969年,贝尔实验室退出了这个项目;显而易见的原因是这个项目不能创造一个经济上有用的系统。因此,公司的员工,特别是Dennis Ritchie和Ken Thompson,不得不寻找另一个项目来工作。

UNIX的发展

布莱恩·w·克尼汉
布莱恩·w·克尼汉

最终,Thompson开始开发一个新的文件系统。他用汇编程序编写,这是DEC PDP-7新文件系统的一个版本。这个文件系统也用于流行游戏《Space Travel》。很快,改进和扩展被添加到新的文件系统中。我们运用了来自Multics项目的大量知识来完成这一任务。在很短的时间内,一个完整的系统就建立起来了。这个系统被Brian W. Kernighan称为UNIX;这个名字是对Multics的讽刺。然而,新系统是用汇编代码编写的。

是什么导致了B语言的产生?

UNIX除了FORTRAN和汇编语言外,还有一个用于编程语言B的解释器。编程语言B是由肯·汤普森在1969-70年开发的。早期,计算机代码是用汇编代码编写的。程序员必须编写很多页的代码来执行特定的任务。然而,使用像B这样的高级语言,只需几行代码就可以执行相同的任务。利用语言B的效率进一步开发UNIX系统。由于B语言的高级别效率,使用B语言可以比汇编语言更快地生成代码。

C语言的终极发展

B语言的一个主要缺点是它不能识别数据类型;一切都用机器语言表达。另一个缺点是B语言没有提供“结构”的使用。正是这些B语言的限制促使Dennis Ritchie开发了一种新的语言。在1971年到1973年期间,Ritchie开发了C语言,保留了大部分B语言语法,并添加了各种各样的内容,如添加数据类型等。它的许多思想和原则不仅来自于早期的语言B,而且也来自于B的祖先BCPL和cpll。C语言拥有大量的高级功能和编写操作系统所需的详细特性。

C语言的伟大

Ritchie开发的C语言的强大和灵活性很快就显现出来了。最终,实际上是用汇编语言编写的UNIX操作系统可能马上被用新的C语言重写;唯一保留的是引导C代码所需的汇编语言。

由于这种语言是一种占主导地位的、强大的和灵活的语言,它的使用立即扩展到贝尔实验室以外的地方;由于它与UNIX的紧密联系以及C编译器的可用性,它迅速在许多大学和学院传播开来。在20世纪70年代末,该语言几乎开始取代当时的著名语言,如ALGOL、PL/I等。世界各地的程序员开始使用它来编写几乎所有类型的程序。

因为这个最终的设计,里奇在1983年获得了图灵奖,1999年和汤普森一起获得了国家技术奖章。

关于C语言的第一本书

与此同时,在20世纪末,Ritchie和他的合作者Kernighan出版并发布了一本关于C语言的短小但非常有用的参考指南“C编程语言1在灵感和实用性方面,该版本仍然受到高度重视。尽管这本书据说是由克尼汉和里奇共同写的,但克尼汉否认了他没有参与C语言开发的说法,这完全是里奇的工作,所有的功劳都归他所有。

ANSI C和ISO C

在相当长的一段时间里,Ritchie所写的书是C语言的标准。然而,不同的组织开始应用他们自己独特的C语言版本,只是略有不同。事实上,这给系统开发人员带来了一个严重的问题。为了解决这一关键问题,ANSI或美国国家标准协会在1983年成立了一个委员会,建立了C语言的标准定义。该委员会在1989年批准了C语言的一个版本,称为ANSI C。几乎每一个现代C编译器都能够遵守所提出的标准。1990年,ANSI C被ISO或国际标准组织认可。虽然正确的术语应该是ISO C,但每个人都叫它ANSI C。

在后来的日子里,UNIX和C都有无数的化身,如Linux、c++、Mac操作系统和iOS。

C语言:程序员的语言

C语言今天仍然很普遍,被广泛使用;难怪它是世界上第二流行的代码。C语言的发展被认为标志着现代计算机语言时代的开始。在成功地综合了那些给早期计算机语言带来严重麻烦的冲突因素之后,C语言成为了一种高效、强大、结构化、更容易学习的语言。这种语言的另一个重要方面是它是程序员的语言。它是由真正的、高效的程序员设计、开发和实现的,反映了他们对编程的热情。C语言的特性经过实际使用过的人的测试、磨练、思考和再思考。其结果是一种所有程序员都喜欢使用的计算机语言。

也许,C语言很快就吸引了很多狂热的追随者。它被程序员社区广泛而迅速地接受。多亏了丹尼斯·里奇,C语言是一种由程序员创造的语言,也是为程序员创造的语言。

作者

6评论

  1. 凯文Zabbo

    我一直认为这个名字并不是源于它的前身,尽管在现实世界中,啤酒通常先于对咖啡因的需求。C不是取自CPL,而是取自必要的医生....呃,程序员需要的SPICE…咖啡因。

  2. 大丰大卫酒店

    请谁能帮我一个电路图和代码的移动信息用汇编语言使用8051族。

  3. 范教授Duc Sinh

    流程图编程中的一个简单点是,我们可以用任何母语进行描述和注释,如法语、日语、汉语、俄语、英语、越南语等。我们只需要定义一个通用的流程图结构。目前C语言和其他语言的库是巨大的。例如,我们可以开发一个软件,将流程图编程转换为C语言,并从C语言转换回流程图编程。我认为流程图更容易跟踪逻辑推理路径。

  4. 范教授Duc Sinh

    当我在大学学习时,我们的老师提到流程图是逻辑编程推理的一种方式。我们为什么不在流程图上编程,编写一个软件,将流程图翻译成任何仍在使用的语言?

    • Greenaum

      流程图适用于目的简单的短程序。但对于任何更复杂的东西,流程图将是巨大的。它们也不会告诉你任何关于程序结构的信息,流程图中没有任何东西是你不能从代码中轻易分辨出来的。

      基本上,它们太低级了,太接近代码了,不实用。任何能写出好的流程图的人都能写出好的代码。

      现在还有其他的计划和记录程序的方法。尤其是面向对象编程。程序现在通常被分成称为对象的模块(模块本身可能包含模块)。一个对象已经记录了它的输入和输出,它的功能,如果必要的话,还可能记录了一点细节。

      这个想法是,物体就像一个“黑匣子”。你不知道它是怎么工作的,你也不在乎。您只需按照文档中的描述为其提供输入并获取其输出。对象可以包含数据,也可以包含代码。它有点像C中的结构,带有指针,将它带到螺母和螺栓。

      现代编程涉及到连接对象,使用它们提供的服务。所有这些都需要文档和结构,这样每个人都能理解他们需要什么(同时,他们不需要理解对象的内部工作方式,也可以节省大脑空间)。

      因此,现代软件的文档和计划比简单的流程图更高层次。这是必要的,因为现代软件是如此庞大和复杂!比如说,制作Windows 8的流程图要比编写和销售它花的时间要长!

      • Greenaum

        哦,我应该补充一点……现代软件通常是由团队成员编写的。通常都很小,但也有像微软这样的公司……所以把项目的脑力负荷分成几个部分是至关重要的。同样,员工也可能来来往往。因此,让你的软件部分易于他人使用是很重要的。这就是为什么我们有物体。

        还有代码重用。与其编写一个例程来对特定类型的文件进行排序,为什么不多做一些工作,制作一个通用的排序器呢?这样,未来的项目可以重复使用它,从而节省时间和精力。只要给这个对象一个很好的接口,其他例程就可以调用它。

        Microsoft Windows非常面向对象。这就是为什么,比如说,一个游戏可以使用标准的菜单和对话框,但可以用自定义的按钮(比如,剑或药剂的形状)替换按钮。只需告诉Windows在程序范围内使用自己的特殊按钮绘图代码,而不是标准代码。其他Windows对象将愉快地使用它。你不必知道是什么在使用你的按钮。只要您保持与标准界面相同的界面,一切都可以很好地协同工作。

        这甚至扩展到操作系统,许多对象调用可以转移到使用自定义对象。这就像给程序“剥皮”。添加新功能或更改旧功能都很容易。它允许新技术与现有技术相适应,并被现有技术所使用。

        很抱歉用这样一个讲座来回答一个简单的问题!

Ezoic报告这个广告
Baidu