高级编程语言发展历程.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级编程语言的发展历程 高级编程语言的发展历程 (一) 2010-07-20 高级编程语言的创始纪上写道:“初,世间无语言,仅电路与连线。 及大牛出,天地开,始有FORTRAN,LISP。ALGOL 随之,乃有万种 语。” 我们都知道,LISP 是基于递归函数的,FORTRAN 是做科学 计算的。现在的C 等等,都比较像 FORTRAN 而不像 LISP。可是很 少有人知道,最初,FORTRAN 是不支持函数递归调用的,而LISP 是一生下来就支持的,所有高级语言里面的递归调用,都是逐渐从 LISP 那里学来的。这段尘封的历史非常有趣,值得八卦一番。 一般人学编程,除了写 HelloWorld 之外,人生写的第二个程序,不 是阶乘就是菲波拉契数列,要不就是汉洛塔。而这几个程序,基本上 都是因为函数的递归调用才显得简单漂亮。没有递归的日子里, 人 民非常想念您。可是,第一版的 FORTRAN 就居然居然不支持递归。 细心的读者要问了,不支持递归的语言能图灵完全么?当然可以,图 灵机就是没递归的典型的例子。但是没递归调用的程序会很难写,尤 其像汉诺塔这种。那 么,FORTRAN 他怎么就悍然不支持递归呢, 让我们回到 1960 年。 话说当年,IBM 是计算机行业的领军者。那时候的计算机,都是比 柜子还大的大家伙,至于计算能力嘛,却比你的手机还弱。那时候计 算机所做的最多的事情,不是发邮件打游戏, 而是作计算。作计算 嘛,自然需要一种和数学语言比较接近的编程语言。于是,1960年, IBM就捣鼓出了FORTRAN,用行话说,就是公式翻译系统。这 个公 式翻译系统,就成了世界上第一个编程语言。这个编程语言能做数学 计算,能作条件判断,能 GOTO。用现在的眼光看,这个语言能构 模拟图灵机上的一切操作,所以是图灵完全的。学过数值计算的同学 都知道,科学计算无非就是一大堆数学计算按照步骤 进行而已。所 以,一些控制判断语句,数学公式加上一个数组,基本上就能完成所 IBM FORTRAN 有的科学计算了。 觉得这个语言够用了,就发布了 语 言规范,并且在自家的大型机上实现了这个语言。 在实现这个语言的时候,IBM 的工程师要写一个 FORTRAN 编译器 (请注意那时候的大型机没有操作系统)。那时候的编译器都是用机 器语言或者很低级的汇编语言写成的,所以编译器要越简单越好。这 些工程师觉得,弄一个让用 户运行时动态开辟内存的机制太麻烦了, 所以干脆,强迫用户在写程序的时候,就要定好数组的大小,变量的 类型和数目。这个要求并不过分,因为在科学计算中,数组的维度, 用到的变量等,在计算之前,就是可以知道大小的。用现在的话说, 就是不能动态开辟内存空间,也就相当于没有 malloc 的 C,或者没 有 new 的 C++。这样的好处是,一个程序要多少内存,编译的时 候就知道的一清二楚了。这个主意看上去很聪明,不过 IBM 的工程 师比你想得更加聪明,他们想,既然一个程序或者子程序要多少内存 在编译的时候都知道了,我们干脆就静态的把每个子程序在内存中的 位置,子程序中参 数,返回值和局部变量放的位置,大小都定好, 不久更加整齐高效么。是的,我们都知道,在没有操作系统管理的情 况下,程序的内存策略越简单越好,如果内存放 的整整齐齐的,计 算机的管理员就能够很好的管理机器的内存,这样也是一件非常好的 事情。 (再次强调,当年还没有操作系统呢,操作系统要等到1964 年发布 的 IBM360 才有,具体开发一个操作系统之难度可参考《人 月神话》)。 可是,聪明的读者一下子就看出来了,这样静态的搞内存分配,就递 不成归不了了。为啥呢?试想,我有个 Fib 函数,用来计算第 N 个 菲波拉契数。这个函数输入一个整数,返回一个整数,FORTRAN 编 译器帮我把这个函数给静态分配了。好,我运行 Fib(5) 起来, FORTRAN 帮我把 5 存在某个专门给输入参数的位置。我在 Fib(5) 里面递归的调用了Fib(4),FORTRAN 一看,哈,不还是 Fib 么,参 数是 4,我存。这一存,新的参数4,就把原来的 5 给覆盖掉了, 新的返回值,也把原来的返回值给覆盖掉了。大事不

文档评论(0)

kfcel5460 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档