tag:blogger.com,1999:blog-4949960181628888221.post5895670991974816152..comments2022-04-09T19:46:43.609+08:00Comments on Infinite Loop: 【語言】直譯與編譯 - Interpretation and CompilationAnonymoushttp://www.blogger.com/profile/17636157464310241832noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-4949960181628888221.post-43230854465115442872010-09-11T15:44:55.054+08:002010-09-11T15:44:55.054+08:00看來當初看書的時候就理解錯誤了,感謝你的指正及詳細說明:)看來當初看書的時候就理解錯誤了,感謝你的指正及詳細說明:)Anonymoushttps://www.blogger.com/profile/17636157464310241832noreply@blogger.comtag:blogger.com,1999:blog-4949960181628888221.post-85356516121716281182010-09-11T04:51:43.021+08:002010-09-11T04:51:43.021+08:00你對直譯的觀念有誤
以編譯語言來說, 編譯可以粗略分為 parse 跟 code generat...你對直譯的觀念有誤<br /> 以編譯語言來說, 編譯可以粗略分為 parse 跟 code generation 兩個部份. 執行時就是直接執行 generation 出來的機器碼.<br /> 但在直譯語言中, 每一次執行都需要 parse 及執行對應的機器碼. 所以他所多做的部份是在於 parse.根本不會有所謂的翻譯.<br />舉例來說. 比如說你寫 c = a + b. 在編譯語言中可能會直接編譯成 add c, a, b. 但是在直譯語言中. 則會先進行 parse, 發現要執行的內容是加法,從而執行 add c, a, b. 所以直譯式語言在執行的 overhead 就是 parse 跟 dispatch 對應程式碼的部份.<br /> 所謂的 JIT 就是幫助你拿掉那部份的 overhead. 所以你最多只能跟編譯式語言一樣快. 要超過是不可能的(何況你還需要花費編譯所需的時間)mitnicknoreply@blogger.comtag:blogger.com,1999:blog-4949960181628888221.post-66804332005633461932008-11-14T01:15:00.000+08:002008-11-14T01:15:00.000+08:00感謝補充。我已於文章加上你所說的內容。感謝補充。我已於文章加上你所說的內容。Anonymoushttps://www.blogger.com/profile/17636157464310241832noreply@blogger.comtag:blogger.com,1999:blog-4949960181628888221.post-48800962459886831092008-11-13T21:37:00.000+08:002008-11-13T21:37:00.000+08:00Java和C#要依他的Runtime來決定該平台是否為直譯或編譯在一般常見的x86環境中執行Java...Java和C#要依他的Runtime來決定該平台是否為直譯或編譯<BR/>在一般常見的x86環境中執行Java和C#的EXE檔<BR/>每個函數第一次執行前會從VM機器碼再透過JIT(Just in Time)<BR/>即時編譯器編譯成x86機器碼<BR/>經過這個步驟後 ,執行速度可以與C/C++不相上下<BR/>不過較罕見的平台大部分只有開發直譯器<BR/>所以速度上就差多了kgame 智涵https://www.blogger.com/profile/01756808139126038613noreply@blogger.com