代码改变世界

计算机语言发展史

2011-04-27 08:18  Min·zc  阅读(882)  评论(0编辑  收藏  举报

被逼着写的院刊搞

-------------------------------------------------------------------------

计算机语言作为人们与计算机“交流”的工具,从产生到现在已有两百多年的历史。自最初的机器语言到汇编语言,再到现在的高级语言,计算机语言的大家庭可谓是百花齐放,百家争鸣。据统计,计算机语言有几千种之多。虽然有些计算机语言被淹没在科技发展的巨大浪潮中,逐渐被人们所淡忘,但是每一种计算机语言都是人类智慧的结晶,将永远闪耀在历史的长河之中。

 

程序设计语言的萌芽

 

早在200多年前,程序设计语言被发明之前,就有一个人设计出了第一个程序,并将它打在了硬纸卡片上,这个人就是爱达·勒芙蕾丝Ada Lovelace)。现在就让我们穿越时光的河流亲自目睹一下这位19世纪Geek女神的风采。

她是拜伦的女儿,母亲是业余数学爱好者。艾达继承了父亲飘逸的思想和母亲严谨的思维,这些都为她后来的学术研究奠定了良好的基础。艾达从小就接受了非常良好的教育,在她的家庭教师之中不乏一些赫赫有名的人物,例如提出了徳·摩根定律的数学和逻辑学家奥古斯都·徳·摩根,以及女科学家玛丽·索麦维。在后者的介绍下,不满18岁的艾达在一次聚会上认识了查尔斯·巴贝奇(CharlesBabbage)。两周后艾达同母亲一起拜访了巴贝奇在伦敦的实验室,巴贝奇为她演示了差分机的操作以及对分析机的设计,艾达被这些神奇的机器深深的吸引了,从此艾达与巴贝奇两个人的命运的藤蔓就紧紧的交织在了一起。

 

这里不得不介绍另一个计算机界的传奇人物-查尔斯.巴贝奇。查尔斯巴贝奇是第一台可编程计算机的发明者,1822年他制造了第一台差分机,将人们从繁重的对数计算中解脱出来,能够进行三个五位数的加法运算,结果能达到六位数。所谓"差分"的含义,是把函数表的复杂算式转化为差分运算,用简单的加法代替平方运算。通过差分机,巴贝奇看到了制造一种在性能上大大超过差分机的计算机的可能性,这个机器就是后来他一直努力完成的分析机。巴贝奇设想的分析机采用十进制计算,用齿轮存储100050位数,能做平方和四则运算。这台用蒸汽机驱动的机器有三十米长和十米宽,每秒钟能够计算一次,并且能够自动跟踪指令。

 

1836118日开始,艾达开始与巴贝奇通信,来共同讨论差分机及分析机的问题,艾达为巴贝奇的研究提供了大量有价值的建议,对于分析机的设计和用途艾达甚至比巴贝奇本人看的更远,艾达认为分析机不但可以用来进行计算更可以用来进行作曲,。关于艾达的工作巴贝奇本人回忆道“在日内瓦综合书目上出现Menabrea关于这个机器的实录后,有一天晚上拉夫拉斯伯爵夫人告诉我,她已经把这篇东西由法文翻译成英文。我问她,为什么不就这个题目自己写一篇原创性的论文,你是能够非常亲切地介绍这个机器的。拉夫拉斯伯爵夫人答复道:她的思想还没有形成。然后我建议她在Menabrea文章上加些注释。这个建议立即被她采纳了。”“我们一起讨论了必须引入的各种插图,我建议了几个,但是否选择完全由她决定。还有一些不同问题的代数工作,例如有关伯努利数的计算,为了减少她的麻烦,我给出一些计算。结果她寄来一份修订,纠正了我在计算中的一个重大错误。”,“拉夫拉斯伯爵夫人的注释比原文的长度扩展了三倍。她全力以赴,对于和这个题目有关的很困难、很抽象的问题都作了解释。把这两个资料一起提供给读者,就能理解机器的工作原理,并通过完整的示范,了解如何使用分析机去执行分析开发的任务。”

 

