Report of program history
机器语言(1940年之前)
使用0和1的二进制码,但是在做计算的时候,比如768 ,我们要写为1100000000,其它的数以此类推,如果再做加减乘除就会变的更加的麻烦,如果要输出一个helloworld,可能要几百个01的组合,看都没法看,更不要说去查找错误了!归纳一下,机器语言的问题就是 太难写,太难读,太难改!
汇编语言(20世纪40年代)
汇编语言虽然解决了机器语言读写复杂的问题,但本质上还是面向机器的,写这个语言需要我们去了解计算机底层的知识。例如CPU指令,寄存器,段地址等底层的实现细节,编写也很复杂。
高级语言(20世纪50年代)
为了解决汇编语言的问题,高级语言应运而生,高级语言的特点就是让程序员不再去关注底层,而是把重心放到业务上来!除此之外,通过编译程序的处理,高级语言可以被编译为适合不同CPU指令的机器语言。程序员只要写一次程序,就可以在不的机器上运行!
第一次软件危机与结构化程序设计(20世纪60年代-20世纪70年代)
高级语言的出现,解放了程序员,但是随着软件规模以及复杂度的大大增加,20世纪60年又爆发了一次危机,最出名的事件当属 IBM System/360的操作系统的开发,耗时很久,最后失败告终!因为我们采取了面向过程的思想,但是软件复杂度变大的时候,这种思想开发就产生很多问题,比如代码不好去管理,耦合性变强!在此基础上就提出了,结构化编程的思想,所谓结构化编程本质上还是面向过程的思想,但是通过 自顶而下,逐步细化,模块化的方法,将软件的复杂度控制在一定的范围!
第二次软件危机与面向对象(20世纪80年代)
结构化程序设计虽然风靡一时,但是随着软件复杂度进一步的加大,这种思想已经不能满足需求了!这个时候面向对象的思想便应运而生,到现在,面向对象已经成为一种主流思想,java就是把面向对象推向高峰的一种语言!
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的设计思想基于冯诺依曼体系结构是命令式语言的鼻祖。
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演算和基础上,是函数式编程的鼻祖。
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除外。