编程语言历史

1940之前

第一个编程语言比现代的计算机还早诞生。首先,这种语言是种编码(en:code)。

于1801年发明的提花织布机(或称甲卡提花织布机,英文:en:Jacquard loom),运用打孔卡上的坑洞来代表缝纫织布机的手臂动作,以便自动化产生装饰的图案。

Ada Lovelace在1842年至1843年间花费了九个月,将意大利数学家Luigi Menabrea关于查尔斯·巴贝奇新发表机器分析机的回忆录翻译完成。她于那篇文章后面附加了一个用分析机计算伯努利数方法的细节,被部分历史学家认为是世界上第一个电脑程序。 [1]

Herman Hollerith在观察列车长对乘客票根在特定位置打洞的方式后,意识到他可以把资讯编码记载到打孔卡上,随后根据这项发现使用打孔卡来编码并纪录1890年的人口统计资料。

第一个计算机程式码是针对他们的应用面设计的。在20世纪的前十年主要是用十进制来算数,后来人们发现不只是用文字,也可以用数字来表现逻辑。举例来说,阿隆佐·邱奇曾以公式化(formulaic)的方式表达λ演算图灵机是一种纸带标记(tape-marking)机器(就像电话公司用的那种)操作方法抽象化后的集合。图灵机这种透过有限数字(finite number)呈现机器的方式,奠定了程式如同冯·诺伊曼结构计算机中的资料一样地储存的基础。但不同于λ演算,图灵机的程式码并没有办法成为高阶编程语言的基石,这是是因为它主要的用途是分析算法的复杂度

就像许多历史上的"第一次"一样,第一个现代编程语言也很难界定。最一开始是因为硬件限制而限定了语言,打孔卡允许80行(column)的长度,但某几行必须用来记录卡片的顺序。FORTRAN则纳入了一些与英文字词相同的关键字,像是"IF"、"GOTO"(原字词为go to),以及"CONTINUE"。之后采用磁鼓(magnetic drum)作为内存使用,也代表计算机程式也必须插入(interleave)到磁鼓的转动(rotation)中。和现今比较起来,这也让编程语言必须更加依赖硬件(hardware-dependent)。

对部分的人认为必须在"编程语言"的状态确立之前,根据能力(power)以及可读性(human-readability)的程度来决定历史上第一个编程语言是什么语言。提花织布机和查尔斯·巴贝奇所制作的差分机(en:Difference Engine)都具备在大量限制下,简单描述机器应执行行为的语言。也有种并非设计给人类运用的受限特定领域语言(en:domain-specific language),是将打孔卡运用到自动演奏钢琴(en:player piano)上。

1940年代

最早被确认的现代化、电力启动(electrically powered)的计算机约在1940年代被创造出来。程序员在有限的速度及内存容量限制之下,撰写人工调整(hand tuned)过的组合语言程式。而且很快就发现到使用组合语言的这种撰写方式需要花费大量的脑力(intellectual effort)而且很容易出错(error-prone)。

Konrad Zuse于1948年发表了他所设计的Plankalkül编程语言的论文[1]。但是在他有生之年却未能将该语言实作,而他原本的贡献也被其他的发展所孤立。

在这段期间被开发出来的重要语言包括有:

1950与1960年代

有三个现代编程语言于1950年代被设计出来,这三者所衍生的语言直到今日仍旧广泛地被采用:

另一个1950年代晚期的里程碑是由美国与欧洲计算机学者针对"算法的新语言"所组成的委员会出版的ALGOL 60报告(名称取自"ALGOrithmic Language"(算法语言))。这份报告强化了当时许多关于计算的想法,并提出了两个语言上的创新功能:

  • 巢状区块结构:可以将有意义的程式码片段群组成一个区块(block),而非转成分散且特定命名的程序。
  • 词汇范围(lexical scoping):区块可以有区块外部无法透过名称存取,属于区块本身的变数、程序以及函式。

另一个创新则是关于语言的描述方式:

  • 一种名为巴科斯-诺尔范式 (BNF)的数学化精确符号被用于描述语言的语法。之后的编程语言几乎全部都采用类似BNF的方式来描述程式语法中上下文无关的部分。

Algol 60对之后语言的设计上带来了特殊的影响,部分的语言很快的就被广泛采用。后续为了开发Algol的扩充子集合,设计了一个名为Burroughs(en:Burroughs large systems)的大型系统。

