精華區beta CSSE 關於我們 聯絡資訊
聽說現在的程式語言(如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)
Eventis:不管java compiler是用什麼方式寫成的. 61.62.49.43 03/18
Eventis:這並不保證JVM就是用那種方式實作的啊:) 61.62.49.43 03/18
Eventis:=.="...我發覺我答非所問...Otz.. 61.62.49.43 03/18
Eventis:這個問題您可以試試看把單獨一個javac.exe 61.62.49.43 03/18
Eventis:copy到您的.java目錄下,然後請您compile 61.62.49.43 03/18
Eventis:您就會看到虛擬機器跟您抱怨了^^ 61.62.49.43 03/18
Eventis:至於您的第一段,java並不是第一個啊. 61.62.49.43 03/18
Eventis:印象中compiler老師提到第一個用bootstrap技術 61.62.49.43 03/18
Eventis:來實作compiler的應該是pascal. 61.62.49.43 03/18
Eventis:更進一步如果我沒記錯, 61.62.49.43 03/18
Eventis:mcgraw-hill有一本國人寫的java深度歷險 61.62.49.43 03/18
Eventis:也有探討過javac的問題. 61.62.49.43 03/18
spanky:我記得是JAVAC變成BYTE CODE 然後再打java變成 140.113.93.175 03/18
spanky:執行檔 140.113.93.175 03/18
spanky:變bytecode是為了跨平台 140.113.93.175 03/18
spanky:所以你打JAVAC不會覺得有VM的存在 140.113.93.175 03/18
Eventis:javac還是一個native code啊XD140.116.231.175 03/18
Eventis:但他只是一個像wrapper的東西.140.116.231.175 03/18
Eventis:實際上還是呼叫java interpreter去compile140.116.231.175 03/18
jeunder:java compiler 要不要用 java 寫都可以 61.230.226.67 03/18
jeunder:而 JVM 大多不用 java 寫 61.230.226.67 03/18
reader:現在有 javacc, 所以可以自己用 java 寫一個^^ 61.222.173.29 03/19