计算机科学速成课 Crash Course Computer Science 第十一集 编程语言发展史 The First Programming Languages

计算机科学速成课 Crash Course Computer Science

第十一集 编程语言发展史 The First Programming Languages

伪代码

计算机能处理二进制,二进制是处理器的“母语”,这叫“机器语言”(machine language)或“机器码”(machine code)。在计算机早期阶段是必须用机器码写程序,具体来讲,会先在纸上用英语写一个“高层次版”,这种对程序的高层次描述称为“伪代码”(Pseudo-Code)。在纸上写好后,用“操作码表”把伪代码转成二进制机器码,翻译完成后程序可以输入计算机并运行。

汇编

在1940~1950年代,程序员开发出一种新语言,更可读并更高层次,每个操作码分配一个简单的名字叫做“助记符”(mnemonics),助记符后面紧跟着数据形成完整指令。与其用1和0写代码,程序员可以写“LOAD_A 14”。CPU并不知道LOAD_A 14是什么意思,只能理解二进制,所以程序员写二进制程序来帮忙,它可以理解文字指令并自动转成二进制指令,这种程序叫汇编器(Assembler),汇编器读取用“汇编语言”写的程序,然后转成“机器码”。随着时间推移,汇编器有越来越多功能,使得编程更容易,其中一个功能是自动分析 JUMP 地址,汇编器不用固定跳转地址,而是插入可跳转的标签,当程序被传入汇编器,汇编器会自己搞定跳转地址,程序员可以专心编程而不用管底层细节,隐藏不必要细节来做更复杂的工作。

即使汇编器有这些厉害功能,汇编只是修饰了一下机器码,一般来说,一条汇编指令对应一条机器指令,所以汇编码和底层硬件的连接很紧密,汇编器仍然强迫程序员思考用什么寄存器和内存地址,如果你突然要一个额外的数则可能要改很多代码。

编译器

葛丽丝·霍普博士作为美国海军军官,是哈佛1号计算机的首批程序员之一,这台机器在1944年战时建造完成并帮助盟军作战,程序写在打孔纸带上,放进计算机执行。Mark 1 的指令集非常原始(甚至没有 JUMP 指令),如果代码要跑不止一次,就得把带子的两端连起来做成循环。战后,霍普继续在计算机前沿工作,她设计了一个高级编程语言,叫“算术语言版本0”(arithmetic language version 0),简称“A-0”。汇编与机器指令是一一对应的,但是一行高级编程语言可能会转成几十条二进制指令。为了做到这种复杂转换,Hopper在1952年创造了第一个编译器(compiler),编译器专门把高级语言转成低级语言(比如汇编或机器码,CPU可以直接执行机器码)。

程序员不用管寄存器或内存位置,编译器会完成这些细节,程序员只需要创建代表内存地址的抽象——变量(variables)。

FORTRAN

FORTRAN,名字来自于“Formula Translation”,这门语言数年后由IBM在1957年发布,主宰了早期计算机编程。FORTRAN项目总监John Backus说过:“Much of my work has come from being lazy. I didn’t like writing programs, and so … I started work on a programming system to make it easier to write programs”。平均来说,FORTRAN写的程序比等同的手写汇编代码短20倍,然后FORTRAN编译器会把代码转成机器码。因为能让程序员写程序更快,所以成了一个更经济的选择,运行速度慢一点点,编程速度大大加快。

COBOL

当时IBM在卖计算机,因此最初FORTRAN代码只能跑在IBM计算机上,1950年代大多数编程语言和编译器只能运行在一种计算机上,如果升级电脑可能要重写所有代码。因此工业界,学术界,政府的计算机专家在1959年组建了一个联盟——数据系统语言委员会,Grace Hopper担任顾问,开发一种通用编程语言,可以在不同机器上通用,最后诞生了一门高级,易于使用,“普通面向商业语言”,简称COBOL。

为了兼容不同底层硬件,每个计算架构需要一个COBOL编译器,最重要的是,这些编译器都可以接收相同COBOL代码,不管是什么电脑,这叫“一次编写,到处运行”(write once,run anywhere),如今大多数编程语言都是这样,不必接触CPU特有的汇编码和机器码。

现代发展

在1960年代,有ALGOL,LISP和BASIC等语言,70年代有Pascal,C和Smalltalk,80年代有C++,Objective-C和Perl,90年代有Python,Ruby和Java,最新的有Swift,C#,Go。

发布了36 篇原创文章 · 获赞 5 · 访问量 5230

猜你喜欢

转载自blog.csdn.net/qq_43413123/article/details/104401440