延续Algol的关键构想所产生的成果就是ALGOL 68

  • 语法跟语意变的更加正交(orthogonal),采用匿名的历程(routines),采用高阶(higher-order)功能的递回式输入(typing)系统等等。
  • 整个语言及语意的部分都透过为了描述语言而特别设计的Van Wijngaarden grammar来进行正式的定义,而不仅止于上下文无关的部分。

Algol 68一些较少被使用到的语言功能(如同步与并列区块)、语法捷径的复杂系统,以及型态自动强制转换(coercions),使得实作者兴趣缺缺,也让Algol 68获得了很难用(diffcult)的名声。尼克劳斯·维尔特就干脆离开该设计委员会,另外在开发出更简单的Pascal语言。

在这段期间被开发出来的重要语言包括有:

1967-1978:确立了基础范式

1960年代晚期至1970年代晚期的期间中,编程语言的发展也有了重大的成果。大多数现在所使用的主要语言范式都是在这段期间中发明的:

这些语言都各自演展出自己的家族分支,现今多数现代编程语言的祖先都可以追朔他们其中至少一个以上。

在1960年代以及1970年代中结构化程式设计的优点也带来许多的争议,特别是在程式开发的过程中完全不使用GOTO。这项争议跟语言本身的设计非常有关系:某些语言并没有包含GOTO,这也强迫程序员必须结构化地编写程式。尽管这个争议在当时吵翻了天,但几乎所有的程序员都同意就算语言本身有提供GOTO的功能,在除了少数罕见的情况下去使用GOTO是种不良的程序风格。结果是之后世代的编程语言设计者发觉到结构化编程语言的争议实在既乏味又令人眼花撩乱。

在这段期间被开发出来的重要语言包括有:

1980年代:增强、模组、效能

1980年代的编程语言与之前相较显得更为强大。C++合并了面向对象以及系统程式设计。美国政府标准化一种名为Ada的系统编程语言并提供给国防承包商使用。日本以及其他地方运用了大量的资金对采用逻辑编程语言结构的第五代语言进行研究。函数编程语言社群则把焦点转移到标准化ML及Lisp身上。这些活动都不是在开发新的范式,而是在将上个世代发明的构想进一步发扬光大。

然而,在语言设计上有个重大的新趋势,就是研究运用模组或大型组织化的程式单元来进行大型系统的开发。Modula、Ada,以及ML都在1980年代发展出值得注意的模组化系统。模组化系统常拘泥于采用泛型程式设计结构:泛型存在(generics being)、本质(essence),参数化模组(parameterized modules)。(参阅多型)

尽管没有出现新的主要编程语言范式,许多研究人员仍就扩充之前语言的构想并将它们运用到新的内容上。举例来说,Argus以及Emerald系统的语言配合面向对象语言运用到分散式系统上。

1980年代的编程语言实作情况也有所进展。计算机系统结构RISC的进展假定硬件应当为编译器设计,而非身为人类的组合语言程序员。借由中央处理器速度增快的帮助,编译技术也越来越积极,RISC的进展对高阶语言编译技术带来不小的关注。

语言技术持续这些发展并迈入了1990年代。

在这段期间被开发出来的重要语言包括有:

1990年代:互联网时代

1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。这段期间主要在推动的哲学是提升程序员的生产力。许多"快速应用程序开发" (RAD) 语言也应运而生,这些语言大多都有相应的集成开发环境垃圾回收等机制,且大多是先前语言的衍生语言。这类型的语言也大多是面向对象的编程语言,包含有Object PascalVisual Basic,以及C#Java则是更加保守的语言,也具备垃圾回收机制。与其他类似语言相比,也受到更多的观注。新的脚本语言则比RAD语言更新更好。这种语言并非直接从其他语言衍生,而且新的语法更加开放地(liberal)与功能契合。虽然脚本语言比RAD语言来的更有生产力,但大多会有因为小程式较为简单,但是大型程式则难以使用脚本语言撰写并维护的顾虑。尽管如此,脚本语言还是网络层面的应用上大放异彩。

在这段期间被开发出来的重要语言包括有:

现今的趋势

编程语言持续在学术及企业两个层面中发展进化,目前的一些趋势包含有:

