编程语言发展简史

  • 一、编程的起源
  • 二、第一代计算机语言——机器语言
  • 三、第二代计算机语言——汇编语言
  • 四、第三代计算机语言——高级语言
    • 2022年4月[TIOBE编程排行榜](https://www.tiobe.com/tiobe-index/)
    • 高级语言的分类:
      • 1.解释型和编译型
      • 2.面向过程和面向对象

一、编程的起源

  编程最早可以追溯到提花机的使用,那时我国古代人为了在衣服上设计出绚丽多彩的图案,研制出了花本提花机。织布工人提前将织布图案精心编织设计在花本上,这个编织花本的过程就可以看作现在程序员的编程,织布线可以看作现在的编程语言,花本就是对应编程出来的程序,织布工人就是现在的程序员。

东汉时期(公元25年—220年),花本提花机开始出现
编程语言发展简史-编程知识网编程语言发展简史-编程知识网编程语言发展简史-编程知识网
  在东汉时期出现了花本式提花机 (即束综提花机),又称花楼,是我国古代织造技术最高成就的代表。它用线制花本贮存提花程序,再用衢线牵引经丝开口。花本是提花机上贮存纹样信息的一套程序,它是由代表经线的脚子线和代表纬线的耳子线根据纹样的要求编织而成的。明代宋应星《天工开物》中写道:凡工匠结花本者,心计最精巧。画师先画何等花色于纸上,结本者以丝线随画量度,算计分寸而结成之。

约在11~12世纪提花机通过丝绸之路传到欧洲。

1679年,莱布尼茨发明了二进制
编程语言发展简史-编程知识网
  1679年,德国数学家 莱布尼茨(Gottfried Leibniz)发明了二进制,并对其系统性深入研究,完善了二进制。莱布尼茨是最早接触中华文化的欧洲人之一,曾经从丝绸之路上的一些前往中国传教的教士那里接触到中国文化。法国汉学大师若阿基姆·布韦(Joachim Bouvet,汉名白晋,1662-1732年)向莱布尼茨介绍了《周易》和八卦。在莱布尼茨眼中,“阴”与“阳”基本上就是他的二进制的中国版。他曾断言:“二进制乃是具有世界普遍性的、最完美的逻辑语言”。如今在德国图林根,著名的郭塔王宫图书馆(Schlossbibliothek zu Gotha)内仍保存一份莱氏的手稿,标题写着“1与0,一切数字的神奇渊源。”

1725年,法国织布工人布乔发明了穿孔纸带早期计算机的存储介质
编程语言发展简史-编程知识网
  1725年,法国织布工人布乔 (Basile Bouchon) 根据中国花本提花机的原理制作发明了穿孔纸带提花机,用纸带凿孔控制顶针穿入,代替“花本”上的经线组织点,不过并没有取得多大成功。后经法尔孔于1728年、沃康松于1745年的改进,能织制600针的大花纹织物。
  布乔是管风琴制造商和织布工的儿子,他熟悉手摇风琴中使用的旋转钉筒。他知道这样一个事实,即在设计应用于实际非常昂贵的音乐自动机气缸之前,音乐自动机气缸的信息内容首先在纸上列出。当时的做法是在包裹在圆柱周围的纸制图案上打孔,表明工匠必须在圆柱上钻孔以安装销钉。布乔于是有了一个绝妙的见解,即带有穿孔的纸张布局已经包含了放在圆筒上的信息,因此他得出结论,穿孔纸可以对图案信息进行编码。
  后来布乔将由有销钉的圆筒控制的音乐自动机的概念应用于重复的织布任务,并部分自动化了牵伸织机的繁琐设置过程。但布乔的发明并没有取得多大成功,因为针的数量不足以允许编织大型设计。

1799年,法国织布工人贾卡综合前人成果,成功研制出能织出600针以上的大型花纹的穿孔卡片提花机
编程语言发展简史-编程知识网
  贾卡(Joseph Marie Jacquard)是一位法国织布工,虽然没受过正式的教育,但是在1799年,贾卡综合前人成果,制成了整套的纹板传动机构,配置更为合理的脚踏机器提花机,只需要一人操作就能织出 600针以上的大型花纹来。
  这种提花机在1801年巴黎展览会上获青铜奖章。它的机构特点是用提花纹板,即穿孔卡片代替纸带,通过传动机件带动一定顺序的顶针拉钩,根据花纹组织协调动作提升经线织出花纹。
  1860年以后被改用蒸汽动力代替脚踏传动遂成为自动提花机。自动提花机后来广泛传播于全世界并改用电动机发动。为了纪念贾卡的贡献,这种机器遂被称为贾卡(提花)机

1822年,英国发明家巴贝奇从贾卡提花机上获得灵感,成功研制出巴贝奇差分机——它能够按照设计者的旨意,自动处理不同函数的计算过程。1837年,又提出了分析机的设计
编程语言发展简史-编程知识网
  1837年,巴贝奇提出分析机(一种机械式通用计算机)的设计,一直到巴贝奇去世的1871年,由于种种原因,这种机器很遗憾并没有被真正的制造出来。它使用打孔纸带输入,采取最普通的十进制计数。分析机采用的一些计算机思想延用至今,其中分析机包括的存储和碾磨,就非常类似于今天计算机中采用的内存和处理器,输入和输出都采用打孔卡片。

人类历史上公认的,第一位程序员 —— 阿达·洛芙莱斯
编程语言发展简史-编程知识网
  在分析机制造的过程中,巴贝奇的一位朋友,阿达·洛芙莱斯Ada Lovelace,英国诗人拜伦之女,数学家,世界上第一位公认的程序员)在1842年与1843年其间,她花了9个月的时间翻译意大利数学家路易吉·米那比亚对巴贝奇最新的计算机设计书(即分析机概论)所留下的备忘录。在这部译文里,她附加许多注记,内容详细说明用计算机进行伯努利数的运算方式,而被认为是世界上第一个电脑算法程序。因此,阿达被认为是世界上第一位程序员,也是第一位女程序员。

