编译器之前是否有编程语言?

时间:2011-10-10 21:01:55

标签: compiler-construction operating-system history

显然必须有一种编程语言来编写编译器,但人们过去曾经写过COBOL(或其他)编写,然后手工编译成汇编或者是用汇编编写的,直到有人想到更高语言?谢谢,呃。

4 个答案:

答案 0 :(得分:4)

编程语言编译器的概念是相辅相成的。 Grace Hopper通常被认为是开发了第一个编译器:

  

1952年,Hopper完成了她的第一个编译器(用于Sperry-Rand计算机),称为 A-0系统。正如她后来说的那样,她这样做了,因为她很懒,希望程序员可以回归成为数学家

     

A-0系统实际上是一组可以将符号数学代码转换为机器语言的指令。在生产A-0时,Hopper采用了她多年来收集的所有子程序并将它们放在磁带上。每个例程都有一个电话号码,以便机器可以在磁带上找到它。正如Hopper所描述的那样 - “我所要做的就是写下一组电话号码,让计算机在磁带上找到它们,将它们带到一起并进行添加。这是第一个编译器。“

     

来源:http://history-computer.com/ModernComputer/Software/FirstCompiler.html

正如Wikipedia所述,“A-0比编译器的现代概念更像是一个加载器或链接器。”(它实际上是编译一起子程序,因此这个名字。)我现在还没有更详细的参考资料,但是你可以想象A-0和类似程序可以处理的输入逐渐变得更加复杂 - 更像是现在所谓的“高级编程语言“ - 编译器将更多现代功能作为翻译器而不仅仅是代码编译器(但名称卡住)。

您可以在Hopper在第一个“编程语言历史”会议上发表的主题演讲的成绩单中找到更多详细信息,如HOPL I conference proceedings中所述。如果我记得很清楚的话,她会在那里描述从A-0到后来的作品如何发展,这些作品也启发了COBOL;但我自己并没有重新阅读这篇文章。

有趣且有趣的是,Hopper说她遇到了编写程序的想法的阻力:

  

“我有一个正在运行的编译器,没有人会触摸它,因为他们仔细告诉我,计算机只能算术;他们不能做节目。“

     

来源:http://www.computinghistory.org.uk/det/5487/Grace%20Hopper%20completes%20the%20A-0%20Compiler

答案 1 :(得分:3)

不确定。

Plankalkül由Konrad Zuse在1943年提出。(没有人为它编写了50年的编译器,而编写的编译器只是为了表明它可以完成)。

大多数其他人首先发明了各种二进制编码方案,然后是汇编程序。

Fortran可能是第一个看到广泛使用的“高级”语言。

答案 2 :(得分:2)

要直接回答这个问题,程序员不使用正式的高级语言,然后手动转换为汇编。他们使用流程图,这是一种图形语言,但随后直接对程序集进行编码。根据流程图上的这个article,冯·诺依曼于1947年使用它们,就在电子计算的出现时。

在编译器之前,大多数代码都是用汇编语言编写的。有人可能认为汇编程序是一种原始类型的编译器,因为它会将助记符(例如mov reg1, [reg2])转换为操作码

在汇编程序之前,直接输入操作码。由于没有只读内存,因此通过在front panel上使用开关实际设置字节来输入引导例程。

History of Compiler Construction维基百科文章可能会有所帮助。

答案 3 :(得分:1)

编译器通常是自举的。这意味着编译器是用已经存在编译器的语言编写的。

一些编译器通常用他们编译的相同语言编写:Mono Compiler是C#,Vala编译器是Vala。

在Mono的情况下,它是使用Microsoft C#编译器编译的,直到Mono能够自己构建。对于Vala,编译器是用A语言编写的(AFAIK),直到可以编译足够的Vala来重写Vala中的编译器。

所以你是对的。如果没有其他编译器可用,某些编译器必须在某些时候用汇编语言编写。或者至少包含一个功能较弱的编译器用另一种语言写入的版本只是为了引导编译器。