作者as1986 (veni, vidi, vici)
看板CSSE
标题[问题] Java的编译器真的是用Java写的吗?
时间Thu Mar 17 23:40:42 2005
听说现在的程式语言(如Java)的compiler都是自己compile自己
(严格说是先用别的语言做出该语言的compiler出来,再拿他去compile要compile的
compiler,最後再用被compiled的compiler再去compile一次自己)
好像绕口令XD
可是Java是用bytecode的型式散布可执行档啊
所以compiled的compiler也应该是bytecode
这样就需要一个额外的Java VM了
那为什麽我们不管在哪边只要打"javac 要编译的source" 就可以了呢?
好像看不到虚拟机器的存在
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.249.234
※ 编辑: as1986 来自: 140.112.249.234 (03/17 23:41)
1F:推 Eventis:不管java compiler是用什麽方式写成的. 61.62.49.43 03/18
2F:→ Eventis:这并不保证JVM就是用那种方式实作的啊:) 61.62.49.43 03/18
3F:推 Eventis:=.="...我发觉我答非所问...Otz.. 61.62.49.43 03/18
4F:推 Eventis:这个问题您可以试试看把单独一个javac.exe 61.62.49.43 03/18
5F:→ Eventis:copy到您的.java目录下,然後请您compile 61.62.49.43 03/18
6F:→ Eventis:您就会看到虚拟机器跟您抱怨了^^ 61.62.49.43 03/18
7F:→ Eventis:至於您的第一段,java并不是第一个啊. 61.62.49.43 03/18
8F:→ Eventis:印象中compiler老师提到第一个用bootstrap技术 61.62.49.43 03/18
9F:→ Eventis:来实作compiler的应该是pascal. 61.62.49.43 03/18
10F:→ Eventis:更进一步如果我没记错, 61.62.49.43 03/18
11F:→ Eventis:mcgraw-hill有一本国人写的java深度历险 61.62.49.43 03/18
12F:→ Eventis:也有探讨过javac的问题. 61.62.49.43 03/18
13F:推 spanky:我记得是JAVAC变成BYTE CODE 然後再打java变成 140.113.93.175 03/18
14F:→ spanky:执行档 140.113.93.175 03/18
15F:→ spanky:变bytecode是为了跨平台 140.113.93.175 03/18
16F:→ spanky:所以你打JAVAC不会觉得有VM的存在 140.113.93.175 03/18
17F:推 Eventis:javac还是一个native code啊XD140.116.231.175 03/18
18F:→ Eventis:但他只是一个像wrapper的东西.140.116.231.175 03/18
19F:→ Eventis:实际上还是呼叫java interpreter去compile140.116.231.175 03/18
20F:推 jeunder:java compiler 要不要用 java 写都可以 61.230.226.67 03/18
21F:→ jeunder:而 JVM 大多不用 java 写 61.230.226.67 03/18
22F:推 reader:现在有 javacc, 所以可以自己用 java 写一个^^ 61.222.173.29 03/19