在这段期间被开发出来的重要语言包括有:

编程语言发展史上的杰出人物

时间: 2024-10-05 23:56:38

编程语言历史的相关文章

Python编程语言历史及特性01

一.Python语言 Python(英语发音:/paθn/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起.常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲

程序员应该知道的编程语言历史

编程语言是一组用来定义计算机程序的语法规则.它是一种被标准化的交流语言,用来向计算机发出指令.一种计算机语言让程序员能够准确地定义计 算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动.尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的.之所以有那么 多种不同的编程语言存在的原因是设计程序语言的初衷不同,对语言学习曲线的追求不同,不同程序之间的运行成本差异等. 编程语言的历史早于真正意义的计算机的出现.19世纪就有"可编程的"织布机和钢琴弹奏装置出现,它们都

编程语言历史简表

编程语言是一组用来定义计算机程序的语法规则.它是一种被标准化的交流语言,用来向计算机发出指令.一种计算机语言让程序员能够准确地定义计 算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动.尽管人们多次试图创造一种通用的程序设计语言,却没有一次尝试是成功的.之所以有那么 多种不同的编程语言存在的原因是设计程序语言的初衷不同,对语言学习曲线的追求不同,不同程序之间的运行成本差异等. 编程语言的历史早于真正意义的计算机的出现.19世纪就有“可编程的”织布机和钢琴弹奏装置出现,它们都是领域特定

浅谈编程语言的历史和发展趋势

前言: 编程语言处在不断的改变和发展中,从20世纪50年代的机器语言发展到今天的上百种高级语言,每种语言都在不断的发展中.人类自然语言的发展变化是一个缓慢而又持久的过程,但编程语言却不然,它的发展速度迅速,这主要是计算机硬件,互联网,和IT业的发展促进了编程语言的发展. 一 计算机语言的类型和特性 编程语言一般分成三类:机器语言.汇编语言和高级语言. 1.机器语言 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合" 它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能

C#的发展已经15年了 。。。历史发展

C#是微软公司在2000年6月发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行.它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,并且新增了许多功能及语法糖,而且它是微软公司.NET windows网络框架的主角. C#读作C Sharp.最初它有个更酷的名字,叫做COOL.微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#.在1998年

少儿编程崛起?2020年4月编程语言排名发布——Java,C,Python分列前三,Scratch挤进前20

前三并没有什么悬念,依然是Java,C,Python.C与Java的差距正在缩小,不过我们不用担心,在大数据分析领域Java,Python依然都是不可或缺的. 基于图形的基于块的编程语言Scratch已进入前20名.乍一看,对于旨在教孩子如何编程的编程语言来说,这似乎有些奇怪.但是,如果考虑到Scratch开发完成总数超过5,000万个项目,并且每月增加100万个新的Scratch项目,那么不能否认Scratch受欢迎.由于计算机越来越成为生活中不可或缺的一部分,因此教孩子编程的语言越来越受欢迎

怎样防止电脑被黑?

本原创文章来源:C++技术网 http://www.cjjjs.cn ,阅读更多原创精品文章,欢迎访问C++技术网. 1.搞IT的是屌丝.码农.程序猿? 人们提到IT人的时候,总会想到他们呆板.不解风情,专注于IT技术,就算性感的美女躺在旁边也无动于衷.事实真的是这样吗?虽说不能完全否定有这样的情况存在,但这是IT人普遍的特点吗?而其它行业也有很多这样的人,那为什么人们总是拿程序员说事?下图为2013年网上曾经流传的一张屌丝分布图,程序员行业居首. 而实际上,问题并不在于IT行业拥有这些固有的标

算法(第4版)-1.3.3 链表

总结:本小节讲述了链表的概念,以及用链表实现Stack.Queue和Bag的过程和优缺点. 重点: 1. 定义:链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该结点含有一个泛性的元素和一个指向另一条链表的引用. 2. 我们首先用一个嵌套类来定义结点的抽象数据类型: private class Node { Item item; Node next; } 它们实现的不是抽象数据类型,因为我们会直接使用其实例变量. 3. 所需的时间和链表的长度无关的三种操作

c#的学习

C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp".C#是一种安全的.稳定的.简单的.优雅的,由C和C++衍生出来的面向对象的编程语言.它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承).C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力.优雅的语法风格.创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言.并且C