编程语言发展简史
- 一、编程的起源
- 二、第一代计算机语言——机器语言
- 三、二代计算机语言汇编语言
- 四、第三代计算机语言-高级语言
-
- 2022年4月[TIOBE编程列表](https://www.tiobe.com/tiobe-index/)
- 高级语言的分类:
-
- 1.解释型和编译型
- 2.面向过程和面向对象
一、编程的起源
??编程可以追溯到提花机的使用。当时,中国古代人开发了花本提花机,以设计丰富多彩的服装图案。编织工人提前在花本上精心编织和设计编织图案。编织花的过程可以看作是程序员的编程,编织线可以看作是当前的编程语言。花是相应的编程程序,编织工人是当前的程序员。
??它出现在东汉时期,又称花楼,是我国古代织造技术最高成就的代表。它用线制花本储存提花程序,然后用曲线牵引经丝开口。它是一套在提花机上存储图案信息的程序。它是由代表经线的脚线和代表纬线的耳线根据图案的要求编织而成的。明代宋应星在《天宫开物》中写道:所有的工匠都有最精致的计划。画家首先在纸上画什么颜色,画家根据丝线绘画量度,计算尺寸。
??1679年,德国数学家 (Gottfried Leibniz)发明了二进制,对其进行了系统深入的研究,完善了二进制。莱布尼茨是第一个接触中国文化的欧洲人之一。他曾经从丝绸之路上的一些教士那里接触过中国文化。法国汉学大师若阿基姆·布韦(Joachim Bouvet,1662-1732年,汉名白晋向莱布尼茨介绍了《周易》和八卦。在莱布尼茨看来,阴和阳基本上是他的二进制中文版。他曾断言:二进制是世界上最普遍、最完美的逻辑语言。如今在德国图林根,着名的郭塔王宫图书馆(Schlossbibliothek zu Gotha)莱氏手稿仍然保存在里面,标题是1和0,所有数字的神奇起源。”
(早期计算机的存储介质) ??1725年,法国织布工人 (Basile Bouchon) 根据中国花本提花机的原理,发明了穿孔纸带提花机,用纸带凿孔控制顶针穿透,而不是花本上的经线组织点,但没有取得多大成功。1728年和1745年沃康松改进后,法尔孔可编织600针大图案织物。 ??布乔是管风琴制造商和织布工的儿子,他熟悉手摇风琴中使用的旋转钉筒。他知道,在设计应用于实际非常昂贵的音乐自动机气缸之前,音乐自动机气缸的信息内容首先在纸上列出。当时的做法是在包裹在圆柱体周围的纸质图案上钻孔,表明工匠必须在圆柱体上钻孔以安装销钉。布乔有一个很棒的观点,那就是穿孔纸的布局已经包含了放在圆筒上的信息,所以他得出结论,穿孔纸可以编码图案信息。 ??后来,布乔将音乐自动机的概念应用于重复的织布任务,并部分自动化了牵伸织机的繁琐设置过程。但布乔的发明并没有取得多大的成功,因为针的数量不足以编织大型设计。
??贾卡(Joseph Marie Jacquard)这是一名法国织布工。虽然他没有接受过正式的教育,但在1799年,贾卡制造了一套完整的纹板传动机构,配备了更合理的脚踏机提花机,只有一个人才能编织 600针以上的大图案。 ??这种提花机在1801年巴黎展览会上获得了青铜奖章。其机构特点是用提花板代替纸带,即穿孔卡,通过传动部件驱动一定顺序的顶针钩,根据图案组织协调动作,改善通过线编织图案。 ??1860年后,它被改用蒸汽动力代替脚踏传动,成为自动提花机。自动提花机后来在世界各地广泛传播,并改用电机启动。为了纪念贾卡的贡献,这台机器被称为。
??1837年,巴贝奇提出了分析机(机械通用计算机)直到巴贝奇去世的1871年,由于种种原因,这台机器才真正制造出来。它使用打孔纸带输入,采用最常见的十进制计数。分析机采用的一些计算机理念已经延伸到今天,其中包括存储和研磨在内的分析机非常类似于今天计算机中使用的内存和处理器,以及打孔卡的输入和输出。
??巴贝奇的一个朋友,(Ada Lovelace,英国诗人拜伦的女儿,数学家,世界上第一个公认的程序员)1842年和1843年,她花了9个月的时间翻译意大利数学家路易吉·米那比亚留下的备忘录是巴贝奇最新的计算机设计书籍(即分析机概论)。在这篇翻译中,她添加了许多注释,详细描述了伯努利数的计算方法,被认为是世界上第一个计算机算法程序。
??虽然霍列瑞斯发明的不是通用计算机,但除了统计数据表,它几乎没有其他用途,但是,。在未来的计算机系统中,数据处理已经发展成为计算机的主要功能之一。
(Konrad Zuse,数字计算机之父)继电器为逻辑元件的计算机是世界上第一台二进制计算机,可以从穿孔卡板上读取指令。 ??1942年,朱斯在紧张研究的间隙里,他写作了世界上第一个下国际象棋的计算机程序。1948年发表了他的设计,以提高机器的效率。Plankalkül编程语言论文使楚泽成为计算机语言的先驱。然而,在他的一生中,他未能实现这种语言,由于第二次世界大战的影响,他最初的贡献(发明的Z系列计算机)也被孤立,失去了开发第一台电子计算机的机会。
??阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常简称ABC计算机)是世界上第一台电子数字计算设备。该计算机于1937年设计,不可编程,仅用于解决线性方程组,并于1942年成功测试。然而,用纸卡读写器实现的中间结果存储机制是不可靠的。在发明者约翰·文森特·阿塔纳索夫因二战任务离开爱荷华州立大学后,计算机工作没有继续。ABC计算机创造了现代计算机的重要元素,包括二进制算术和电子开关。但由于缺乏通用性、可变性和存储程序的机制,与现代计算机区分开来。
??在第二次世界大战期间,开发电子计算机的想法出现了。当时,激烈的战争正在蓬勃发展,各国的武器装备仍然很差。主要的战略武器是飞机和大炮,因此开发和开发新的大炮和导弹是非常必要和紧迫的。为此,美国军事部在马里兰州阿伯丁设立了弹道研究实验室。 ??美国军方要求实验室每天为陆军炮弹部队提供6个射表,以识别导弹的开发。事实上,每个射表计算数百个弹道,每个弹道的数学模型是一个非常复杂的非线性方程组。这些方程组无法找到准确的解决方案,因此只能通过数值方法近似计算。 ??但即使用数值方法进行近似解释也不是一个容易的事!按当时的计算工具,实验室即使雇用200多名计算员加班加点工作也大约需要二个多月的时间才能算完一张射表。在“时间就是胜利”的战争年代,这么慢的速度怎么能行呢?恐怕还没等先进的武器研制出来,败局已定。 为了改变这种不利的状况,当时任职宾夕法尼亚大学莫尔电机工程学院的莫希利
(John Mauchly)于 1942年提出了试制第一台电子计算机的初始设想——“高速电子管计算装置的使用”,期望用电子管代替继电器以提高机器的计算速度。 美国军方得知这一设想,马上拨款大力支持,成立了一个以莫希利、埃克特(John Eckert)为首的研制小组开始研制工作、预算经费为15万美元,这在当时是一笔巨款。然而直到二次大战结束后这款电子计算机才被研制出来。1946年,世界上第一台现代通用电子数字计算机 ,在美国宾夕法尼亚大学诞生。 ENIAC长30.48米,宽6米,高2.4米,占地面积约170平方米,30个操作台,重达30英吨,耗电量150千瓦,造价48万美元。它包含了17,468根真空管(电子管)7,200根晶体二极管,1,500 个中转,70,000个电阻器,10,000个电容器,1500个继电器,6000多个开关,计算速度是每秒5000次加法或400次乘法,是使用继电器运转的机电式计算机的1000倍、手工计算的20万倍。
二、第一代计算机语言——机器语言
机器语言,即第一代计算机语言。机器语言是用二进制代码(0和1)表示的计算机能直接识别和执行的一种机器指令的集合,能够直接被机器执行。早期的程序设计均使用机器语言,程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
。操作码规定了指令的操作,是指令中的关键字,不能缺省。操作数表示该指令的操作对象。
1.能够被机器直接运行 2.灵活 3.速度非常快
1.不便于阅读 2.难以记忆 3.很难确保程序的正确性、高效性 4.争对某一种特定的计算机,移植性差,重用性差
下面是机器语言指令的部分举例:
//指令部分范例
0000 //代表加载(LOAD)
0001 //代表储存(SET)
...
//暂存器部分范例
0000 //代表暂存器A
0001 //代表暂存器B
...
//内存部分范例
000000000000 //代表位址为0的内存
000000000001 //代表位址为1的内存
000000001000 //代表位址为16的内存
...
//集成范例
0000, 0000, 000000001000 //代表LOAD A, 16
0000, 0001, 000000000001 //代表LOAD B, 1
三、第二代计算机语言——汇编语言
机器语言由纯粹的0和1构成,十分复杂,不方便阅读和修改,也容易产生错误。程序员们很快就发现了使用机器语言带来的麻烦,它们难于辨别和记忆,给整个产业的发展带来了障碍,于是汇编语言产生了。 汇编语言, 即第二代计算机语言,用一些容易理解和记忆的缩写单词来代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表减法操作指令,以及"INC"代表增加1,"DEC"代表减去1,"MOV"代表变量传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。 但计算机的硬件不认识字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数或机器语言。因为汇编语言只是将机器语言做了简单编译,并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器语言优秀的执行效率,因为他的可阅读性和简便性,汇编语言到现在依然是常用的编程语言之一。 汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
1.可以轻松的读取存储器状态以及硬件I/O接口情况 2.编写的代码因为少了很多编译的环节,可以能够准确的被执行 3.作为一种低级语言,可扩展性很高
1.因为代码非常单调,特殊指令字符很少,所以造成了代码的冗长以及编写的困难 2.汇编仍然需要自己去调用存储器存储数据,很容易出现BUG,而且调试起来也不容易 3.就算完成了一个程序,后期维护时候也需要耗费大量的时间。 4.因为机器的特殊性造成了代码兼容性差的缺陷,依赖于特定的计算机硬件。
下面是汇编语言的一些符号命令:
mov eax, 3 //将3存入EAX寄存器(3是一个立即数)。
mov bx, ax //将AX的值存入到BX寄存器。
//ADD指令用来进行整形数据的相加。
add eax, 4 //eax = eax + 4
add al, ah //al = al + ah
//SUB指令用来进行整形数据的相减。
sub bx, 10 //bx = bx - 10
sub ebx, edi //ebx = ebx - edi
//INC和DEC指令将值加1或减1。因为1是一个暗指的操作数,INC和DEC的机器代码比等价的ADD和SUB指令要少。
inc ecx //ecx++
dec dl //dl--
四、第三代计算机语言——高级语言
在编程语言经历了机器语言,汇编语言等更新之后,人们发现了限制程序推广的关键因素——。需要设计一个能够不依赖于计算机硬件,能够在不同机器上运行的程序。这样可以免去很多编程的重复过程,提高效率,同时这种语言又要接近于数学语言或人的自然语言。
FORTRAN语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,直到2022年已有六十六年的历史,但仍历久不衰,。
- 1958年,ALGOL 58诞生
- 1960年,ALGOL 60诞生
- 1966年,ALGOL W出现,碍于调整与改进幅度略显保守,委员会并未以此作为ALGOL 60的后继者
- 1968年,ALGOL 68诞生
1955年,德国的应用数学和力学学会(Gesellschaft für Angewandte Mathematik und Mechanik,) 因力拒IBM在计算机领域的主导地位,特设置一个专责于设计一通用但与计算机无关的算法语言的开发委员会。 1950年代末期,大量的新增计算机语言涌现,而这些新语言大都围绕单个体系结构如UNIVAC计算机、IBM700系列计算机等开发,使不同系统用 户间的交流变得困难。针对这种计算机专用语言大量增多情况,美国一些主要的计算机用户组,在1957年5月10日向国际计算机学会(Association for Computing Machinery,ACM)提交申请,建议研究与开发适用于与计算机无关的科学用程序设计语言。 1957年末,因应在美国涌现多方计算机高级语言,GAMM原小组委员会认为应该包揽美国同道中人而向发出邀请,1958年4月,两个小组正式同意加入这一联合语言设计项目。 1958年5月27日至6月1日,GAMM和ACM各有4人出席在苏黎世举行第一次设计会议,为新语言定下目标。亦因应语言特性,先被命名为国际代数语言(International Algebraic Language,IAL) ,转辗后定名为ALGOL,即算法语言,由此1958年ALGOL算法语言委员会正式成立。 。由于ALGOL语句和普通语言表达式接近,更适于数值计算,所以ALGOL多用于科学计算机。
Pascal由瑞士苏黎世联邦工业大学的Niklaus Wirth教授于六十年代末设计并创立,Pascal基于ALGOL算法语言实现。1966年,WG 2.1工作小组中的Niklaus Wirth与C. A. R. Hoare以ALGOL X为基础作出修改与完善形成ALGOL W,碍于调整与改进幅度略显保守,委员会并未以此作为ALGOL 60的後继者。然而,Niklaus Wirth在史丹福大学,透过他所撰写的PL/360在IBM/360上成功运行ALGOL W。由于Niklaus Wirth对的ALGOL W研发,使得1970年Pascal的诞生。 1971年,Niklaus Wirth以电脑先驱帕斯卡pascal的名字为之命名。Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句。高级语言发展过程中,Pascal是一个重要的里程碑。Pascal语言是第一个系统地体现了E.W.Dijkstra和C.A.R.Hoare定义的结构化程序设计概念的语言。
- 1963年,英国剑桥大学基于推出了(Combined Programming Langurage)语言
- 1967年,英国剑桥大学的 Matin Richards对CPL语言做了简化,推出了 (the Basic Combined Programming Language)语言
- 1969年,美国贝尔实验室的肯·汤普森(Kenneth Lane Thompson),以BCPL语言为基础,又作了进一步的简化,设计出了很简单而且很接近硬件的(取BCPL的首字母),并且用B语言写了初版UNIX操作系统(又叫UNICS)。
- 1972年,美国贝尔实验室的丹尼斯·里奇(D.M.Ritchie )在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是。1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了。
20世纪70年代中期,本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。 1979年,本贾尼·斯特劳斯特卢普(Bjame Sgoustrup)到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。 C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。
- 达特茅斯学院院长、匈牙利人约翰·凯梅尼(J. Kemeny)和数学系教师托马斯·卡茨(Thomas E. Kurtz)认为,像FORTRAN那样的语言都是为专业人员设计,没有办法普及。于是,他们在简化FORTRAN的基础上,在1964年研制出一种“初学者通用符号指令代码”(Beginner’s All-purpose Symbolic Instruction Code),简称
BASIC
。1975年,比尔·盖茨把它成功移植到了PC上。
2022年4月TIOBE编程排行榜
可以看到Python语言已经冲上了第一名,当前比较火热。C语言和Java语言还是那么的稳固,但是都有所下降,其中汇编语言(Assembly Language)在第8名。
高级语言的分类:
1.解释型和编译型
是在运行的时候将程序翻译成机器语言,速度较慢。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,因此效率比较低。 一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言。
解释型语言通常有: 等等
运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用编译型语言。 编译型语言在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。
编译语言通常有:
介于两者直接的语言有:
2.面向过程和面向对象
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。简写为POP。
面向过程语言有:
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
面向对象语言有:
介于两者之间有: