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

計算機科学における自己反映計算（reflection、リフレクション）とは、計算機システムにおいて対象レベルとメタレベルを分離し、データとしてシステム自身を因果結合 (causally connect) することで対象レベルの推論や計算に関するメタな情報を、メタレベルで明示的に記述して操作することをいう。因果結合を実現する方法は複数存在する。 一般に計算機システムにおいて、なにかしら意味を持つ計算はその計算の対象というべき問題領域を持つ。計算に係るデータや手続き、オブジェクトとはその問題領域における具体的・概念的実体を表現したものであり、計算機システムの本質とはそれらデータなどで表現した問題領域における実体の振る舞いをシミュレートすることにある。 自己反映計算の実現方法には少なくとも直接法、間接法と呼ばれる2つの方法が知られている。 直接法とは、言語 L のインタプリタを言語 L で記述する メタサーキュラー (meta-circular) と呼ばれる言語の実装方法を応用するもので、言語 L のデータオブジェクトとして言語 L 自身を構成することで実現される。 このとき、データオブジェクトとしての言語 L は対象レベル、データオブジェクトを記述している言語 L はその対象レベルに対するメタレベルと見立てられる。 このデータオブジェクトである言語 L に環境 (environment) と継続 (continuation) を渡すことで因果結合が成され、メタレベルの情報を反映したデータオブジェクトとなる。一般的には、インタプリタの状態はその時点における環境およびその時点以降のプログラム（継続）によって決定される。自己反映計算は、この情報反映されたデータオブジェクトについての情報取得および操作を行うことで実現される。 なお、この対象とメタレベルの見立てはデータオブジェクトとしての言語 L 内部でも同様に実行することができ、この見立てを無限に繰り返した言語 L の無限の階層はリフレクティブタワー (reflective tower) と呼ばれる。 インタプリタ モナド (プログラミング) アルフレト・タルスキ 言語階層説に直接法の源流を読み取ることができる。 リフレクション (情報工学) ^ ここでは、(栗原ら(1994)) の分類による。 ^ 山岡(2001), p. 50-54. 栗原正仁, 佐藤崇昭, 大内東「項書換えシステムにおける自己反映計算」『北海道大学工学部研究報告』第167号、北海道大学、1994年1月、57-66頁、ISSN 0385602X、NAID 110000341132。  山岡悦郎『うそつきのパラドックス―論理的に考えることへの挑戦』海鳴社、2001年。ISBN 4875252056。https://books.google.co.jp/books?id=OGtWktg8UDIC&pg=PA52&lpg=PA52&dq=%E8%A8%80%E8%AA%9E%E9%9A%8E%E5%B1%A4%E8%AA%AC&source=bl&ots=raNtIN44ag&sig=PctuFUI-HfaRuBoZaIJHQkgoJ0Q&hl=ja&sa=X&ei=NKh4ULuzAeaOmQWjp4HADw&ved=0CCMQ6AEwAA#v=onepage&q=%E8%A8%80%E8%AA%9E%E9%9A%8E%E5%B1%A4%E8%AA%AC&f=false。  菅野博靖, 田中二郎「非標準理論とその応用：メタ推論とリフレクション」『情報処理』第30巻第6号、情報処理学会、1989年6月、694-705頁、CRID 1050845762806585856、ISSN 04478053。  渡部卓雄「リフレクション」『コンピュータソフトウェア』第11巻第3号、日本ソフトウェア科学会、1994年5月、5-14頁、ISSN 02896540、NAID 110003743804。  田中 二郎 著「第9章：メタプログラミングとリフレクション」、井田 哲雄、田中 二郎 編『続 新しいプログラミング・パラダイム』1990年。  Brian Cantwell Smith (1982), Procedural Reflection in Programming Languages, http://repository.readscheme.org/ftp/papers/bcsmith-thesis.pdf  Smith, Brian Cantwell (1984). Reflection and semantics in LISP. POPL '84:Proceedings of the 11th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages. Association for Computing Machinery. pp. 23-35. doi:10.1145/800017.800513. ISBN 0897911253. https://doi.org/10.1145/800017.800513  Maes, Reflection P; Nardi, D (1988). “The mystery of the tower revealed: A nonreflective description of the reflective tower”. LISP and Symbolic Computation 1 (1): 11-38. doi:10.1007/BF01806174. https://doi.org/10.1007/BF01806174. "Meta-level Architectures and Reflection"  (要購読契約) Steele Jr, Guy Lewis; Sussman, Gerald Jay (1978). The Art of the Interpreter of the Modularity Complex (Parts Zero, One, and Two). hdl:1721.1/6094. https://hdl.handle.net/1721.1/6094. "Series/Report no.AIM-453"  John C. Reynolds (1972). “Definitional interpreters for higher-order programming languages”. Proceedings of the ACM annual conference on - ACM '72 (ACM Press). CRID 1361418521236696704. doi:10.1145/800194.805852. https://doi.org/10.1145/800194.805852.  佐伯豊『再利用可能な拡張機構を備えた言語処理系』 北陸先端科学技術大学院大学〈博士 (情報科学) 甲第130号〉、2001年。doi:10.11501/3184128。hdl:10119/908。NAID 500000205085。https://doi.org/10.11501/3184128。  米澤明憲, 武市正人「特集「自己反映計算(リフレクション)」の編集にあたって」『コンピュータ ソフトウェア』第11巻第3号、日本ソフトウェア科学会、1994年5月、3_163-3_164、doi:10.11309/jssst.11.3_163、ISSN 0289-6540、NAID 130007505177。  浅井 健一 (1996), Duplication and Partial Evaluation -- For a Better Understanding of Reflective Languages, http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.132.372  中川 理恵、浅井 健一 (2004), 部分評価を使った自己反映言語のコンパイル, KAKEN 研究課題/領域番号 09780251, https://kaken.nii.ac.jp/ja/grant/KAKENHI-PROJECT-09780251