動態編譯

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