自己反映計算 (計算機科学)

計算機科学における自己反映計算（reflection、リフレクション）とは、計算機システムにおいて対象レベルとメタレベルを分離し、データとしてシステム自身を因果結合 (causally connect) することで対象レベルの推論や計算に関するメタな情報を、メタレベルで明示的に記述して操作することをいう。因果結合を実現する方法は複数存在する。
概要.
計算機システムの一般論.
一般に計算機システムにおいて、なにかしら意味を持つ計算はその計算の対象というべき問題領域を持つ。計算に係るデータや手続き、オブジェクトとはその問題領域における具体的・概念的実体を表現したものであり、計算機システムの本質とはそれらデータなどで表現した問題領域における実体の振る舞いをシミュレートすることにある。
自己反映計算の実現方法.
自己反映計算の実現方法には少なくとも直接法、間接法と呼ばれる2つの方法が知られている。
直接法.
直接法とは、言語 L のインタプリタを言語 L で記述する メタサーキュラー (meta-circular) と呼ばれる言語の実装方法を応用するもので、言語 L のデータオブジェクトとして言語 L 自身を構成することで実現される。
このとき、データオブジェクトとしての言語 L は対象レベル、データオブジェクトを記述している言語 L はその対象レベルに対するメタレベルと見立てられる。
このデータオブジェクトである言語 L に環境 (environment) と継続 (continuation) を渡すことで因果結合が成され、メタレベルの情報を反映したデータオブジェクトとなる。一般的には、インタプリタの状態はその時点における環境およびその時点以降のプログラム（継続）によって決定される。自己反映計算は、この情報反映されたデータオブジェクトについての情報取得および操作を行うことで実現される。
なお、この対象とメタレベルの見立てはデータオブジェクトとしての言語 L 内部でも同様に実行することができ、この見立てを無限に繰り返した言語 L の無限の階層はリフレクティブタワー (reflective tower) と呼ばれる。