編譯器與JVM爭辯誰比較重要?

JVM:
什麼?你開玩笑吧?這位大嬸,我可是Java啊。只有我才能讓程序跑起來。你只是產生文件而已。做個文件有什麼了不起的,沒有我,文件沒有用!
編譯器:
請你放尊重點,不然我要叫了。
JVM:
還有,你得理不饒人,每天老是警告人,小小一點語法錯誤也不放水。
編譯器:
對不起,沒有我你能運行什麼?Java會設計成這樣是有原因的。如果Java只是個直譯語言,要一邊運行一邊解釋純文字的程序,我就不相信你能夠運行得多快!
JVM:
抗議啦,我又沒有說你一點用處都沒有。但是說真的,我根本搞不懂你在做什麼。程序員可以直接編寫二進制代碼給我運行,那你就失業啦,哇哈哈哈……哇哈哈哈……咳……哇哈哈哈……
編譯器:
我實在懶得理你。沒錯,雖然說只要是合格的二進制代碼就可以運行,不一定是要編譯器編譯出來的,但實際上不會有人傻成這樣的。讓程序員直接寫出二進制代碼就好像要組裝一臺計算機的人自己得先做出CPU一樣。還有,你可不可以不要笑的那麼難聽?
JVM:
先不要管我的笑聲,你還是沒有回答我你到底有什麼用處?
編譯器:
還記得Java是個強類型的語言嗎?這代表我不能容許變量保存類型的數據。這是很關鍵的類型安全功能,我能夠讓大部分的錯誤在到你那邊之前就被抓到。還有……
JVM:
又不是全部抓光光!我還是會因爲遇到將錯誤類型的數據塞進數組中而不得不拋出異常,而且……
編譯器:
沒禮貌!別打斷我說話……,是有些數據類型的錯誤會在運行時發生,但這也是爲了要容許動態綁定這樣的功能。Java可以在執行期引起連程序員都沒有預期會碰到的類型,所以我得留一些運用性。我的工作就是就是確保鐵定不能跑的東西不會過關。通常我抓到的錯誤。例如說把文字字符串除以某個數字這種問題會被我發現。
JVM:
OK,當然。但是存取安全權限安全問題呢?還不是靠我把關,而你只不過是做些標點符號檢查罷了。還真是謝謝你把這些問題留給我呢。
編譯器:
對不起,大家都知道我纔是安全的第一線。我剛剛說的數據類型錯誤如果沒有處理好,可是一個漏洞呢。像是違反調用private方法的程序等也是我檢查的。我能夠防止人們動到不可以鵬的程序代碼與其他類的重要數據。如果把我的功能說完要說到天亮。
JVM:
隨你怎麼說。我也得做相同的事情,確保不會有人在執行前修改二進制代碼。
編譯器:
是啦,但是沒有我擋住上述的問題,你老早就掛掉了,沒時間了,下回再說吧。
JVM:
OK,等下要不要去吃夜宵?我請客……
摘至《Head First Java 2nd》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章