编程语言发展简史

2023-11-08

一、编程的起源

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

东汉时期(公元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等等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编程语言发展简史 的相关文章

  • win10微软应用商店不能用?简单两步完美解决

    想安装微软的软件 发现微软应用商店打不开 无论是我刷新还是重启 找了各种办法终于解决了 解决办法 1 打开键盘 田 R 键 输入 inetcpl cpl 2 然后去高级那里打开 勾上 使用TLS 1 2 选项 或者还原高级设置 3 最后打开
  • 数据下载网站整理

    数据十分重要 如何找到理想的数据显得更重要了 这里记录自己经过网上查询到的数据 进行整理 如果侵权 请联系我删除 再次感谢网友大佬们提供的资料 1 中国气象站点数据 下载地址 https www resdc cn data aspx DAT
  • 形象易懂讲解算法II——压缩感知

    形象易懂讲解算法II 压缩感知
  • 大学生竞赛项目

    编程 蓝桥杯 报名时间 10月 报名网址 https dasai lanqiao cn 中国软件杯大学生软件设计大赛 报名时间 5月 报名网址 http www cnsoftbei com 中国高校计算机大赛 报名时间 11月 报名网址 h
  • Inno打包后开始运行前检查文件是否存在

    Code function FileDoesNotExist file string Boolean begin if FileExists file then begin Result False end else begin Resul
  • 通过wireshark抓取telnet登陆密码

    笔者学校有一台设备 ip地址是 192 168 84 10 先打开wireshark捕获无线网卡 使用telnet登陆如图所示 按下回车 笔者这里输入的密码是 A603 现在回到wireshark停止抓包 并且在filter处输入如下的过滤
  • 为什么计算机中的整数要用补码表示?补码表示有什么好处?

    为什么计算机中的整数要用补码表示 补码表示有什么好处 在计算机中 补码可谓是十分神奇而又重要的存在 我们知道整数在计算机内部的机器数一般都是补码表示的 这里给出几个这样表示的好处 符号位可以和数值为一起参加运算 比如俩个负数相加 只要结果在
  • FLOPS、TOPS和FLOPs的区别

    FLOPS 即每秒浮点运算次数 是每秒所执行的浮点运算次数 Floating point operations per second 缩写 FLOPS 的简称 被用来评估电脑效能 FLOPs 注意s小写 是floating point op
  • 字符编码悉知

    1 查看windows系统代码页 代码页是字符集编码的别名 也有人称 内码表 早期 代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称 当时通用的操作系统都是命令行界面系统 这些操作系统直接使用BIOS供应的VGA功能来显示字符 操作
  • 查看apk签名,查看key签名,adb常用命令

    在使用第三方sdk时经常要求绑定签名 这里提供两种查看签名的方式 如果只是想查看一下手机上应用的签名 那么可以安装一个app直接输入包名即可查看该应用的签名 提供一个微信的签名查看apk 下载连接http download csdn net
  • 解决Chrome浏览器左键双击没反应,无法启动

    打开任务管理器Ctrl aLT DEL 或是在任务栏图标空白处右击 解决Chrome浏览器点击没反应 2 然后 在进程列中 点击表头排序 之后找到chrome exe进程 解决Chrome浏览器点击没反应 3 右击选择后 结束进程 解决Ch
  • IDEA去除掉虚线,波浪线,和下划线实线的方法

    推荐一下个人的公众号 终码一生 专注于Java技术学习 开源项目分享和常见问题解决等 喜欢的小伙伴可以关注下 感谢大家的支持 初次安装使用IDEA 总是能看到导入代码后 出现很多的波浪线 下划线和虚线 这是IDEA给我们的一些提示和警告 但
  • 突发!ITELLYOU要改版了!

    微信公众号 网管小贾 个人博客 www sysadm cc 经常下载Windows系统镜像的老司机中 我敢保证十之八九对 MSDN 我告诉你 这个网站再熟悉不过 可是对于新手小白们来说 这个站TA究竟是个啥 其实 MSDN 我告诉你 是个名
  • 杂七杂八的小知识

    杂七杂八的小知识 前端知识 Node js安装注意事项 Vue学习文档 Mysql数据库小知识 安装数据库后使用数据库所需步骤 MySQL远程连接 常用数据库命令 mysql数据库导入查询 StarUML使用教程 docker小知识 cma
  • Freertos 在contexM0芯片上的移植

    1 freertos源码 官网下载地址 https www freertos org 下载LTS长期支持版本 2 在工程目录下新建FreeRTOS文件夹 将FreeRTOS 的源码添加到这个文件夹中 portable 文件夹中只需要复制 k
  • 如何FL Studio显示中文?切换语言教程

    你是不是也在为fl studio的英文界面而苦恼 你是不是也想让你的fl studio 说中文 方便你制作音乐 你是不是也在网上找了很多教程 却发现都是复杂的 或者已经过时的 如果你的答案是肯定的 那么你来对地方了 今天 我要教你一个一步到
  • CleanMyMac X2024值不值得下载?

    macOS已经成为最受欢迎的桌面操作系统之一 它提供了直观 简洁的用户界面 使用户可以轻松使用和管理系统 macOS拥有丰富的应用程序生态系统 还可以与其他苹果产品和服务紧密协作 如iPhone iPad 用户可以通过iCloud同步和共享
  • CSDN找到“仅我可见”内容

    有时候自己做一些笔记参考了他人的内容 所以想将文章转为 仅自己可见 仅作自用 记录一下CSDN找私密文章的方式 今天摸了好一会儿才找到哈哈哈 1 点击导航栏处的创作中心进入 2 查看更多 3 点击浏览就可以查看啦 来源 CSDN找到 仅我可
  • 在win10和Linux上配置SSH 无密码登录

    文章目录 一 用途 二 在本地机器上使用ssh keygen产生公钥私钥对 1 在Linux 或macOS 上产生SSH公私钥的方法 2 在win10上产生SSH公私钥的方法 a 检查windows 本地是否安装有ssh b 在本地生成SS
  • 液晶偏振光栅

    1 偏振 光是横波 在垂直于光的传播方向的平面内光波振动 即E矢量振动 各方向振幅都相等的光为自然光 只在某一方向有光振动的光称为线偏振光 各方向光振动都有 但振幅不同的光叫部分偏振光 螺旋着振动的光称圆偏振光 分旋和右旋 2 庞加莱球表示

随机推荐

  • STM32学习--中断

    这里写目录标题 什么是中断 中断的作用 中断的特点 STM32与中断 NVIC 中断通道 中断优先级 中断服务函数 SysTick中断 内核中断 SysTick中断函数 NVIC库函数 NVIC初始化函数 抢断优先级分组 USART使能中断
  • 博客是个好东西

    到底有么有必要写blog 从热情到荒废 最近几年老觉得个人写blog是个费时费力的事情 所以荒废了好长时间没有写blog了 加之CSDN那几年不思进取 博客搞得一塌糊涂 维护起来麻烦的很 所以更是转到博客园去了 但是 但是 随着工作的事情越
  • C# webBrowser

    webBrowser功能 10 屏蔽脚本错误 将WebBrowser控件ScriptErrorsSuppressed设置为True即可 webBrowser1 ScriptErrorsSuppressed true HtmlElementC
  • ubuntu制作开机自启动service

    我们在使用java时 常常需要把jar包设置为开机自启动 保证机器在断电重启后仍然能正常的执行jar提供的服务 在部署再ubuntu系统中的操作过程如下 1 上传jar到指定的路径下 如上传到 home test jarTest test
  • Markdown操作——代码块内如何添加代码块+如何引用代码块符号

    目录 例子 尝试 用途 例子 以引用Markdown的数学公式为例 预览 E mc 2 这是个数学公式 但是想打出源代码 比如说想介绍一下这个代码的使用 的时候却不知道该怎么操作了 其实有的人想到了 直接在外面再加上 那就可以了吧 备注 c
  • Mysql实战详解15:mysql错误Please use SHOW DDL to check it, and then recover or rollback it

    4644 129f3d45d0265000 100 64 106 105 3306 common counter ERR CODE TDDL 4644 ERR PENDING DDL JOB EXISTS Another DDL job 1
  • 重磅!中国网络空间安全协会发布《2020年中国网络安全产业统计报告》

    6月29日 中国网络空间安全协会 以下简称 协会 发布了 2020年中国网络安全产业统计报告 以下简称 报告 共有4000余人出席线上发布会 报告 对国内绝大多数具备网络安全技术和产品自有研发能力的网络安全企业进行了梳理 统计和分析 力图全
  • ASP.NET页面之间传值的五种常用方法

    1 使用QueryString变量 QueryString是一种非常简单的传值方式 他可以将传送的值显示在浏览器的地址栏中 如果是传递一个或多个安全性要求不高或是结构简单的数值时 可以使用这个方法 但是对于传递数组或对象的话 就不能用这个方
  • Linux下GDB中的 attach pid 如何使用?

    linux下使用gdb可以很好的跟踪代码 当然 让我觉得神奇的是它竟然能跟踪正在运行的进程 下面 我将用我的例子演示一下怎么使用的 第一步 获得正在运行的进程的进程号 ps ef grep lt 进程名 gt 我的就是 找到该进程的进程id
  • O(nlogn)在数组S中找存在相加可得到x的算法

    题目 设计一个运行时间为O nlogn 算法 给定n个整数的集合S和另一个整数x 该算法能确定S中是否存在两个和相加刚好为x 的元素 思想 O nlogn O n O nlogn O nlogn 就是快排的时间复杂度 O n 就是查找的时间
  • 因果推断学习笔记(一)

    在日常生活中 我们常常会用到因果推断 比如 你淋雨了 赶紧去洗澡 不然容易着凉 感冒 这里我们认为淋雨是感冒的因 通过原因 来推断可能得结果 我拉肚子了 可能是昨天海鲜吃多了 这里我们认为海鲜吃多了是拉肚子的因 并且通过拉肚子反推可能得原因
  • N皇后问题

    久闻N皇后问题在算法界的赫赫大名 今天晚上有空我也来试一下 ps 至于我的作业 哈哈哈 请读者自行领悟 一 问题描述 在n n格的棋盘上放置彼此不受攻击的n个皇后 按照国际象棋的规则 皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子 n
  • 工作组 文件服务器,工作组文件服务器

    工作组文件服务器 内容精选 换一换 媒体处理包括媒体素材的上传 下载 编目 节目转码和数据归档等工作 涉及音视频数据的存储 调用和管理 根据其业务特性对共享的文件系统有如下要求 媒体素材的视频码率高 文件规模大 要求文件系统容量大且易于扩展
  • 琢磨下python装饰器的例子

    首先得强调 python中的引用是无处不在的 建议先看引文再回来琢磨例子 简单概括装饰器 对象 装饰器名字 A 任意函数名字 B 装饰语句 A B 若执行函数B B 则可理解为 带有 A的语句可将函数B 被装饰函数 作为参数传入A 装饰器
  • 【转】英文论文审稿意见汇总

    转自 海岩秋沙 的QQ空间 以下是从一个朋友转载来的 关于英文投稿过程中编辑给出的意见 与大家一起分享 以下12点无轻重主次之分 每一点内容由总结性标题和代表性审稿人意见构成 1 目标和结果不清晰 It is noted that your
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为

    相信很多人都买过家用监控摄像头 有的是为了及时查看家里的老人孩子的动态 有的是为了看家里宠物 遇到小偷时还能拍下面貌 但市场上五花八门的监控摄像头 各种功能让人看花了眼 于是呢 为了让大家更了解智能摄像头 今天我们来测下市面上比较靠前小米
  • games103——作业2

    实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github 文章目录 基于物理的方法 弹簧系统 单个弹簧 多个弹簧 弹簧网络 结构化弹簧网络 Structured Spring Networks 非结构化弹簧网络 Uns
  • lua中的math类库

    Lua5 1中数学库的所有函数如下表 math pi 为圆周率常量 3 14159265358979323846 abs 取绝对值 math abs 15 15 acos 反余弦函数 math acos 0 5 1 04719755 asi
  • 编程语言发展简史

    编程语言发展简史 一 编程的起源 二 第一代计算机语言 机器语言 三 第二代计算机语言 汇编语言 四 第三代计算机语言 高级语言 2022年4月 TIOBE编程排行榜 https www tiobe com tiobe index 高级语言