動態編譯
動態編譯是某些程式語言在執行時用來增進效能的方法。儘管這技術源於Self,但使用此技術最為人所知的是Java。此技術可以做到一些只在執行時才能完成的最佳化。使用動態編譯的執行環境一開始執行速度較慢,之後,完成大部分的編譯和再編譯後,會執行得比非動態編譯程式快很多。因為初始化時的效能延遲,動態編譯不適用於一些情況。在許多實作中,一些可以在編譯時期做的最佳化被延到執行時期才編譯,導致不必要的效能降低。即時編譯是一種動態編譯的形式。
一個非常近似的技術是遞增式編譯。遞增式編譯器用於POP-2、POP-11、一些Lisp的版本,如Maclisp和最少一種版本的ML語言(Poplog ML)。這需要程式語言的編譯器成為執行環境的一部分作為要件以實作。如此便得以在任何時候從終端、從檔案、或從執行中程式所建造資料結構中讀取源碼。然後,轉成機器碼區塊或函數(有可能取代之前同名的函數),之後可立即被程式使用。因為執行中對互動開發和測試的速度的要求,編譯後的機器碼所做的最佳化程度不如標準「批次編譯器」。然而,遞增式編譯過的程式跑起來通常比同一個程式的一般解譯版本還快。遞增式編譯因而能夠同時提供編譯和解譯語言優點。 為了增加可移植性,遞增式編譯通常採兩步驟。第一個步驟會編譯到中間、與平台獨立的語言,然後再到機器碼。在這個例子中,移植只須改變「後端」編譯器。不同於動態編譯,遞增式編譯在程式執行後不會做更進一步的最佳化。
外部連結
- The UW Dynamic Compilation Project
- Architecture Emulation through Dynamic Compilation (页面存档备份,存于)
- SCIRun (页面存档备份,存于)
- Article "Dynamic Compilation, Reflection, & Customizable Apps" by David B. Scofield and Eric Bergman-Terrell
- Article "High-performance XML: Dynamic XPath expressions compilation (页面存档备份,存于)" by Daniel Cazzulino
- Article "A Survey of Adaptive Optimization in Virtual Machines (页面存档备份,存于)" by Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.