sap*_*Pro 4 java compiler-construction bootstrapping javac
是Java Bootstrapped的编译器吗?
如果它是自引导的,那么第一个java编译器是如何编写的?
这是一个有趣的问题.javac来自Oracle 的当前编译器,它只是许多(1)中的一个编译器,实际上是用Java编写的,这意味着,是的,您可以认为它是自举的,假设您的定义意味着" 已经被引导以便它现在可以自行编译" ( 2).
虚拟机本身主要是从内存中用C++编写的,因此,在编译器被引导时,构建JRE需要C++编译器.
(1) GCJ是另外一个,和它发生在C编写,所以这取决于哪个你指的编译器.
(2)你的问题中的单词"bootstapped"可以通过多种方式获取.如果你的"bootstrapped"的定义意味着"必须被引导来获得一个正常工作的编译器",那么答案就是否定.
至于第一个Java编译器在引导之前是如何编写的,那在时间的迷雾中(或者Gosling等人的思想)仍然会丢失.
鉴于编译器可以相对容易地编写而没有任何花哨的OO概念,我的猜测是他们只是用C或C++编写第一个(或几个).
Wayback Machine的这篇文章似乎证实了这一点:
该团队的努力开始了一种新的面向对象编程语言的开发,Gosling称之为Oak,在他窗外的树之后.由于松散地基于C++,语言被剥离到最低限度,以便与手持设备中的芯片所提供的有限空间兼容,并且旨在允许程序员更轻松地支持动态,可更改的硬件.
然后:
Arthur van Hoff在Oak中编写了一个Oak编译器,而不是在C.Naughton和Jonathan Payne编写了一个名为"WebRunner"的Oak-ready浏览器.第一个小程序 - 杜克在互联网上向父母挥手致意 - 诞生了.
此外,帕特里克·诺顿在他的书"The Java Handbook"(我的大胆)中的结语:
现在我们有了一个记录计划,在网上以源形式运送Oak,事情变得更有成效.我们开始专注于修复语言中的所有松散结束.Jonathan Payne正致力于优化翻译.Arthur van Hoff在Oak中重写了编译器,取代了James最初编写的C版本.这也是对环境的一个很好的测试,因为这个编译器是有史以来最大的单个Oak程序.相当多的被烧毁的工程师正在利用这个时间作为Sun的带薪假期,但在大多数情况下,核心团队忽略了他们并重新开始工作.
因此,它看起来像的"Java"(橡树)编译器是用C编写的原始版本,然后从那里自举.