作者ggg12345 (ggg)
看板PLT
標題Re: [問題] interprete &compile 這兩個字
時間Fri Aug 10 18:52:39 2007
※ 引述《godfat (godfat 真常)》之銘言:
: 下次超過三行盡量用回文的
: : 推 micbrimac:謝謝 08/10
: : → micbrimac:我還有一些問題 08/10
: : → micbrimac:比如說,我可以說html是一種language 08/10
: : → micbrimac:而java script是嵌在它上面的某個東西嗎 08/10
: 可以,css 與其他的也都是。
: : → micbrimac:還有,就是邊跑邊轉跟直接轉成targert code 比 08/10
: : → micbrimac:會有甚麼好處嗎,因為這樣不是反而比較麻煩 08/10
: : → micbrimac:每次都要轉 08/10
: 也許對電腦來說麻煩吧 XD 好麻煩喔,每次都要再轉 XD
===
現在的技術改進了.
譬如一個 while 或 for loop , compiler 只對這個 loop block
檢查與翻譯一次, 但 interpreter 每次 loop 都得對每個 statement
都要再檢查與翻譯一次. 但最新的 interpreter 方法是: loop block
內的指述(statement)先以整個 block 被簡查與翻譯一次記起來, 當
再度 loop 時就可以發現已翻譯, 就能 "再用", 這就可以逼近
compiler 的效率, 如果一個原始程式很大一段都不會執行到, 就更可
能比 compiler 運氣好而變快了.
: 但對人類來說可輕鬆多了,因為你不必等他轉換完畢,
: 就可以直接執行程式,你可以迅速地修改,然後測試執行,
: 多於程式與程式間的呼叫,彈性也高了許多。
: 所犧牲的自然就是效能會和 compiled program 差很多了,數百倍以上。
只要儲存 "再用碼" 的記憶體夠大, 這種 block translation 的
interpreter 就逼近甚至超越 compiler 了.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.1.146
1F:推 micbrimac:可以解釋成從記憶體和從硬碟execute的差異嗎 08/11 21:07
2F:→ micbrimac:謝謝 08/11 21:07
3F:推 ggg12345:現代的 interpreter 未必就慢, 使用 Block Translation 08/11 22:06
4F:→ ggg12345:都是在 run-time memory 進行, compiler 的翻譯都在執行 08/11 22:07
5F:→ ggg12345:前就對整個原始程式翻譯完畢, 不過也有前半段用 compiler 08/11 22:09
6F:→ ggg12345:至中間碼, 後半段再對中間碼用 interpreter 執行. 08/11 22:11