Кіріспе

Компьютерлік есепте мета айналымды бағалаушы (MCE) немесе мета айналымды интерпретатор (MCI) – интерпретатордың өз тіліндегі ұқсас мүмкіндіктерді пайдаланып, интерпретацияланатын тілдің әрбір мүмкіндігін анықтайтын интерпретатор. Мысалы, лямбда-қосымшаны интерпретациялау функция қосымшасын пайдалану арқылы іске асырылуы мүмкін. Мета айналымды бағалау ең көбінесе Lisp тілінің контекстінде кездеседі. Өз-интерпретатор – интерпретацияланатын тіл үй тіліне жақын болғандағы мета айналымды интерпретатор; екі термин көбінесе синоним ретінде қолданылады. Өздігінен жұмыс істейтін компилятордың құрылымын сипаттайды. Жоғары ретті функцияларды компиляциялаудың қиындығына байланысты көптеген тілдер интерпретаторлар арқылы анықталды, ең бастысы – Lisp. Бұл терминнің авторы Джон К. Рейнольдс.

Жалпы бағдарламалау тілдеріндегі өзіндік интерпретация

Толық функционалдық бағдарламалау тілдері, қатаң нормалданатын тілдер, Тьюринг толықтығына ие бола алмайды, әйтпесе бағдарламаның типі тексеріліп, тоқтату мәселесін шешуге болар еді. Бұл, есептеуге болатын кейбір функцияларды осы толық тілде анықтау мүмкін емес дегенді білдіреді. Атап айтқанда, толық бағдарламалау тілінде өзіндік интерпретаторды анықтау мүмкін емес, мысалы, қарапайым типтелген лямбда есептеуі, Жан-Ив Жирардың F жүйесі немесе Тьерри Кокванның конструкциялар есептеуі сияқты типтелген лямбда есептеулерінің кез келгенінде. Мұнда «өзіндік интерпретатор» дегеніміз – бастапқы терминнің белгілі бір қарапайым форматтағы (мысалы, символдар тізбегі) ұсынысын қабылдап, сәйкес нормаланған терминнің ұсынысын қайтаратын бағдарлама. Бұл мүмкін емес нәтиже «өзіндік интерпретатордың» басқа анықтамаларына қатысты емес. Мысалы, кейбір авторлар типіндегі функцияларды өзіндік интерпретаторлар деп атайды, мұнда типтелген терминдердің ұсыныстарының типі. Сандарды шатастырудан сақтау үшін біз осы функцияларды өзіндік танушылар деп атаймыз. Браун мен Палсберг өзіндік танушыларды бірнеше қатаң нормалданатын тілдерде, соның ішінде F жүйесі мен Fω жүйесінде анықтауға болатынын көрсетті. Бұл мүмкін болды, себебі кодталған терминдердің типтері олардың ұсыныстарының типтерінде көрінеді, бұл диагональдық аргумент құруға кедергі келтіреді. Браун мен Палсберг өз мақалаларында өзіндік интерпретация мүмкін емес деген «қалыпты көзқарасты» жоққа шығарамыз деп мәлімдейді (және олар дәстүрлі көзқарас мысалы ретінде Wikipedia-ны келтіреді), бірақ олар шын мәнінде өзіндік танудың мүмкін еместігін жоққа шығарады, бұл ерекше ұғым. Олардың келесі жұмыстарында олар мұнда қолданылатын «өзіндік танушы» терминологиясына көшеді, атап айтқанда, оларды «өзіндік бағалаушылар» типінен ажыратады. Олар сондай-ақ өзіндік бағалауды іске асыру өзіндік танудан қиын көрінетінін мойындайды және біріншісін қатаң нормалданатын тілде іске асыруды ашық мәселе ретінде қалдырады.

Қолданылуы

Қолданыстағы тілдің іске асырылуымен біріктірілгенде, мета-циклдық интерпретаторлар тілді кеңейтуге арналған базалық жүйені ұсынады, мүмкіндіктерді қосу арқылы жоғары деңгейге көтерілуге немесе оларды интерпретациялаудың орнына компиляциялау арқылы төмен деңгейге түсіруге мүмкіндік береді. Олар сонымен қатар бағдарламалау тілімен тығыз байланысты құралдарды, мысалы, күрделі отладчиктерді (дебаггерлерді) жазу үшін де пайдалы. Мета-циклдық іске асырылуды ескере отырып жобаланған тіл, тіпті бастапқы тілден мүлдем өзгеше тілдерді құруға да көбінесе ыңғайлы болады.