从零开始,计算机编程语言简史

计算机语言总的来说分为机器语言,汇编语言,高级语言三大类,而这三种语言也恰恰是计算机语言发展历史的三个阶段。其中,汇编语言几乎成为了每个科班学生的噩梦。

我希望从计算机语言编程语言的发展历史中,了解每一种编程语言在哪个历史时代背景中独特的魅力、它为什么而诞生、为什么能够推动计算机科学界的前进。

同时,我更愿望从这些编程预言的发展历史中,找到编程语言们的核心特性与共性,深度理解编程语言的底层原理和实现思想,构建自己的编程语言知识体系


先来一波高级编程语言发展图:

在这里插入图片描述

机器&汇编语言

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的项目说起。

  1. 该项目由**美国电话及电报公司(AT&T)、通用电器公司(G.E.)及麻省理工学院(MIT)**计划合作开发一个多用途、分时及多用户的操作系统,也就是这个MULTICS,其被设计运行在GE-645大型主机上。
  2. 贝尔实验室中的有个叫 Ken Thompson 的人,他为 MULTICS 这个操作系统写游戏了个叫“Space Travel”的游戏,在 MULTICS 上经过实际运行后,他发现游戏速度很慢而且耗费昂贵。
  3. Ken在退出这个项目以后。他为了让这个游戏能玩,所以他找来Dennis Ritchie为这个游戏开发一个极其简单的操作系统。

Unix的诞生。

  1. 对于ken ThompsonDennis Ritchie写出的那个操作系统,就是后来大名鼎鼎的Unix。当时是1969年8月。
  2. 到了1973年的时候,Ken Thompson 与 Dennis Ritchie由于一些原因,决定重写Unix系统。他们用一个叫BCPL的语言开发,他们整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,就是就改良了B语言,这就是今天的大名鼎鼎的C语言
  3. 自那以后,Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导。

C语言与Unix有这千丝万缕的关系,可以说,没有Unix,就没有C语言。
如果你要真正的了解C语言,就必须了解Unix。请参考这篇文章:你不知道的过去 - Linux 系统发展史小览 (与Unix区别科普文)

C语言。

  1. BCPL,诞生于1967,是剑桥大写,它的祖先是1962年诞生于同一所大学的CPL语言。
  2. B和汇编一样数据类型就是机器字这极大的限制了B程在不同位数的机器之间的迁移。B的这种不可一致性寻致了C的产生。
  3. C语言就是B的改进版本,同样以BCPL基础。
  4. 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的诞生

  1. SUN(Stanford University Networ(斯坦福大学网络公司) MicroSystems)在一定的商业背景下,在1991年成立了一个由詹姆斯·高斯林(James Gosling)领导,名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。
  2. 该小组经历了一些尝试后,决定:对C++进行改造:去除了C++复杂的指针和内存管理,并结合嵌入式系统的实时性要求,终在1992年,他们开发了一种名为“Oak”的面向对象语言。

Java的出现

  1. 1994年,项目小组看到了浏览器在未来的发展前景,于是决定将OaK应用于万维网
  2. 在商业利益的催化下,Oka决定正式注册,但由于商标搜索显示Oak已被一家显卡制造商注册。于是1995年,Oak被改名为Java
  3. 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#。

一些总结:

  1. 在经历的四年的编程语言学习后,我会发现,编程语言的发展是由复杂到简单的趋势,并且越来越“高级”。其中的复杂指的是程序员的开发难度,因为所有的复杂都被封装了。尽管这样,我还是觉得它的底层,或者说叫做封装的东西,依然十分重要。
  2. 做一个简单的发展历史,从中窥见各类编程语言的共性和个性。
  3. 我真正想要达到的是:从一门解释型脚本语言Python中,学会所有的脚本型编程语言;从一门编译型编程语言C/C++中,学会所有的编译链接型语言;从编译解释型编程语言Java,学会所有的编译解释型语言。
  4. 最后,来一张高级编程语言的互联图:
    在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值