1888年,美国统计专家霍列瑞斯博士(H.Hollerith,德国侨民)设计发明了用于统计人口的机器——穿孔制表机
编程语言发展简史-编程知识网
  虽然霍列瑞斯发明的并不是通用计算机,除了能统计数据表格外,它几乎没有别的什么用途,然而,制表机穿孔卡第一次把数据转变成二进制信息(0和1,是最早使用机器语言的案例)。在以后的计算机系统里,用穿孔卡片输入数据的方法一直沿用到20世纪70年代,数据处理也发展成为电脑的主要功能之一。

1938年,德国工程师朱斯(Konrad Zuse,数字计算机之父)研制出Z-1计算机,它使用继电器为逻辑元件,是世界首台可编程使用二进制数的计算机,可以从穿孔卡板上读取指令
编程语言发展简史-编程知识网
  1942年,朱斯在紧张研究的间隙里,他写作了世界上第一个下国际象棋的计算机程序。后来为了使机器的效率更高,于1948年发表了他所设计的Plankalkül编程语言的论文,这一成果使楚泽也跻身于计算机语言先驱者行列。但是在他有生之年却未能将该语言实现,而且由于二次大战的影响,他原本的贡献(发明的Z系列计算机)也被孤立,失去了研发出第一台电子计算机的机会。

1942年,美国电汽工程师约翰·阿塔那索夫成功研制出ABC计算机——第一台电子计算机但不可编程,不是通用的电子计算机,图灵不完备
编程语言发展简史-编程知识网
  阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常简称ABC计算机)是世界上第一台电子数字计算设备。这台计算机在1937年设计,不可编程,仅仅设计用于求解线性方程组,并在1942年成功进行了测试。然而,这台计算机用纸卡片读写器实现的中间结果存储机制是不可靠的。而且,在发明者约翰·文森特·阿塔纳索夫因为二战任务而离开爱荷华州立大学之后,这台计算机的工作就没有继续进行下去。ABC计算机开创了现代计算机的重要元素,包括二进制算术和电子开关。但是因为缺乏通用性、可变性与存储程序的机制,将其与现代计算机区分开来。

