動態編譯

動態編譯是某些程式語言在執行時用來增進效能的方法。

基本介紹

  • 中文名:動態編譯
  • 表現形式:即時編譯
  • 近似技術:遞增式編譯
  • 使用目的:用來增進效能的方法
簡介,例子,Self,

簡介

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

例子

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

Self

Self語言,是一種基於原型的面向對象程式設計語言,於1986年由施樂帕洛阿爾托研究中心的David Ungar和Randy Smith給出了最初的設計。
Self語言把概念上的精簡作為設計原則。它取消了的概念,只有對象的概念,同時把訊息作為最基本的操作。把對象的屬性理解為獲取或更改屬性這兩種方法,從而把屬性的概念簡化為方法;取消了變數賦值,並以通過訊息來讀槽和寫槽的方式代之。
Self語言是在Smalltalk的基礎上發展而來,沿用了Smalltalk中一切都是對象的風格。Self同Smalltalk一樣既是一個程式語言,也是一個集成開發環境運行環境。Self也擁有一個圖形用戶界面Morphic,Self的編程環境也是基於Morphic來實現的。Self在精簡語言概念的同時也把大量的工作轉交給環境來處理。如可見性(visibility),模組與代碼的管理都是由環境來處理的,語言中的反饋機制(reflection)也同環境密切相關。
在發展Self的過程中,Self的設計研究人員也探索了Self的程式設計。他們提出了traits的概念,用對象實現了名字(對象名或方法名)的管理,用動態繼承實現模式轉換。
在實現Self系統的過程中,設計研究人員發展出了一種動態自適應編譯技術。這種技術的採用提高了Self代碼的執行效率。

相關詞條

熱門詞條

聯絡我們