在这些注释中,艾达详细的描述了分析机的编程方式,提出了很多的程序设计的想法,这就是最早的程序设计思想:

爱达引入“返回”(backing)的概念,制作一个操作卡返回到某个位置,而它就是将要工作的下一个数据卡。她解释这样做的原因是:“在解决一个问题的方案中,能确保某个特殊的穿孔卡或者一组卡能成功地使用若干次”这个思想我们今天称为“循环”(looping)

她解释了机器如何拥有三角函数和其他函数。这就在计算机内部引入了内建函数(built-in function)的思想。

她给出利用返回处理(循环),仅通过重复几个操作,来解一个任意大小的线性方程组。她详细写出解十元线性方程组的程序。她还推测通过简单的循环过程生成素数表的可能性。

爱达警告读者,如果输入“不真实”的信息,那么计算机就不能做任何事情。今天我们把这称为“输入垃圾,输出垃圾”(Garbage in, Garbage out)。她写到:“分析机不能自命不凡,无论什么问题都能解决。它只能完成我们告诉它如何做的事情。它能遵循分析,但没有能力预期任何分析关系或事实。

爱达还写了一个程序,让分析机生成伯努利数的表。

 

艾达不但是科学上有着极高的造诣,她在艺术上也有自己的独到的见地。她经常与玛丽·索麦维一起去听音乐会,还一起去伦敦大学听地理学讲座。后来还一起组建了女学者联谊会,组织参观博物馆,拜访科学家等活动。

 

艾达的形象完美的体现了一位程序员应该具备的科学家与艺术家的双重气质。一方面程序员需要在数学概念,形式理论和符号表示等基础上应该有科学家的气质。另一方面,对于一个高效的,可靠的便于维护的软件系统,程序员必须刻画他的细节并吧他组成一个和谐的整体,所以程序员又应该具备艺术家的风度。

 

汇编语言的诞生

 

时间的长河慢慢流淌,随着人类科技的进步,机械式的计算机已经不能满足人类对于更快更准确计算的需求,随着真空管元件的发明以及图灵机,冯诺依曼结构等理论的问世,发明电子计算机可以说是万事俱备只欠东风了。终于在1940年代,随着计算机Z3的降生,计算机迈入了电气化时代。

 

在电子计算机刚刚问世的时候,因为没有编程语言,每次编程都需要重新连接计算机的电器线路,需要10几个人花费几天的时间才能完成线路的连接。为了控制计算机,进一步完善了计算机的设计,并最终呈现出我们今天所熟知的冯诺依曼结构,这样人们就可以通过指令来实现对计算机的控制。这时科学家们只能使用低级的机器语言,也就是0,1字符串来进行编程。只有接受过非常专业的训练的人员才能进行计算机的操作。

 

为了减轻使用机器语言的痛苦,提高计算机程序设计的效率,人们决定使用一些简洁的英文字母来代替01组成的字符串指令。比如使用“ADD”来代表加法,“MOV”代表数据的传送等等。这也就是我们现在耳熟能详的汇编语言。因为汇编语言是机器语言便于记忆和理解的符号形式,所以它又叫做助记符。但是对于上面的那些字符计算机是不能理解的,所以我们需要一个专门的程序来将这些助记符转化为计算机能看的懂的01字符串,这种翻译程序就是汇编器。虽然汇编语言与机器语言之间存在着紧密的联系,但是这并不是说汇编语言与机器操作对等。在CISC结构CPU上,汇编语言可能被汇编器翻译成多个微指令,所以有多少种CPU就有多少种汇编语言。因为十分依赖于机器硬件,所以汇编语言的移植性非常不好。

 

DATASSEGMENT
  a db 'Hello world!$'  
DATAS ENDS

STACKS SEGMENT
  ;
此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
  ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
  MOV AX,DATAS
  MOV DS,AX
    
  lea dx,a
  mov ah,9
  int 21h
    
  MOV AH,4CH
  INT 21H