1946年2月14日,世界上第一台现代通用电子数字计算机ENIAC,在美国宾夕法尼亚大学诞生
编程语言发展简史-编程知识网
  研制电子计算机的想法产生于第二次世界大战进行期间。当时激战正酣,各国的武器装备还很差,占主要地位的战略武器就是飞机和大炮,因此研制和开发新型大炮和导弹就显得十分必要和迫切。为此美国陆军军械部在马里兰州的阿伯丁设立了“弹道研究实验室”。
  美国军方要求该实验室每天为陆军炮弹部队提供6张射表以便对导弹的研制进行技术鉴定。事实上每张射表都要计算几百条弹道,而每条弹道的数学模型是一组非常复杂的非线性方程组。这些方程组是没有办法求出准确解的,因此只能用数值方法近似地进行计算。
  不过即使用数值方法近似求解也不是一件容易的事!按当时的计算工具,实验室即使雇用200多名计算员加班加点工作也大约需要二个多月的时间才能算完一张射表。在“时间就是胜利”的战争年代,这么慢的速度怎么能行呢?恐怕还没等先进的武器研制出来,败局已定。
  为了改变这种不利的状况,当时任职宾夕法尼亚大学莫尔电机工程学院的莫希利(John Mauchly)于 1942年提出了试制第一台电子计算机的初始设想——“高速电子管计算装置的使用”,期望用电子管代替继电器以提高机器的计算速度。
  美国军方得知这一设想,马上拨款大力支持,成立了一个以莫希利、埃克特(John Eckert)为首的研制小组开始研制工作、预算经费为15万美元,这在当时是一笔巨款。然而直到二次大战结束后这款电子计算机才被研制出来。1946年,世界上第一台现代通用电子数字计算机 ENIAC,在美国宾夕法尼亚大学诞生。
  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--

四、第三代计算机语言——高级语言

  在编程语言经历了机器语言,汇编语言等更新之后,人们发现了限制程序推广的关键因素——程序的可移植性需要设计一个能够不依赖于计算机硬件,能够在不同机器上运行的程序。这样可以免去很多编程的重复过程,提高效率,同时这种语言又要接近于数学语言或人的自然语言。

1956年,美国计算机科学家约翰·巴克斯带领团队开发出了世界上第一个高级编程语言FORTRAN
  FORTRAN语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,直到2022年已有六十六年的历史,但仍历久不衰,FORTRAN始终是数值计算领域所使用的主要语言

1958年,ALGOL(ALGOrithmic Language)算法语言委员会小组成立,后续发表了ALGOL系列算法语言,对后来的高级语言产生了深远的影响

  • 1958年,ALGOL 58诞生
  • 1960年,ALGOL 60诞生
  • 1966年,ALGOL W出现,碍于调整与改进幅度略显保守,委员会并未以此作为ALGOL 60的后继者
  • 1968年,ALGOL 68诞生

  1955年,德国的应用数学和力学学会(Gesellschaft für Angewandte Mathematik und Mechanik,GAMM) 因力拒IBM在计算机领域的主导地位,特设置一个专责于设计一通用但与计算机无关的算法语言的开发委员会。
  1950年代末期,大量的新增计算机语言涌现,而这些新语言大都围绕单个体系结构如UNIVAC计算机、IBM700系列计算机等开发,使不同系统用 户间的交流变得困难。针对这种计算机专用语言大量增多情况,美国一些主要的计算机用户组,在1957年5月10日向国际计算机学会(Association for Computing Machinery,ACM)提交申请,建议研究与开发适用于与计算机无关的科学用程序设计语言。
  1957年末,因应在美国涌现多方计算机高级语言,GAMM原小组委员会认为应该包揽美国同道中人而向ACM发出邀请,1958年4月,两个小组正式同意加入这一联合语言设计项目。
  1958年5月27日至6月1日,GAMM和ACM各有4人出席在苏黎世举行第一次设计会议,为新语言定下目标。亦因应语言特性,先被命名为国际代数语言(International Algebraic Language,IAL) ,转辗后定名为ALGOL,即算法语言,由此1958年ALGOL算法语言委员会正式成立。
  国际计算机学会(ACM)将ALGOL模式列为算法描述的标准,深深影响启发了后续的高级语言Pascal、Ada、C等语言出现。由于ALGOL语句和普通语言表达式接近,更适于数值计算,所以ALGOL多用于科学计算机。

1970年,瑞士计算机科学家Niklaus Wirth研制出了第一个结构化编程语言Pascal
  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定义的结构化程序设计概念的语言。

