動態編譯

動態編譯是某些程式語言在執行時用來增進效能的方法。儘管這技術源於Self，但使用此技術最為人所知的是Java。此技術可以做到一些只在執行時才能完成的最佳化。使用動態編譯的執行環境一開始執行速度較慢，之後，完成大部分的編譯和再編譯後，會執行得比非動態編譯程式快很多。因為初始化時的效能延遲，動態編譯不適用於一些情況。在許多實作中，一些可以在編譯時期做的最佳化被延到執行時期才編譯，導致不必要的效能降低。即時編譯是一種動態編譯的形式。

一個非常近似的技術是遞增式編譯。遞增式編譯器用於POP-2、POP-11、一些Lisp的版本，如Maclisp和最少一種版本的ML語言（Poplog ML）。這需要程式語言的編譯器成為執行環境的一部分作為要件以實作。如此便得以在任何時候從終端、從檔案、或從執行中程式所建造資料結構中讀取源碼。然後，轉成機器碼區塊或函數（有可能取代之前同名的函數），之後可立即被程式使用。因為執行中對互動開發和測試的速度的要求，編譯後的機器碼所做的最佳化程度不如標準「批次編譯器」。然而，遞增式編譯過的程式跑起來通常比同一個程式的一般解譯版本還快。遞增式編譯因而能夠同時提供編譯和解譯語言優點。
為了增加可移植性，遞增式編譯通常採兩步驟。第一個步驟會編譯到中間、與平台獨立的語言，然後再到機器碼。在這個例子中，移植只須改變「後端」編譯器。不同於動態編譯，遞增式編譯在程式執行後不會做更進一步的最佳化。

 參見 
全美達處理器動態將x86碼轉成VLIW碼。
動態再編譯

 外部連結 
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

Category:編譯原理

ru:Динамическая компиляция