程序语言历史

title: 1940之前.
content: 第一个程序语言比现代的计算机还早诞生。首先,这种语言是种编码()。  于1804年发明的提花织布机(或称甲卡提花织布机,英文:),运用打孔卡上的坑洞来代表缝纫织布机的手臂动作,以便自动化产生装饰的图案。  爱达·勒芙蕾丝在1842年至1843年间花费了九个月,将意大利数学家Luigi Menabrea关于查尔斯·巴贝奇新发表机器分析机的回忆录翻译完成。她于那篇文章后面附加了一个用分析机计算伯努利数方法的细节,被部分历史学家认为是世界上第一个电脑程序。 Herman Hollerith在观察列车长对乘客票根在特定位置打洞的方式后,意识到他可以把资讯编码记载到打孔卡上,随后根据这项发现使用打孔卡来编码并纪录1890年的人口统计资料。  第一个计算机程序码是针对他们的应用面设计的。在20世纪的前十年主要是用十进制来算数,后来人们发现不只是用文字,也可以用数字来表现逻辑。举例来说,阿隆佐·邱奇曾以公式化(formulaic)的方式表达λ演算。图灵机是一种纸带标记(tape-marking)机器(就像电话公司用的那种)操作方法抽象化后的集合。图灵机这种透过有限数字(finite number)呈现机器的方式,奠定了程序如同冯·诺伊曼结构计算机中的资料一样地储存的基础。但不同于λ演算,图灵机的程序码并没有办法成为高阶程序语言的基石,这是是因为它主要的用途是分析算法的复杂度。  就像许多历史上的"第一次"一样,第一个现代程序语言也很难界定。最一开始是因为硬件限制而限定了语言,打孔卡允许80行(column)的长度,但某几行必须用来记录卡片的顺序。FORTRAN则纳入了一些与英文字词相同的关键字,像是"IF"、"GOTO"(原字词为go to),以及"CONTINUE"。之后采用磁鼓()作为内存使用,也代表计算机程序也必须插入(interleave)到磁鼓的转动(rotation)中。和现今比较起来,这也让程序语言必须更加依赖硬件(hardware-dependent)。  对部分的人认为必须在"程序语言"的状态确立之前,根据能力(power)以及可读性(human-readability)的程度来决定历史上第一个程序语言是什么语言。提花织布机和查尔斯·巴贝奇所制作的差分机()都具备在大量限制下,简单描述机器应执行行为的语言。也有种并非设计给人类运用的受限特定领域语言(),是将打孔卡运用到自动演奏钢琴()上。
title: 1940年代.
content: 最早被确认的现代化、电力启动(electrically powered)的计算机约在1940年代被创造出来。程序员在有限的速度及内存容量限制之下,撰写人工调整(hand tuned)过的组合语言程序。而且很快就发现到使用组合语言的这种撰写方式需要花费大量的脑力(intellectual effort)而且很容易出错(error-prone)。  康拉德·楚泽于1948年发表了他所设计的Plankalkül程序语言的论文。但是在他有生之年却未能将该语言实作,而他原本的贡献也被其他的发展所孤立。  在这段期间被开发出来的重要语言包括有:
title: 1950与1960年代.
content: 有三个现代程序语言于1950年代被设计出来,这三者所衍生的语言直到今日仍旧广泛地被采用:  另一个1950年代晚期的里程碑是由美国与欧洲计算机学者针对"算法的新语言"所组成的委员会出版的"ALGOL 60报告"(名称取自"ALGOrithmic Language"(算法语言))。这份报告强化了当时许多关于计算的想法,并提出了两个语言上的创新功能: 另一个创新则是关于语言的描述方式:  Algol 60对之后语言的设计上带来了特殊的影响,部分的语言很快的就被广泛采用。后续为了开发Algol的扩充子集合,设计了一个名为Burroughs()的大型系统。  延续Algol的关键构想所产生的成果就是ALGOL 68: Algol 68一些较少被使用到的语言功能(如同步与并列区块)、语法捷径的复杂系统,以及型态自动强制转换(coercions),使得实作者兴趣缺缺,也让Algol 68获得了"很难用"(diffcult)的名声。尼克劳斯·维尔特就干脆离开该设计委员会,另外再开发出更简单的Pascal语言。  在这段期间被开发出来的重要语言包括有:
title: 1967-1978:确立了基础范式.
content: 1960年代晚期至1970年代晚期的期间中,程序语言的发展也有了重大的成果。大多数现在所使用的主要语言范式都是在这段期间中发明的:  这些语言都各自演展出自己的家族分支,现今多数现代程序语言的祖先都可以追溯他们其中至少一个以上。  在1960年代以及1970年代中结构化程序设计的优点也带来许多的争议,特别是在程序开发的过程中完全不使用GOTO。这项争议跟语言本身的设计非常有关系:某些语言并没有包含GOTO,这也强迫程序员必须结构化地编写程序。尽管这个争议在当时吵翻了天,但几乎所有的程序员都同意就算语言本身有提供GOTO的功能,在除了少数罕见的情况下去使用GOTO是种不良的程序风格。结果是之后世代的程序语言设计者发觉到结构化程序语言的争议实在既乏味又令人眼花缭乱。  在这段期间被开发出来的重要语言包括有:
title: 1980年代:增强、模组、效能.
content: 1980年代的程序语言与之前相较显得更为强大。C++合并了物件导向以及系统程序设计。美国政府标准化一种名为Ada的系统程序语言并提供给国防承包商使用。日本以及其他地方运用了大量的资金对采用逻辑程序语言结构的第五代语言进行研究。函数程序语言社群则把焦点转移到标准化ML及Lisp身上。这些活动都不是在开发新的范式,而是在将上个世代发明的构想进一步发扬光大。  然而,在语言设计上有个重大的新趋势,就是研究运用"模组"或大型组织化的程序单元来进行大型系统的开发。Modula、Ada,以及ML都在1980年代发展出值得注意的模组化系统。模组化系统常拘泥于采用泛型程序设计结构:泛型存在(generics being)、本质(essence),参数化模组(parameterized modules)。(参阅多型)  尽管没有出现新的主要程序语言范式,许多研究人员仍就扩充之前语言的构想并将它们运用到新的内容上。举例来说,Argus以及Emerald系统的语言配合物件导向语言运用到分布式系统上。  1980年代的程序语言实作情况也有所进展。计算机系统结构中RISC的进展假定硬件应当为编译器设计,而非身为人类的组合语言程序员。借由中央处理器速度增快的帮助,编译技术也越来越积极,RISC的进展对高阶语言编译技术带来不小的关注。  语言技术持续这些发展并迈入了1990年代。  在这段期间被开发出来的重要语言包括有:
title: 1990年代:因特网时代.
content: 1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。这段期间主要在推动的哲学是提升程序员的生产力。许多"快速应用程序开发" (RAD) 语言也应运而生,这些语言大多都有相应的整合开发环境、垃圾回收等机制,且大多是先前语言的衍生语言。这类型的语言也大多是物件导向的程序语言,包含有Object Pascal、Visual Basic,以及C#。Java则是更加保守的语言,也具备垃圾回收机制。与其他类似语言相比,也受到更多的观注。新的脚本语言则比RAD语言更新更好。这种语言并非直接从其他语言衍生,而且新的语法更加开放地(liberal)与功能契合。虽然脚本语言比RAD语言来的更有生产力,但大多会有因为小程序较为简单,但是大型程序则难以使用脚本语言撰写并维护的顾虑。尽管如此,脚本语言还是网络层面的应用上大放异彩。  在这段期间被开发出来的重要语言包括有:
title: 现今的趋势.
content: 程序语言持续在学术及企业两个层面中发展进化,目前的一些趋势包含有:  在这段期间被开发出来的重要语言包括有:

Summary: 这篇文章在探讨程序语言在历史上的主要发展。更详细的事件发生年表,请参阅程序语言年表。

History of programming languages: The history of programming languages spans from documentation of early mechanical computers to modern tools for software development. Early programming languages were highly specialized, relying on mathematical notation and similarly obscure syntax. Throughout the 20th century, research in compiler theory led to the creation of high-level programming languages, which use a more accessible syntax to communicate instructions.