1972年, C语言(The C Programming Language)诞生

  • 1963年,英国剑桥大学基于ALGOL 60推出了CPL(Combined Programming Langurage)语言
  • 1967年,英国剑桥大学的 Matin Richards对CPL语言做了简化,推出了 BCPL (the Basic Combined Programming Language)语言
  • 1969年,美国贝尔实验室的肯·汤普森(Kenneth Lane Thompson),以BCPL语言为基础,又作了进一步的简化,设计出了很简单而且很接近硬件的B语言(取BCPL的首字母),并且用B语言写了初版UNIX操作系统(又叫UNICS)。
  • 1972年,美国贝尔实验室的丹尼斯·里奇(D.M.Ritchie )在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX操作系统

1983年, 美国计算机科学家本贾尼·斯特劳斯特卢普改良了C语言,由此C++(The C++ Programming Language/c plus plus )诞生
  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++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

在1946年第一台通用电子计算机诞生以来,这几十年期间迅速诞生了一大批非常出名的高级编程语言

  • 1956年,美国计算机科学家约翰·巴克斯带领团队开发出了世界上第一个高级编程语言FORTRAN
  • 1958年,麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)基于λ演算创造了LISP语言,LISP为函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现,采用抽象数据列表与递归作符号演算来衍生人工智能。LISP名称源自列表处理(List Processing)的英语缩写,LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为应用人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
  • 1958年,ALGOL(ALGOrithmic Language)算法语言委员会小组成立,后续发表了ALGOL系列算法语言,对后来的高级语言产生了深远的影响
  • 1964年,BASIC语言正式发布。达特茅斯学院院长、匈牙利人约翰·凯梅尼(J. Kemeny)和数学系教师托马斯·卡茨(Thomas E. Kurtz)认为,像FORTRAN那样的语言都是为专业人员设计,没有办法普及。于是,他们在简化FORTRAN的基础上,在1964年研制出一种“初学者通用符号指令代码”(Beginner’s All-purpose Symbolic Instruction Code),简称BASIC。1975年,比尔·盖茨把它成功移植到了PC上。
  • 1967年,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。Simula是由Ole-Johan Dahl和Kristen Nygaard在20世纪60年代在奥斯陆挪威计算中心开发的两种模拟编程语言Simula I和Simula 67的名称。在句法上,它是ALGOL 60的一个相当忠实的超集。Simula被认为是第一个面向对象的编程语言。顾名思义,Simula就是为模拟而设计的,并且该领域的需求为当今面向对象语言的许多功能提供了框架。
  • 1970年,瑞士计算机科学家Niklaus Wirth基于ALGOL研制出了第一个结构化编程语言Pascal,Pascal语言是一种算法语言,它是瑞士苏黎世联邦工业大学的沃思教授于1968年设计完成的,1971年正式发表。Pascal语言是在ALGOL60的基础上发展而成的。它是一种结构化的程序设计语言。它的功能强、编译程序简单,是70年代影响最大一种算法语言。
  • 1972年C语言(The C Programming Language)诞生
  • 1970年代~1980年代(20世纪70年代到80年代),Smalltalk出现,它被公认为历史上第二个面向对象的程序设计语言,和第一个真正的集成开发环境(IDE)。Smalltalk由艾伦·凯,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:C++,C#,Objective-C,Actor,Java和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如设计模式、敏捷编程和代码重构等。
  • 1979年,Jean Ichbiah率领的绿组建议方案被釆纳并被命名为Ada,它是一种程序设计语言。源于美国军方的一个计划,旨在整合美军事系统中运行着上百种不同的程序设计语言。其命名是为了纪念世界上第一位程序员阿达·洛芙莱斯。
  • ==1980年代,荷兰国家数学与计算机科学研究中心的Leo Grurts,Lambert Meertens,Steven Pemberton主导研发了一种交互式,结构化高级语言ABC语言,旨在替代BASIC,Pascal等语言,用于教学及原型软件设计。
  • 1980年左右R语言在新西兰奥克兰大学诞生,R语言是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。
  • 1980年代初,布莱德·考克斯(Brad Cox)在其公司Stepstone发明了Objective-C,是扩充C的面向对象编程语言。Objective-C的流行归功于iPhone的成功。编写iPhone应用程序的主要编程语言是Objective-C。
  • 1983年C++(The C++ Programming Language/c plus plus )诞生
  • 1984年MATLAB诞生。MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
  • 1986年,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
  • 1987年,美国程序员拉里·沃尔(Larry Wal)研发出了perl语言,perl从最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。
  • 1990年,荷兰数学和计算机科学研究学会的吉多·范罗苏姆基于ABC语言,研发出了Python语言。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,它已被逐渐广泛应用于系统管理任务的处理、Web编程、数据科学研究、网络爬虫、游戏开发、人工智能、大数据等。
  • 1991年,微软公司推出了Visual Basic(简称VB)语言,源自于BASIC。Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。是一种可用于微软自家产品开发的语言。
  • 1993年,Lua诞生,它是一个小巧的脚本语言。Lua是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua的目标是成为一个很容易嵌入其它语言中使用的语言。很多应用程序、游戏使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括魔兽世界、博德之门、愤怒的小鸟、QQ三国、VOCALOID3、Garry’s Mod、太阳神三国杀、游戏王ygocore和饥荒等。
  • 1994年,丹麦程序员Rasmus Lerdorf根据C语言、Java和Perl多个语言的特色语法研发出了PHP语言。PHP是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中,PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
  • 1995年,Sun公司的詹姆斯·高斯林带领他的团队对C++进行改写,诞生了Java语言
  • 1995年,Netscape公司的Brendan Eich,在网景导航者浏览器上研发出了JavaScript。最开始取名LiveScript,因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。
  • 1995年,日本的松本行弘(Yukihiro Matsumoto)推出了Ruby的第一个版本Ruby 0.95。不久Ruby便凭借其独特的魅力横扫日本,它是一种简单快捷的面向对象(面向对象程序设计)脚本语言。
  • 2000年,微软公司的安德斯·海尔斯伯格(Anders Hejlsberg)带领他的团队基于C和C++研发出C#,C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。
  • 2000年,易语言最早的版本发布。易语言(EPL)是一门以中文作为程序代码编程语言,其以“易”著称,创始人为吴涛。易语言早期版本的名字为E语言。创造易语言的初衷是进行用中文来编写程序的实践,方便中国人以中国人的思维编写程序,并不用再去学习西方思维。易语言的诞生极大的降低了编程的门槛和学习的难度。从2000年以来,易语言已经发展到一定的规模,功能上、用户数量上都十分可观。目前易语言已取得国家级鉴定,鉴定会专家一致认为:易语言在技术上居于国内领先地位,达到了当前同类产品的国际先进水平。易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。易语言降低了广大电脑用户编程的门槛,尤其是根本不懂英文或者英文了解很少的用户,可以通过使用本语言极其快速地进入Windows程序编写的大门。
  • 2002年,微软公司推出了Visual Basic.NET,基于微软.NET Framework之上的面向对象的编程语言。
  • 2009年, Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 研发出Go语言,它是一种静态强类型、编译型语言,语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
  • 2014年,苹果于2014年WWDC苹果开发者大会发布的新开发语言Swift,可与Objective-C共同运行于macOS和iOS平台,用于搭建基于苹果平台的应用程序。Swift是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言。Swift的设计以安全为出发点,以避免各种常见的编程错误类别。2015年12月4日,苹果公司宣布其Swift编程语言开放源代码。长600多页的The Swift Programming Language 可以在线免费下载。
  • 2015年,Rust 1.0 第一个稳定版本发布。Rust语言最早在2006年是作为 Mozilla 员工 Graydon Hoare 的私人项目出现。Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言,Rust在语法上和C++类似。Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。标准Rust性能与标准C++性能不相上下。

2022年4月TIOBE编程排行榜

  可以看到Python语言已经冲上了第一名,当前比较火热。C语言和Java语言还是那么的稳固,但是都有所下降,其中汇编语言(Assembly Language)在第8名。
编程语言发展简史-编程知识网

高级语言的分类:

1.解释型和编译型

解释型语言:
  是在运行的时候将程序翻译成机器语言,速度较慢。解释型语言的程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,因此效率比较低。
  一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言。

解释型语言通常有:JavaScript、VBScript、Perl、Python、Ruby、Basic、MATLAB 等等

编译型语言:
  运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用编译型语言。
  编译型语言在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。

编译语言通常有:C、C++、Pascal/Object Pascal(Delphi)、Go等等

介于两者直接的语言有:Java

2.面向过程和面向对象

面向过程结构化程序设计语言:
  “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。简写为POP。

面向过程语言有:C、Fortran、 Pascal等等

面向对象程序设计语言:
  面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

面向对象语言有:c++、c#、java、delphi、Python、Simula等等

介于两者之间有:c++、perl等等