acm-header
登录

ACM通信

BLOG@CACM

格雷斯·霍珀创造了第一个编译器吗?


赫伯特Bruderer

Heinz Rutishauser(瑞士苏黎世联邦理工学院)被认为是自动编程.这是基础编译器(高级编程语言到机器语言的翻译程序)(见Heinz Rutishauser: Automatische Rechenplanfertigung bei programgesteuerten Rechenmaschinen, Birkhäuser Verlag, Basel 1952)。那时有人谈到了“自动编程”。然而,这个术语具有误导性,因为指令是由人编写的,而不是由机器编写的。

Rutishauser也是大陵五编程语言例如,德国的弗里德里希·鲍尔(Friedrich Bauer)也为其发展做出了贡献。Algol作为一系列“后代”(算法语言)的基础,如Pascal。

凭借他的编程语言Plankalkül, Zuse远远领先于他的时代。然而,由于几乎没有人注意到这一点,它的影响自然是非常有限的。Grace Hopper(美国,1952年)和Corrado Böhm(意大利,1954年)关注公式翻译器(编译器),Halcombe Laning和Niel Zierler(美国,1954年)也是如此。

编译器的前体是PlanfertigungsgerateKonrad Zuse的Z4(1945年,也称为Programmator,未完成)和Howard Aiken的Harvard Mark 3(1950年)。指令磁带是用加密机编码的(见Heinz Rutishauser, Ambros Speiser;Eduard Stiefel:数字程序Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag,巴塞尔1951,第10页和第63页)。

根据下面的解释,程序是用高级编程语言编写的,而计算计划是用机器语言编写的:

为了区分术语“程序”和“指令序列”(也称为计算计划[…]),这里再次强调,程序表示给定问题的非常一般的数值解,表示为公式和命令,这实际上适用于每一台自动计算机。相比之下,指令序列这个术语总是指特定的计算机(参见Heinz Rutishauser, Ambros Speiser和Eduard Stiefel: programgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951, 43-44页)。

同样的作者也谴责(1951年)一方面高计算速度和不充分的操作可靠性之间的差距,另一方面,在穿孔胶带制作之前的时间准备问题。

不可否认的是,程序控制的计算机偶尔会产生由其组件(继电器、真空管、电阻、电容器、机械部件等)引起的错误(见Heinz Rutishauser, Ambros Speiser和Eduard Stiefel: programgesteuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951,第63页)。

每条程序指令的平均执行频率越高,程序控制计算机的使用就越有价值,因为相对较高的准备成本就不那么重要了。事实上,建立一个程序比在办公室计算器上一次性计算所有指令要大得多(参见Heinz Rutishauser, Ambros Speiser和Eduard Stiefel: programming steuerte digitale Rechengeräte (elektronische Rechenmaschinen), Birkhäuser Verlag, Basel 1951,第45页)。

Konrad Zuse的Plankalkül通常被认为是第一种编程语言。然而,调查中出现了程序翻译器编译器,相当罕见。关于它的起源有不同的观点。在一些出版物中,功劳给了Grace Hopper(美国),尽管这是有争议的。在这种情况下,优先级问题的答案再次取决于定义。

在计算机科学的开端,如前所述,有人谈到了自动编程。今天意义上的“编译器”一词出现得比较晚。它的含义随着时间而变化。在一次关于数字计算机自动编程的研讨会上(1954年5月),这个短语的用法因谈话内容的不同而不同。

一些所谓的“编译器”的复杂程度非常有限。根据唐纳德·克努特的说法,这也适用于霍珀的设计。美国技术历史学家Paul Ceruzzi评论道:

今天,“编译器”一词已经被广泛使用,指的是一种程序,它可以把用人类可以接受的语言编写的指令转换成计算机可以执行的二进制代码。这个意思并不是霍珀所想的。对她来说,编译器处理存储在库中的子程序。根据霍珀的定义,编译器方法是将子程序代码复制到主程序中程序员想要使用它的适当位置的程序”(参见Paul E. Ceruzzi:现代计算史,麻省理工学院出版社,剑桥,马萨诸塞州,伦敦,2003,2)nd版,第85页)。

