[問題] Java的編譯器真的是用Java寫的嗎?

看板CSSE作者 (veni, vidi, vici)時間19年前 (2005/03/17 23:32), 編輯推噓7(7015)
留言22則, 4人參與, 最新討論串1/1
聽說現在的程式語言(如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)

61.62.49.43 03/18, , 1F
不管java compiler是用什麼方式寫成的.
61.62.49.43 03/18, 1F

61.62.49.43 03/18, , 2F
這並不保證JVM就是用那種方式實作的啊:)
61.62.49.43 03/18, 2F

61.62.49.43 03/18, , 3F
=.="...我發覺我答非所問...Otz..
61.62.49.43 03/18, 3F

61.62.49.43 03/18, , 4F
這個問題您可以試試看把單獨一個javac.exe
61.62.49.43 03/18, 4F

61.62.49.43 03/18, , 5F
copy到您的.java目錄下,然後請您compile
61.62.49.43 03/18, 5F

61.62.49.43 03/18, , 6F
您就會看到虛擬機器跟您抱怨了^^
61.62.49.43 03/18, 6F

61.62.49.43 03/18, , 7F
至於您的第一段,java並不是第一個啊.
61.62.49.43 03/18, 7F

61.62.49.43 03/18, , 8F
印象中compiler老師提到第一個用bootstrap技術
61.62.49.43 03/18, 8F

61.62.49.43 03/18, , 9F
來實作compiler的應該是pascal.
61.62.49.43 03/18, 9F

61.62.49.43 03/18, , 10F
更進一步如果我沒記錯,
61.62.49.43 03/18, 10F

61.62.49.43 03/18, , 11F
mcgraw-hill有一本國人寫的java深度歷險
61.62.49.43 03/18, 11F

61.62.49.43 03/18, , 12F
也有探討過javac的問題.
61.62.49.43 03/18, 12F

140.113.93.175 03/18, , 13F
我記得是JAVAC變成BYTE CODE 然後再打java變成
140.113.93.175 03/18, 13F

140.113.93.175 03/18, , 14F
執行檔
140.113.93.175 03/18, 14F

140.113.93.175 03/18, , 15F
變bytecode是為了跨平台
140.113.93.175 03/18, 15F

140.113.93.175 03/18, , 16F
所以你打JAVAC不會覺得有VM的存在
140.113.93.175 03/18, 16F

140.116.231.175 03/18, , 17F
javac還是一個native code啊XD
140.116.231.175 03/18, 17F

140.116.231.175 03/18, , 18F
但他只是一個像wrapper的東西.
140.116.231.175 03/18, 18F

140.116.231.175 03/18, , 19F
實際上還是呼叫java interpreter去compile
140.116.231.175 03/18, 19F

61.230.226.67 03/18, , 20F
java compiler 要不要用 java 寫都可以
61.230.226.67 03/18, 20F

61.230.226.67 03/18, , 21F
而 JVM 大多不用 java 寫
61.230.226.67 03/18, 21F

61.222.173.29 03/19, , 22F
現在有 javacc, 所以可以自己用 java 寫一個^^
61.222.173.29 03/19, 22F
文章代碼(AID): #12EQBr6o (CSSE)