作者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