这些子程序用于计算,例如三角函数、对数和浮点表示法。


Corrado玻姆(意大利)

苏黎世联邦理工学院Z4 Zuse机器的经验促使意大利人Corrado Böhm开发了一个编译器(博士论文1954年)。


Alick Glennie(英国)

英国计算机科学家J. M. Bennett和Alick E. Glennie在他们的贡献“高速数字计算机编程”(1953)中提到了Autocode这个名字。根据克里斯托弗·s·斯特雷奇(Christopher S. Strachey)的说法,这个编译器从1952年9月开始与曼彻斯特马克1号计算机一起使用。

霍珀在格伦尼之前发表了她的文章。尽管如此,Knuth认为Glennie是第一个创造者真正的实际实现和使用的编译器(参见Donald E. Knuth;Luis Trabb Pardo:编程语言的早期发展,在:Nicholas Constantine Metropolis;杰克Howlett;Gian-Carlo Rota(编辑):《二十世纪计算机史》,学术出版社,纽约,伦敦等1980年出版,第218页)。


霍珀(美国)

1952年春天,格蕾丝·默里·霍珀的第一台“编译器”A-0在Univac计算机上运行。这是她在第一届ACM全国会议(1952年匹兹堡)上的演讲“计算机教育”的主题。随后的改进型是A-1(1953年1月)和A-2(1953年8月)。A-2在1953年底开始生产。


Halcombe局域网而且尼尔Zierler(美国)

麻省理工学院(MIT)的J. Halcombe Laning和Niel Zierler撰写了“旋风1号数学方程翻译程序”(1954年1月)的报告。1952年夏天,朗宁推出了一种临时的代数公式转换器。到1953年5月,他和齐尔勒一起,将这种方法升级为可行的方法。


阿列克谢·李亚普诺夫(苏联)

苏联大学的第一个程序设计课程“程序设计基础”于1952/1953学年在莫斯科国立大学举行。Alexei A. Lyapunov第一次讨论了自动编程的主题。1954年,苏联科学院数学系的S. S. Kamynin和E. Z. Lubimsky为Strela计算机开发了一个临时的“编程程序”。该编译器的最终版本于1955年完成。Andrei Ershov, L. N. Korolev和V. M. Kurotchkin为Besm计算机进行了类似的项目(参见Andrei P. Ershov和Michael R. Shura-Bura:苏联编程的早期发展,在:Nicholas Constantine大都会;杰克Howlett;Gian-Carlo Rota(编辑):《二十世纪计算机史》,学术出版社,纽约,伦敦等,1980年,第155页)。

结论

这些说明可以总结如下:亨氏Rutishauser是第一个提出自动编程(计算机辅助机器翻译,1951/52)和霍珀为子程序的管理开发了第一个实用程序(1952年)。Alick Glennie声称是第一个真正在计算机上运行的编译器(1952年)。

参考文献

Herbert Bruderer:模拟和数字计算的里程碑,施普林格自然瑞士AG, Cham, 3理查德·道金斯2020年版,2卷,2113页,715幅插图,151张表格,由约翰·麦克明翻译自德语,https://www.springer.com/de/book/9783030409739

Paul E. Ceruzzi:现代计算的历史,麻省理工学院出版社,剑桥,马萨诸塞州,伦敦,2nd2003年版

尼古拉斯·康斯坦丁大都会;杰克Howlett;吉安-卡洛·罗塔(编辑):《二十世纪计算机史》,学术出版社,纽约,伦敦等,1980年

海因茨·鲁蒂斯豪泽:自动设计方案,Birkhäuser巴塞尔,1952年

Heinz Rutishauser, Ambros Speiser;爱德华·施蒂费尔:数字程序Rechengeräte(电子设备),Birkhäuser Verlag,巴塞尔1951

赫伯特Brudererherbert.bruderer@bluewin.chbruderer@retired.ethz.ch)是苏黎世联邦理工学院计算机科学系的退休讲师,也是一位技术历史学家。


没有找到条目

Baidu
map