CODES ENDS
  END START、


第一个成功的高级语言


 为了克服汇编语言的局限性,Fortran等高级语言在那些伟大的先驱的努力下破茧而出。

第一个高级程序设计元一年Fortan1954年诞生在IBM公司华生科学实验室,它的父亲是著名的计算机科学家约翰.贝克斯。Fortan的名字来自于Formula translate(公式翻译)的缩写。Fortran语言自1957年开始商业发行至今的50年中,始终作为科学和工程计算的最好的语言。

 

先简答介绍一下高级语言的概念,让大家热一下身。高级语言又名第三代程序设计语言,前两代分别为机器语言和汇编语言。它使用的是人类惯用的文字和句法,与具体的计算机种类无关,为了让计算机能够理解某一种高级语言的程序,需要一个程序充当翻译,将高级语言翻译成汇编语言,这个“翻译员”就是编译程序。

 

约翰贝克斯1924年出生于美国费城。年轻时的贝克斯不爱读书,成绩很差,挂科犹如家常便饭,大学时还因为出勤率太低被学校开除。贝克斯随即参了军,在部队里学习了医学,1946年,他离开部队,留在了纽约。他感觉自己的人生一片迷茫,不知道应该干什么。因为他喜欢音乐,想拥有一套高保真的收放音设备,但是很那个时代这种设备还没有被发明出来,所以他决定自己发明一台理想的收音机。于是他报名参加了一个收音机技术的学习班。在那里,他帮助教师计算放大器的功能曲线。这项枯燥的工作中贝克斯被数学的美感吸引,离开学习班他立即到哥伦比亚大学学习数学。

 

1949年贝克斯毕业之后再IBM找到了一份SSEC操作员的工作。由于程序必须通过穿孔纸带输入,机器的成千上万个电子机械部件又不可靠,经常出故障,因此机房里操作员、管理员、程序员们忙成一团,查线路的,查手册的,讨论和争论问题的……气氛忙乱而热烈。工作了几年之后,他对于机械式的程序设计感到厌烦,希望能开发出一套易记易用的语言,而且要求在计算上能准确高速的运行。1953年,贝克斯给IBM董事长卡斯伯特·赫德写了一个备忘录,概述了他正在研制的新型程序设计语言的思路,他的这一设想得到了公司的支持。贝克斯召集了一些数学家和程序员组成了他的研究团队。他们面临的挑战不是设计语言本身,而是设计出一条编译程序。编译程序应包括分析器的模块,有模块来识别升序语言的各种成分,然后将他们从人们能理解语义的高级语言转化为机器语言,而这一过程要求计算能自动进行,而不是像那个时代的其他语言那样进行手工的机器编码。

 

两年之后的,1957420日星期五的下午,一位IBM编程员决定在电厂内编译第一支FORTRAN编程,当代码输入后,经过编译,打印机列出一道消息:源程序错误……右侧括号后面没有逗号,现场人员都感到讶异,这个错误经过修正之后,编程编译器再度运行,二十二分钟后,打印机输出正确结果。西屋电气公司意外地成为FORTRAN的第一个商业用户。

 

Fortran语言主要用于数值计算,它的特点是接近数学公式,简单易用,功能逐步扩大,如允许复型和双精度浮点运算,子程序定义机制,输入输出的格式说明,允许布尔表达式,函数和子例程名可以作为参数传递,等等。作为世界上第一个高级程序设计语言,它对其后出现的上千种高级程序设计语言都有或大或小的影响,它本身也经历了许多重大的变革,有许多版本。据不完全统计,从20世纪50年代诞生至今,Fortran共出现过90多个版本。

 

除此之外,贝克斯还创造了巴库斯诺尔范式,一种为高级语言提供语法规则的方法和另一种叫FP的函数程序设计语言。

 

贝克斯因发明,Fortran语言1976年货美国国家科学奖章,1977年获得图灵奖,1993年货美国国家工程学会最高奖“查尔斯。S。德雪帕”奖。