前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >因为对Perl和Python不满?圣诞节无聊?编程语言的出现都这么随意吗?

因为对Perl和Python不满?圣诞节无聊?编程语言的出现都这么随意吗?

作者头像
顶级程序员
发布2018-04-26 17:31:00
1.6K0
发布2018-04-26 17:31:00
举报
文章被收录于专栏:顶级程序员顶级程序员

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 开发平台一起发展。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 顶级程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档