A.1. 第一个计算机语言:Fortran
Fortran I 诞生于 1957 年,由 IBM 设计,是世界上第一个真正的计算机语言。
Fortran I 运行于 IBM 704 计算机上。
Fortran I 支持:变量(变量名最多 6 个字符)、If 和 do 语句、格式化 IO。不支持:数据类型声明、单独编译子程序
Fortran II 发布于 1958 年,主要对 Fortran I 的编译器做了优化,并支持了单独编译的子程序。
Fortran IV 发布于 1962 年,并在 1966 年被标准化为 Fortran 66,这也是第一个 Fortran 的标准化版本。1978 年的 Fortran 77 是非重要的标准化版本,这时的 Fortran 语言已经大量的引进了其他计算机语言的特点,例如字符串处理、逻辑判断、带 else 子句的 if 语句等。
Fortran 的最新标准化版本是 Fortran 2008。
Fortran 的设计思想基于冯诺依曼体系结构是命令式语言的鼻祖。
A.2. 源于数学的计算机语言:Lisp
人工智能语言 IPL(Information Processing Language)诞生于 1956 年。
IPL 相当于一种假想的计算机的机器语言,这种计算机是以列表处理为基础,这有别于冯诺依曼体系结构。
IPL 的关键是证明了:基于列表处理的计算机的可行性。1958 年夏,约翰. 麦卡锡在 IBM 研究代数表达式的微分运算时,产生了一系列对语言需求,包括:用数学函数控制流程的方法(即,递归和条件表达式);列表的自动分配;废弃列表的隐士回收。这些语言需求,显然 IPL 不能满足,所以需要设计新的语言。1958 年秋,麦卡锡在 MIT 成立了人工智能小组,开始着手设计这种新的列表处理语言。这最终导致 1960 年,Lisp 的诞生。
1960 年的 Lisp 并没有来得及设计自己的语法,就被麦卡锡的学生实现了,因为没有语法,麦卡锡的学生就以列表格式的语法分析树(即,S(Symbolic)表达式)作为临时语法。但没有想到的是随着 Lisp 语言广泛流传,这种语法被程序员迅速介绍,并发现了其独特的魅力。麦卡锡希望 Lisp 的语法是数学表达式的元语言,命名为 M(Mate)表达式,类似于后面的 ML 语言的语法。但是这种想法遭到了当时 Lisp 程序员的反对,最后麦卡锡开了 MIT,从此 Lisp 的语法凝固在 S 表达式上。
Lisp 建立在列表和 lambda 演算和基础上,是函数式编程的鼻祖。
A.3. 通用科学计算语言:Algol
Algol 58 年诞生于 1958 年,由苏黎世会议制定。是第一个设具体机器无关的计算机语言。随着 Fortran 的诞生,其他一些语言也在开发中,这些语言的语法格式各不相同,而且和 Fortran 一样,都与运行它们的具体计算机关联(比如标示符长度、代码行数的限制等)。用这些语言写的代码很难交流。于是 Algol 58 在 Fortran I 的基础做了扩展,并兼容了当时其他语言的一些特性,成为了程序设计思想的集成。
Algol 60,发表于 1960 年,在 Algol 58 的基础上做了重大改进:移入块结构、 支持两种子程序参数传递(按值传递和按名传递)、允许递归、支持本地数组(在栈上分配数组)。
Algol 60 是命令式语言的一个里程碑。
Algol 在设计之初,就定下:语法应当尽可能接近数学记法,的目标。这就使得 Algol 60 语法格式几乎影响到后来所有的计算机语言,并且 Algol 60 是很多文献表达算法的唯一正式方式。
Algol 60 是后来所有计算机语言语法的鼻祖,但 Cobol 除外。
A.4. 通用商务语言:COBOL
COBOL 语言于 1960 年发布。注意真对商务应用。
语言的设计理念是:「数学程序应该用数学记法来写,数据处理程序应该用英语语句来写」。商务应用显然属于后者,所以 COBOL 语言看起了就像是全大写的英语。
COBOL 创造了一些新概念:宏(DEFINE)和数据结构(记录)。
COBOL 在商务领域被广泛的使用。
COBOL 对后来的语言几乎没有影响,但 PL/I 除外。
A.5. 跨领域语言:PL/I
之前的所有语言都是领域特定语言,例如: 人工智能领域的 Lisp、科学计算领域的 Algol 60,商务应用领域的 COMBOL 等。
PL/I 诞生于 1964 年,是跨科学计算和商务应用领域的计算机语言。
PL/I 是 Algol 60、Fortran IV、COBOL 的结合体。
A.6. 面向对象的起源:SIMULA 67
1964 年,在挪威计算机中心诞生了 SIMULA I,然后不断的做改进最终于 1967 年,产生了 SIMULA 67。
SIMULA 67 是对 Algol 60 的扩展,是第一个定义类结构的语言,这也被认为是面向对象的起源。将命令式编程中的数据和数据的有关函数集成在一起,就形成了面向对象编程中的对象,而对象的类型就是类。将命令式编程中主程序调用子程序的从属关系,变为面向对象编程中对象之间互相发送消息的平等关系。
A.7. 正交设计:Algol 68
Algol 68,发表于 1968 年,第一个引入正交化设计的概念,以及用户自定义数据类型。
A.8. 初学者的语言:BASIC
BASIC 语言诞生于 1971 年,设计的主要目的是:使得计算机语言可以被非理工科生使用(当时理工科学生使用的 Fortran 和 Algol 60 很难被文科生掌握)。
这样的设计目的使得 BASIC 非常适合于初学者。
BASIC 来自于 Fortran IV,语法受到 Algol 60 影响。是 BASIC 是第一个被广泛使用的分时处理语言。
A.9. 学院派语言:Pascal
Pascal 语言诞生于 1971 年,来自于 Algol 68。
Pascal 重大影响来自于程序设计教学。它的出现取代了 Fortran 作为程序设计入门语言的地位。
Pascal 在工业界也有广泛的使用。
A.10. 系统语言:C
贝尔实验室的 UNIX 操作系统,最初版本使用汇编语言写成,并 1970 年,在 UNIX 上实现的第一个高级语言叫做 B 语言
B 的目的是:用于开发 UNIX 系统程序,以及新版本的 UNIX 操作系统。
B 以 BCPL 语言为基础。
BCPL,诞生于 1967 剑桥大写,它的祖先是 1962 年诞生诞生于同一所大学的 CPL 语言。
B 和汇编一样数据类型就是机器字,这极大的限制了 B 程序在不同位数的机器之间的迁移。B 的这种不可一致性导致了 C 的产生。
C 语言就是 B 的改进版本,同样以 BCPL 基础,诞生引入了 Algol 68 的特点,使得 C 语言称为了一个可移植系统程序语言。
C 语言语法中对操作符的大量灵活的使用,极大的印象了后来的一批程序语言。
A.11. 逻辑语言:Prolog
Prolog 诞生于 1972 年,是逻辑式编程的鼻祖。所谓逻辑式编程,就是以形式逻辑的方式将计算过程传递给计算机。
A.12. 极简主义:Scheme
Scheme 作为一种 Lisp 方言,同样诞生在 MIT,时间是 1975 年。
Scheme 第一个引入词法作用域,延续体,闭包等概念。并将数据和函数等同对待。
Scheme 的简约优美使它博得了计算机语言皇后的桂冠,并与另一个以优雅著称的 Pascal 一起成为教学语言。
Scheme 是函数式语言主要用于数学算法教学,Pascal 是命令式语言主要用于程序设计教学。
A.13.Algol 式语法的函数式语言:ML
ML 诞生于 1979 年,ML 开创了以 Algol 作语法的函数式语言的先河。
A.14. 强类型惰性纯函数式语言:Haskell
Haskell 是 1990 年标准化 Miranda 语言的结果。
Miranda 诞生于 1986 年,部分基于 ML 语言。
Haskell 最大的特点是惰性求值。
A.15. 支持面向对象的函数式语言:OCaml
Caml 诞生于 1996 年,基于 ML 和 Haskell。
OCaml 是 Caml 的面向对象版本,发布于 2006 年。
F# 是基于 OCaml 的.NET 平台版本,发布于 2010 年。
A.16. 嵌入式语言:Ada
Ada 语言诞生于 1980 年,是嵌入式系统应用语言。
Ada 83 是 1983 年的标准化版本。1995 年的,Ada 95 标准语言在 ARM 中定义。Ada 的最新版本是 Ada 2005。
Ada 广泛的用于商务、国防航空和交通运输等领域。
A.17. 纯面向对象语言:Smalltalk
Smalltalk 语言诞生于 1980 年,是第一个完全支持面向对象编程的语言。
Smalltalk 源于 SIMUAL 67,完善并定义了消息发送,和对象的继承关系。在 Smalltalk 中,所有数据都是对象:消息的发送者,消息的接受者,消息,消息的结果…。对象的类型是类。类中可以定义方法,属性等。
A.18. 命令式面向对象语言:C++
C++诞生于 1983 年,是在 C 的基础上,以 SIMUAL 67 的方式对命令式编程的面向对象扩展。
C++的成功在于完全兼容 C 的情况下支持了面向对象,从而使面向对象编程成为了命令式编程的一个子类,传统的命令式编程被叫做面向过程编程。因为对 C 的完全兼容,ASNI 在 1989 年的标准化版本 C 89,合并的两种语言,叫做 C/C++。
C/C++的最重要版本是 1999 年的 C 99。几乎吸收了当时被认为比较有效的计算机语言特性:面向过程编程、面向对象编程、泛型编程、自定义操作符重载等。
C/C++的最新是 2011 年发布的 C 11。引入的 lambda 表达式,垃圾回收等机制。由于 C/C++吸收了太多的语言特性,使得 C/C++成为世界上最难精通的语言,没有之一。
C/C++是目前使用人数最多的语言,和它一直竞争的是 Java。
A.19. 原型面向对象语言:Self
Self 诞生于 1986 年。
Self 源自于 Smalltalk。
Self 对面向对象做了深入与研究,提出了「万物皆对象」的思想。它删除了面向对象概念中的类的概念认为类也是一种对象;消息仍然作为最基本操作;把对象的属性理解为获取或更改属性这两种方法,从而把属性的概念简化为方法;取消了变量和赋值,替代它们的是通过消息来读槽和写槽。在 Self 中对象创建对象的方式是自我拷贝,所以叫做原型。
Self 是原型面向对象语言的鼻祖,就像 SIMUAL 67 是类面向对象语的鼻祖。
A.20. 另一个对 C 进行面向对象扩展的语言:Objective-C
Objective-C 诞生于 1983 年,后来被苹果公司选中,和 C++相似,也是对 C 的面向对象扩展。所不同的是 C++以 SIMUAL 67 的面向对象为基础,Objective-C 以 Smalltalk 的面向对象基础。
Object-C 一直伴随着苹果公司的操作系统一起发展,这两年随着 iOS 的开发被广泛使用。
A.21. 对 Pascal 进行面向对象扩展的语言:Delphi
Delphi 诞生于 1995 年,是对 Pascal 的面向对象扩展,借鉴了 C/C++的经验,但没有像 C/C++后来那样的疯狂变化。
A.22. 脚本语言:Perl
Perl 发布于 1987 年。
Perl 起源于操作系统的控制台(shell)的命令。用户将完成某个工作的所有命令保存在一个 sh 文件里,这样只要执行这个文件就可完成对应功能,省去每次都要输入所有命令的麻烦。sh 文件就叫做脚本。脚本只是一些命令行,可是发展到 Perl 时已经是一个相当成熟的语言了。
A.23. 关联列表函数式面向对象脚本语言:Lua
Lua 诞生于 1993 年,设计目的是嵌入引用程序,成为其脚本。
Lua 以其小巧性著称。
Lua 基于 Self 和 Scheme,它是第一个以关联列表最为主要数据的函数式语言。
A.24. 虚拟机面向对象语言:Java
诞生于 1995 年的 Java 1.0,来自于 Sun 公司,是第一个在虚拟机上运行的语言。
再这之前计算机语言要么:由解释器解释执行源代码(大多数命令式语言),叫做动态语言;要么:将源代码编译连接成实际的计算机指令后再由计算机执行(大多数命令式语言),叫做静态语言。
Java 运行于 JM(Java 虚拟机)上,JM 和解释器的区别是:JM 会将 Java 源代码编译成字节码,然后然后再由 JM 解释执行。由于编译和执行过程是交错的,所以从外部来看就像是 JM 直接执行 Java 源代码一样。当然也可以,事先将 Java 源文件编译好,这样 JM 就可以直接执行了。
Java 1.0 是 C++的简化版本,保留了具有数据类型和类等一小半功能,删除了结构体,泛型编程等一多半的功能。
Java 5.5 支持了泛型编程编程。最新版本是 2014 发布的 Java 8.0,支持了 lambda 表达式。
Java 是面向对象编程使用人数最多的语言。(C/C++的大部分人之使用 C 部分,即面向过程变成)。
Java 的强有力竞争对手是 C#。
A.25. 面向对象解释式脚本语言:Python
Python 诞生于 1989 年,作者为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为 ABC 语言的一种继承。
ABC 是作者开发的教学语言。
Python 和 Perl 用于相同领域,是面向过程+面向对象语言。
A.26. 纯面向对象解释式脚本语言:Ruby
Ruby 诞生于 1996 年,作者基于对 Perl 和 Python 的不满而设计,的纯面向对象脚本语言。
Ruby 基本等于 Smalltalk + Lisp。
A.27.Web 服务器脚本语言:PHP
PHP 诞生于 1994 年,是 Web 服务器脚本语言。
PHP 和 JavaScript 的语发相似,都是嵌入在 HTML 中,只不过一个在服务器端,一个在浏览器端。
A.28. 浏览器脚本语言:JavaScript
1995 年,网景公司发行的 Netscape Navigator 2.0,它的脚步语言就是 JavaScript。
JavaScript 和 Java 没有任何关系,它的前身是 ScriptEase。
ScriptEase 的诞生于 1992 年原名 C-minus-minus,是一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C 足够的相似性,以便开发人员能很快学会。
ScriptEase 基于 C 和 Self 语言,支持面向过程和原型面向对象编程。
JavaScript 后来由引入了 Lua 语言,支持以关联列表作为数据格式的函数式编程,这种关联列表这就是著名的 JSON。
最后 JavaScript 是一个:
表面叫 Java 脚本,但是和 Java 没有任何关系;
表面上是一个像 C 语言一样的面向过程语言,但实际上是一个原型面向对象语言;
表面上你创建了一个对象,但其实只是一个关联列表;
表面上你在定义变量和赋值,其实只是<键,值>对;
表面上你声明函数,其实只是<键,lambda 表达式>对。
表面上是一个命令式编程语言,但本质上是一个以关联列表为数据格式的函数式编程语言。
A.29 .NET 平台主语言:C#
C# 于 2000 年和.NET 开发平台一起由微软发布。
C# 是.NET 开发平台的主语言。.NET 开发平台包括,运行 IL 语言的虚拟机 CLR,基于 IL 语言的公共类库,用于编译产生 IL 语言程序的高级语言,以及支持这些高级语言开发的编译的基础开发环境。由于 CLR 和 IL 公共类库作为 Window 操作系统的一部分捆绑发布,所以 IL 语言程序可以再 Window 操作系统上直接执行,就行机器指令一样。
CLR 运行 IL 和 JM 运行 Java 一样,只不过 CLR 将 IL 编译成机器指令,然后在由计算机直接执行,而 JM 是将 Java 编译成字节码,然后由解释器解释执行。.NET 开发平台支持多种语言,其中 C# 是主语言。
C# 1.0 基于 Java 和 C++,以 Java 为基础将更多的 C++加入进来,并且吸收了一些 Delphi 和 Visual Basic 的特性。
C# 2.0 引入泛型编程。
C# 4.0 支持了 lambda 表达式,Linq 等。
最新版本是 2014 发布的 C#5.0。.NET 4.0 引入了动态类型,使得.NET 平台可以嵌入动态语言,比如:Lisp、Python、 Ruby 等。
A.30. 不再基础的 BASIC:Visual Basic .NET
Quick BASIC 由美国微软公司开发,1987 年推出,它是 BASIC 的继承者。
Quick BASIC 是 DOS 下的开发语言,后来随着 Window 系统的推出加入了图像化设计所以新的版本改名为:Visual Basic。
Visual Basic 是第一个支持可视化界面设计的语言。1998 年发布的 Visual Basic 6.0 是一个应用非常广泛的版本。
2001 年,Visual Basic 迁移到了.NET 平台上,改名 Visual Basic .NET。
Visual Basic .NET 对 BASIC 语言特性进行了重大改进。从此 Visual Basic .NET 伴随.NET 开发平台一起发展。
就本文讨论的话题,你有什么想法,欢迎在留言区跟大家分享讨论哦~
点击图片get更多精彩