计算机语言总的来说分为机器语言,汇编语言,高级语言三大类,而这三种语言也恰恰是计算机语言发展历史的三个阶段。其中,汇编语言几乎成为了每个科班学生的噩梦。
我希望从计算机语言编程语言的发展历史中,了解每一种编程语言在哪个历史时代背景中独特的魅力、它为什么而诞生、为什么能够推动计算机科学界的前进。
同时,我更愿望从这些编程预言的发展历史中,找到编程语言们的核心特性与共性
,深度理解编程语言的底层原理和实现思想
,构建自己的编程语言知识体系
。
先来一波高级编程语言发展图:
机器&汇编语言
1946年2月14日,世界上第一台计算机ENAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家(机器)才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。
其实,机器语言就是由0和1两种元素组成。所谓的穿孔卡片
也就是一条纸带,上面充满了0和1的序列,ENAC就是通过读取这种序列,来实现计算的。机器语言也就成为了第一代计算机语言。
由于第一代计算机语言(机器语言)的特性(人类根本没法看懂),导致了许许多多的问题,例如,对于程序编程员的要求极高(像我这种面向百度编程的人,就算了);运算结果出错了,根本没法排除…
于是,汇编语言诞生了。汇编语言用助记符代替了操作码,用地址符号或标号代替地址码。
这样就用符号代替了机器语言的二进制码。汇编语言也称为符号语言。比起机器语言,汇编大大进步了。至少,人类可以直接从汇编语言中看懂它,知道它实现了什么功能。
尽管还是复杂,用起来容易出错,但在计算机语言发展史上是机器语言向更高级的语言进化的桥梁。
高级语言的诞生
当计算机语言发展到第三代时,就进入了“面向人类”的高级语言。也就是说,可以直接用人类能够看得懂的字符进行编程 —— 编写机器能够直接运行的程序。
但是,要注意,机器运行的还是二进制的机器语言,只是人类在编写好高级语言后,将它转换成了机器语言而已,请看下图。
第一个高级计算机语言:Fortran 诞生于1957年,由IBM设计,是世界上第一个真正的面向人类的计算语言。
运行于IBM704计算机上。
支持:变量(变量名最多6个符)、if和do语句、格式化IO。
不支持:数据类型声明单独编译子程序。
Fortran的设计思想基于冯诺依曼体系结构式命令式语言的鼻祖。
在其后的几年间,Fortran还发布了新版本。
- Fortran Il发布于1958年,主要对Fortran I的编译器做了优化,并支持了单独编译的子程序。
- Fortran IV发布于1962年,并在1966年被标准化为Fortran65,这也是第一个Fortran的标化版本。
- 1978年的Fortran77是非重要的标准化版本,这时的Fortran语已经大量的引进了其他计算机语言的持中,例如字符串处理、逻辑判断、带else子句的if语句等·
- Fortran的最新标准化版是Fortran2008。
早年间重要的编程语言:
- 源于数学的计算机语言:
Lisp
。诞生于1950年。主要发明人是约翰·麦卡锡。 - 通用科学计算语言:
Algol
。在Fortran I的基础做了扩展,并兼谷了当时其他语言的一些特性,成为了程序设计思想的集成。 - 通用商务语言:
COBOL
。COBOL语言于1960年发布。注意真对商务应用。语言的设计理念是:“数学程序应该用数学记法来写,数据处理程序应该用英语匀来写"。商务应用显然属于后者,所以COBOL语言看起了就像是全大写的英语。 - 跨领域语言:
PL/I
。诞生于1964年,是跨科字计算和商务应用领域的计算机语言。 - 正交设计:
Algol68
。发表于1968年,第一个引入正交化设计的既念,以及用户目定义数据类型。 - 初学者(文科生)的语言:
BASIC
。诞生于1971年,设计的主要目的是:使得计算机言可以被非理工科生使用(当时理工科字生使用的Fortran和A|gol60很难被文科生掌握)。这样的设计目的使得BASIC非常适台于初学者。 - 学院派语言:
Pascal
。诞生于1971年,重大影响来自于程设计教学。在工业界也有广泛的使用。
大佬来了:C语言
有人说,C语言是世界上最好的语言,也有人说,C语言是世界上最重要语言,还有人说,,,(不吹逼,反正它很牛逼)
故事,要从MULTICS的项目
说起。
- 该项目由**美国电话及电报公司(AT&T)、通用电器公司(G.E.)及麻省理工学院(MIT)**计划合作开发一个多用途、分时及多用户的操作系统,也就是这个MULTICS,其被设计运行在GE-645大型主机上。
- 贝尔实验室中的有个叫 Ken Thompson 的人,他为 MULTICS 这个操作系统写游戏了个叫“Space Travel”的游戏,在 MULTICS 上经过实际运行后,他发现游戏速度很慢而且耗费昂贵。
- Ken在退出这个项目以后。他为了让这个游戏能玩,所以他找来Dennis Ritchie为这个游戏开发一个极其简单的操作系统。
Unix
的诞生。
- 对于ken Thompson和Dennis Ritchie写出的那个操作系统,就是后来大名鼎鼎的Unix。当时是1969年8月。
- 到了1973年的时候,Ken Thompson 与 Dennis Ritchie由于一些原因,决定重写Unix系统。他们用一个叫BCPL的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,就是就改良了B语言,这就是今天的大名鼎鼎的C语言。
- 自那以后,Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。
C语言与Unix有这千丝万缕的关系,可以说,没有Unix,就没有C语言。
如果你要真正的了解C语言,就必须了解Unix。请参考这篇文章:你不知道的过去 - Linux 系统发展史小览 (与Unix区别科普文)
C
语言。
- BCPL,诞生于1967,是剑桥大写,它的祖先是1962年诞生于同一所大学的CPL语言。
- B和汇编一样数据类型就是机器字这极大的限制了B程在不同位数的机器之间的迁移。B的这种不可一致性寻致了C的产生。
- C语言就是B的改进版本,同样以BCPL基础。
- C语言浯法中对操作符的大量灵活的使用,极大的影响了后来的一批程序语言。
面向对象
面向对象的鼻祖,是Smalltalk
。诞生于1980年,是第一个完全支持面向对象编程的语言。
它有这以下的面向对象特性:
- Smalltalk源于SIMUAL 67,完善并定义了消息发送和对象继承关系。
- 在Smalltalk中,所有的数据都是对象:消息的发送者,消息的接送者,消息的结果。
- 对象的类型是类,类中可以定义方法、属性等。
C++
一句话说明白: C++诞生于1983年,是在C的基础上,又附带着面向对象的特性。
由 **Bjarne Stroustrup **于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。最初,这种新语言被称为“带类的C(C with Classes)
”。
1983 年,“带类的C”加入虚函数、函数和运算符重载、引用等概念后,正式定名为“C++(C plus plus)
”。
1985 年,C++ 最权威的著作、由 Bjarne Stroustmp 撰写的《C++程序设计语言》(The C+ + Programming Language)
第一版发布。
1989 年,C++ 2.0 版发布,加入了多重继承、抽象类、静态成员、常量成员函数
等概念。1990 年,又加入了模板、异常处理、名字空间
等机制。
1998 年,ANSI(美国国家标准协会)和 ISO(国际标准化组织)联合发布了至今使用最为广泛的 C++ 标准,称为** C++ 98**。C++ 98 最为重大的改进就是加入了 “标准模板库”(Standard Template Library, STL)
,使得“泛型程序设计”成为 C++ 除“面向对象”外的另一主要特点。
核心特性:
- C++的完全兼容C的情况下支持面向对象,从而使面向对象编程成为了命令式编程的一个子类,传统的命令式编程被叫做面向过程编程。
- 因为对C的完全兼容,ASNI在1989年的标准化版本C89,合并的两种语言,叫做C/C++。
- C/C++的最终版本是1999年的C99。几乎吸收了当时被认为比较有效的计算语言特性:面向过程编程、面向对象编程、泛型编程、自定义操作符重载。
- C++语言特性直接支持四种程序设计风格:过程式程序设计、数据抽象、面向对象程序设计、泛型程序设计
同时代下的其他编程语言:
- 另一个对C进行面向对象拓展的编程语言:
Object-C
。 - 脚本语言:
Perl
。发布与1987年,其起源于操作系统平台下的控制台(Shell)。
Java
Java语言可以说是世界上少有的核心语言之一了,它的独特性质支撑它在今天风靡整个互联网。成千上万的人投入它的怀抱,参与、使用Java开发。
Oak的诞生
- SUN(Stanford University Networ(斯坦福大学网络公司) MicroSystems)在一定的商业背景下,在1991年成立了一个由
詹姆斯·高斯林(James Gosling)
领导,名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。 - 该小组经历了一些尝试后,决定:对C++进行改造:去除了C++复杂的指针和内存管理,并结合嵌入式系统的实时性要求,终在1992年,他们开发了一种名为“
Oak
”的面向对象语言。
Java的出现
- 1994年,项目小组看到了浏览器在未来的发展前景,于是决定将OaK应用于万维网。
- 在商业利益的催化下,Oka决定正式注册,但由于商标搜索显示Oak已被一家显卡制造商注册。于是1995年,Oak被改名为Java。
- 1996年1月,第一个JDK-JDK1.0诞生。
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译
,第二种是解释
。(即编译或解释:把高级语言转换成机器语言)
- 编译:将源代码编译链接成实际的计算机指令后再由计算机执行。
- 解释:由解释器解释执行源代码。
- 而Java却把这两种特性结合起来,做成了编译解释型语言。
因为它引入了Java虚拟机的概念,打破了以前的语言的与平台相关这一缺点:
- Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
- Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Python
1989,Guido von Rossum
开发一个新的脚本解释程序,也就是Python。他希望新的语言Python能够满足他在C和Shell之间创建全功能、易学、可扩展的语言的愿景。
据说,Guido为了打发圣诞节的无趣,才想着开发了Python。Python这个名字来自Guido的喜爱的电视连续剧《蒙蒂蟒蛇的飞行马戏团》。
Python是面向对象的解释型脚本语言,同时,它也是编程语言中的新星,在当下的诸多领域发挥着重要作用,好比人工智能、深度学习领域,爬虫与大数据等等。
此外,还有许多著名的编程语言:
- 纯面向对象解释型脚本语言:Ruby。
- Web服务器脚本语言:PHP。
- 浏览器脚本语言:JavaScript。注意一点的是它和Java没有任何关系!
- Microsoft家的.NET平台主语言:C#。
一些总结:
- 在经历的四年的编程语言学习后,我会发现,编程语言的发展是由复杂到简单的趋势,并且越来越“高级”。其中的复杂指的是程序员的开发难度,因为所有的复杂都被封装了。尽管这样,我还是觉得它的底层,或者说叫做封装的东西,依然十分重要。
- 做一个简单的发展历史,从中窥见各类编程语言的共性和个性。
- 我真正想要达到的是:从一门解释型脚本语言Python中,学会所有的脚本型编程语言;从一门编译型编程语言C/C++中,学会所有的编译链接型语言;从编译解释型编程语言Java,学会所有的编译解释型语言。
- 最后,来一张高级编程语言的互联图:
来源:CSDN
作者:多重人格递归
链接:https://blog.csdn.net/ComputerGeekHack/article/details/104481047