作者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