Введение

В вычислительной технике метациркулярный оценщик (MCE) или метациркулярный интерпретатор (MCI) — это интерпретатор, который определяет каждую функцию интерпретируемого языка, используя схожие средства языка-хоста интерпретатора. Например, интерпретация лямбда-применения может быть реализована с помощью применения функций. Метациркулярная оценка наиболее распространена в контексте Lisp. Самоинтерпретатор — это метациркулярный интерпретатор, в котором интерпретируемый язык почти идентичен языку-хосту; эти два термина часто используются как синонимы. Он описывает разработку самокомпилирующегося компилятора. Из-за сложности компиляции функций высшего порядка многие языки вместо этого определялись посредством интерпретаторов, особенно Lisp. Сам термин был введен Джоном К. Рейнольдсом.

Самоинтерпретация в языках программирования

Полные функциональные языки программирования, которые строго нормализуются, не могут быть Тьюринг-полными, иначе можно было бы решить проблему останова, проверяя, проходит ли программа проверку типов. Это означает, что существуют вычислимые функции, которые нельзя определить в полном языке. В частности, невозможно определить самоинтерпретатор в полном языке программирования, например, в любом из типизированных лямбда-исчислений, таких как просто типизированное лямбда-исчисление, система F Жана-Ива Жирара или исчисление конструкций Тьерри Коквана. Здесь под "самоинтерпретатором" мы понимаем программу, которая принимает представление исходного терма в некотором простом формате (например, строку символов) и возвращает представление соответствующего нормализованного терма. Этот результат невозможности не относится к другим определениям "самоинтерпретатора". Например, некоторые авторы называют функции типа самоинтерпретаторами, где – тип представлений типизированных термов. Чтобы избежать путаницы, мы будем называть эти функции самораспознающими. Браун и Палсберг показали, что самораспознающие функции могут быть определены в нескольких строго нормализующихся языках, включая систему F и систему Fω. Это оказалось возможным, поскольку типы закодированных термов, отражающиеся в типах их представлений, препятствуют построению диагонального аргумента. В своей статье Браун и Палсберг утверждают, что опровергают "общепринятое мнение" о невозможности самоинтерпретации (и они ссылаются на Википедию как пример общепринятого мнения), но на самом деле они опровергают невозможность самораспознавания, являющегося отдельным понятием. В своих последующих работах они переходят к более специфической терминологии "самораспознающая функция", используемой здесь, в частности, отличая их от "самооценивающих функций" типа . Они также признают, что реализация самооценки представляется более сложной, чем самораспознавание, и оставляют реализацию первой в строго нормализующем языке как открытую проблему.

Применение

В сочетании с существующей реализацией языка, метациркулярные интерпретаторы предоставляют базовую систему, от которой можно расширять язык как вверх, добавляя новые возможности, так и вниз, заменяя интерпретацию компиляцией. Они также полезны для разработки инструментов, тесно интегрированных с языком программирования, таких как продвинутые отладчики. Язык, спроектированный с учетом метациркулярной реализации, зачастую лучше подходит для создания языков в целом, даже совершенно отличных от языка-носителя.