自循環解釋器

自循環解釋器最早出現於約翰·麥卡錫Lisp 1.5版定義,其中麥卡錫以Lisp語言的功能來描述Lisp的解釋規則。

基本介紹

  • 中文名:自循環解釋器
  • 外文名:Meta-circular evaluator
  • 性質:元解釋器的一種
  • 領域:計算機
簡介,Eval/Apply循環,實例,解釋器,

簡介

自循環解釋器(英語:Meta-circular evaluator)是元解釋器(Metainterpreter,或Self-interpreter)的一種。自循環解釋器不僅是在解釋型語言中寫成(如Scheme的自循環解釋器是在Scheme中寫成),而且通過底層語言的功能來實現解釋型語言的功能。因此,自循環解釋器不需擔心如何具體實現任何功能,而只需處理語言讀入與解釋,所以尤其適合作為教育用途。自循環解釋器一般在同像(即程式與數據為同一格式,如Lisp)的語言中出現。

Eval/Apply循環

著名計算機科學教科書《電腦程式的構造和解釋》詳細研究了一個Scheme語言的自循環解釋器。此書中的解釋器包含兩個主要元素:
  • Eval,即將一個表示式轉換為其取值的函式。
  • Apply,即將一個函式調用轉換為其返回值的函式。
這兩個元素互相調用,並最終將整個程式轉換為其取值。

實例

例如以下簡單的Scheme表示式(假設square是一個內置函式,其返回值為參數的平方):
(+ (square 2) (square 3))
其解釋過程如下:
  • 解釋器首先將整個程式傳入Eval,而Eval辨認出整個程式是一個函式調用(被調用的函式是“+”,或加法函式)。因此,Eval會調用Apply來處理這一調用。
  • Apply收到被調用函式為“+”,參數分別為(square 2)與(square 3)。因此,Apply分別調用Eval來處理這兩個參數。
  • Eval收到表示式為(square 2),這是一個函式調用。因此Eval調用Apply。
  • Apply收到被調用函式為“square”,參數為2(注意:這裡的“2”僅僅是一個符號,而不是數字)。現在Apply會調用Eval,將符號“2”轉換為數值2。Apply隨後調用square函式,並返回4。同樣地,Eval處理(square 3)並返回9。
  • 現在解釋器回到了Apply函式,處理“+”的調用。現在Apply函式有了參數的具體取值(分別為4和9),並調用“+”函式而返回13。
  • Eval函式收到返回值13,這個值是整個表示式的取值。注意以上過程中自循環解釋器並沒有關心具體如何實現“+”函式與“square”函式,這些細節都由底層的Scheme來處理。

解釋器

解釋器(英語:interpreter),是一種計算機程式,能夠把高階程式語言一行一行解釋運行。解釋器像是一位“中間人”,每次運行程式時都要先轉成另一種語言再作運行,因此解釋器的程式運行速度比較緩慢。它不會一次把整個程式翻譯出來,而是每翻譯一行程式敘述就立刻運行,然後再翻譯下一行,再運行,如此不停地進行下去。
解釋器的好處是它消除了編譯整個程式的負擔,程式可以拆分成多個部分來模組化,但這會讓運行時的效率打了折扣。相對地,編譯器已一次將所有原始碼翻譯成另一種語言,如機器碼,運行時便無需再依賴編譯器或額外的程式,故而其運行速度比較快。

相關詞條

熱門詞條

聯絡我們