~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0B3760B68D4FD189256E4746C42AC057__1695366180 ✰
Заголовок документа оригинал.:
✰ Meta-circular evaluator - Wikipedia ✰
Заголовок документа перевод.:
✰ Метациклический оценщик — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Meta-circular_evaluator ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/0b/57/0b3760b68d4fd189256e4746c42ac057.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/0b/57/0b3760b68d4fd189256e4746c42ac057__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 06:51:32 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 22 September 2023, at 10:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Метациклический оценщик — Википедия Jump to content

Мета-циклический оценщик

Из Википедии, бесплатной энциклопедии

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

История [ править ]

Диссертация Коррадо Бема [4] описывает конструкцию автономного компилятора. [5] Из-за сложности компиляции функций высшего порядка многие языки вместо этого определялись через интерпретаторы, в первую очередь Lisp. [1] [6] Сам термин был придуман Джоном Рейнольдсом . [1] и популяризирован благодаря использованию в книге « Структура и интерпретация компьютерных программ» . [3] [7]

Самопереводчики [ править ]

Самопереводчик — это метациркулярный интерпретатор, в котором основной язык также является интерпретируемым языком. [8] Самопереводчик выполняет универсальную функцию для рассматриваемого языка и может быть полезен в изучении определенных аспектов языка. [2] Самоинтерпретатор дает замкнутое, бессодержательное определение большинства языковых конструкций и, таким образом, мало что дает для понимания семантики интерпретируемого языка, например, стратегии оценки . Решение этих проблем приводит к более общему понятию «определенного интерпретатора». [1]

От самоинтерпретатора к абстрактной машине [ править ]

Эта часть основана на разделе 3.2.4 диссертации Дэнви. [9]

Вот суть системы самооценки исчисление. Абстрактный синтаксис исчисление - это следующим образом реализовано в OCaml , представляя переменные с их индекс де Брейна , т. е. с их лексическим смещением (начиная с 0):

тип   term   =   IND   или   int      (*индекс де Брёйна *) 
           |    АБС   или   термин 
           |    ПРИЛОЖЕНИЕ   или   срок   *   срок 

Оценщик использует среду:

type   value   =   FUN   of   (  value   ->   value  ) 

 let   Rec   eval   (  t   :   term  )   (  e   :   значений   список  )   :   value   = 
   match   t   с 
     IND   n   -> 
      List  .   энный   е   н 
   |    ABS   t'   -> 
      FUN   (  fun   v   ->   eval   t'   (  v   ::   e  )) 
   |    APP   (  t0  ,   t1  )   -> 
      применить   (  eval   t0   e  )   (  eval   t1   e  ) 
 и   применить   (  FUN   f   :   значение  )   (  a   :   значение  )   = 
   f   a 

 let   main   (  t   :   term  )   :   значение   = 
   eval   t   [] 

Значения (типа value) объединять выражаемые ценности ( результат вычисления выражения в среде) и обозначаемый значения (значения, обозначаемые переменными в среде), терминология, принадлежащая Кристоферу Стрейчи . [10] [11]

Окружения представлены в виде списков обозначаемых значений.

Основной оценщик состоит из трех пунктов:

  • Он сопоставляет переменную (представленную индексом де Брёйна) со значением в текущей среде по этому индексу.
  • Он отображает синтаксическую функцию в семантическую функцию. (Применение семантической функции к аргументу сводится к вычислению тела соответствующей синтаксической функции в ее лексическом окружении, расширенном аргументом.)
  • Он отображает синтаксическое приложение в семантическое приложение.

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

В «Определительных интерпретаторах» Рейнольдс ответил на вопрос, четко ли определен такой самоинтерпретатор. Он ответил отрицательно, потому что стратегия оценки определяемого языка (исходного языка) определяется стратегией оценки определяющего языка (мета-языка). Если метаязык следует за вызовом по значению (как это делает OCaml), исходный язык следует за вызовом по значению. Если метаязык следует за вызовом по имени (как это делает Алгол 60 ), исходный язык следует за вызовом по имени. И если метаязык следует за вызовом по необходимости (как это делает Haskell ), то исходный язык следует за вызовом по необходимости.

В «Определительных интерпретаторах» Рейнольдс четко определил самоинтерпретатор, сделав его независимым от стратегии оценки его определяющего языка. Он исправил стратегию оценки, преобразовав самоинтерпретатор в стиль передачи продолжения , который не зависит от стратегии оценки, как позже было отражено в Гордона Плоткина «Теоремах независимости» . [12]

Более того, поскольку логические отношения еще не были обнаружены, Рейнольдс сделал полученный вычислитель, передающий продолжение, первым порядком, (1) преобразовав его с замыканием и (2) дефункционализировав продолжение. Он указал на «машинное качество» полученного интерпретатора, которое является источником машины CEK , поскольку преобразование CPS Рейнольдса предназначалось для вызова по значению. [13] Для вызова по имени эти преобразования сопоставляют самоинтерпретатор с ранним экземпляром машины Кривина . [14] машины . Таким образом можно получить машину SECD и многие другие абстрактные [15] [16]

Примечательно, что три самые известные абстрактные машины исчисление функционально соответствуют одному и тому же самоинтерпретатору.

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

Языки тотального функционального программирования , которые строго нормализуются, не могут быть полными по Тьюрингу , иначе можно было бы решить проблему остановки, проверив, проверяет ли программа тип. Это означает, что существуют вычислимые функции, которые невозможно определить на общем языке. [17] В частности, невозможно определить самоинтерпретатор в общем языке программирования, например, в любом из типизированных лямбда-исчислений , таких как просто типизированное лямбда-исчисление , Жан-Ива Жирара или система F исчисление . Коканда Тьерри конструкции . [18] [19] Здесь под «самоинтерпретатором» мы подразумеваем программу, которая принимает представление исходного термина в некотором простом формате (например, строку символов) и возвращает представление соответствующего нормализованного термина. Этот результат невозможности не справедлив для других определений «самоинтерпретатора». Например, некоторые авторы ссылались на функции типа как самопереводчики, где это тип представления -типизированные термины. Чтобы избежать путаницы, мы будем называть эти функции самораспознавателями . Браун и Палсберг показали, что средства самораспознавания могут быть определены в нескольких строго нормализуемых языках, включая System F и System F ω . [20] Это оказалось возможным потому, что типы закодированных термов, отраженные в типах их представлений, не позволяют построить диагональный аргумент . В своей статье Браун и Палсберг заявляют, что опровергают «традиционное мнение», согласно которому самоинтерпретация невозможна (и они ссылаются на Википедию как на пример общепринятой мудрости), но на самом деле они опровергают невозможность самопознания, отдельное понятие. В своей последующей работе они переходят на более конкретную терминологию «самопознающих», используемую здесь, заметно отличая их от «самооценщиков» типа . [21] Они также признают, что реализация самооценки кажется более сложной, чем самопознание, и оставляют реализацию первой на строго нормализующем языке открытой проблемой.

Использует [ править ]

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

Примеры [ править ]

Многие языки имеют одну или несколько метациклических реализаций. Ниже приведен неполный список.

Некоторые языки с метациклической реализацией, разработанные снизу вверх, в сгруппированном хронологическом порядке:

Некоторые языки с метациклической реализацией через третьих лиц:

См. также [ править ]

Ссылки [ править ]

  1. ^ Перейти обратно: а б с д Это Рейнольдс, Джон К. (1972). «Определенные интерпретаторы языков программирования высшего порядка». Материалы ежегодной конференции ACM - ACM '72 (PDF) . Том. 2. Материалы 25-й Национальной конференции ACM. стр. 717–740. дои : 10.1145/800194.805852 . Проверено 14 апреля 2017 г.
  2. ^ Перейти обратно: а б Рейнольдс, Джон К. (1998). «Возвращение к дефинициональным интерпретаторам» (PDF) . Вычисления высшего порядка и символьные вычисления . 11 (4): 355–361. дои : 10.1023/А:1010075320153 . S2CID   34126862 . Проверено 21 марта 2023 г.
  3. ^ Перейти обратно: а б «Метациркулярный оценщик» . Структура и интерпретация компьютерных программ . Массачусетский технологический институт.
  4. ^ Бём, Коррадо (1954). «Цифровые калькуляторы. Расшифровка логико-математических формул самой машиной в разработке программы». Анна. Мачта. Приложение Pura . 4 (37): 1–51.
  5. ^ Кнут, Дональд Э .; Пардо, Луис Трабб (август 1976 г.). Раннее развитие языков программирования . п. 36.
  6. ^ Маккарти, Джон (1961). «Универсальная функция LISP» (PDF) . Руководство программиста Lisp 1.5 . п. 10.
  7. ^ Харви, Брайан. «Почему структура и интерпретация компьютерных программ имеют значение» . люди.eecs.berkeley.edu . Проверено 14 апреля 2017 г.
  8. ^ Брейтуэйт, Реджинальд (22 ноября 2006 г.). «Значение метациркулярного интерпретатора» . Проверено 22 января 2011 г.
  9. ^ Дэнви, Оливье (2006). Аналитический подход к программам как объектам данных (Диссертация). дои : 10.7146/аул.214.152 . ISBN  9788775073948 .
  10. ^ Стрейчи , Кристофер (1967). Фундаментальные концепции языков программирования (Технический отчет). дои : 10.1023/А:1010000313106 .
  11. ^ Моссес, Питер Д. (2000). «Предисловие к «Фундаментальным понятиям языков программирования» ». Вычисления высшего порядка и символьные вычисления . 13 (1/2): 7–9. дои : 10.1023/А:1010048229036 . S2CID   39258759 .
  12. ^ Плоткин, Гордон Д. (1975). «Вызов по имени, вызов по значению и лямбда-исчисление» . Теоретическая информатика . 1 (2): 125–159. дои : 10.1016/0304-3975(75)90017-1 .
  13. ^ Феллизен, Матиас ; Фридман, Дэниел (1986). Операторы управления, машина SECD и лямбда-исчисление (PDF) . Формальное описание концепций программирования III, Elsevier Science Publishers BV (Северная Голландия). стр. 193–217.
  14. ^ Шмидт, Дэвид А. (1980). «Машины переходов состояний для выражений лямбда-исчисления». Машины перехода состояний для выражений лямбда-исчисления . Конспекты лекций по информатике. Том. 94. Генерация компилятора, управляемая семантикой, LNCS 94. стр. 415–440. дои : 10.1007/3-540-10250-7_32 . ISBN  978-3-540-10250-2 .
  15. ^ Дэнви , Оливье (2004). Рациональная деконструкция машины SECD Ландина (PDF) . Реализация и применение функциональных языков, 16-й международный семинар, IFL 2004, Пересмотренные избранные статьи, Конспекты лекций по информатике 3474, Springer. стр. 52–71. ISSN   0909-0878 .
  16. ^ Агер, Мэдс Сиг; Бернацкий, Дариуш; Дэнви, Оливье ; Мидтгаард, январь (2003). «Функциональное соответствие между вычислителями и абстрактными машинами» . Серия отчетов БРИКС . 10 (13). 5-я Международная конференция ACM SIGPLAN по принципам и практике декларативного программирования (PPDP'03): 8–19. дои : 10.7146/brics.v10i13.21783 .
  17. ^ Риоло, Рик; Ворзель, Уильям П.; Котанчек, Марк (4 июня 2015 г.). Теория и практика генетического программирования XII . Спрингер. п. 59. ИСБН  978-3-319-16030-6 . Проверено 8 сентября 2021 г.
  18. ^ Конор МакБрайд (май 2003 г.), «при прекращении деятельности» (размещено в списке рассылки Haskell-Cafe).
  19. ^ Андрей Бауэр (июнь 2014 г.), Ответ на: Общий язык, который может интерпретировать только полный по Тьюрингу язык (опубликовано на сайте Theoretical Computer Science StackExchange )
  20. ^ Браун, Мэтт; Палсберг, Йенс (11 января 2016 г.). «Прорыв через барьер нормализации: самопереводчик f-omega» (PDF) . Материалы 43-го ежегодного симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . стр. 5–17. дои : 10.1145/2837614.2837623 . ISBN  9781450335492 . S2CID   14781370 .
  21. ^ Браун, Мэтт; Палсберг, Йенс (январь 2017 г.). «Типизированная самооценка с помощью функций интенсионального типа». Материалы 44-го симпозиума ACM SIGPLAN по принципам языков программирования . стр. 415–428. дои : 10.1145/3009837.3009853 . ISBN  9781450346603 .
  22. ^ Ориоль, Мануэль; Мейер, Бертран (29 июня 2009 г.). Объекты, компоненты, модели и шаблоны: 47-я международная конференция Tools EUROPE 2009, Цюрих, Швейцария, 29 июня – 3 июля 2009 г., Материалы . Springer Science & Business Media. п. 330. ИСБН  9783642025716 . Проверено 14 апреля 2017 г.
  23. ^ Метациклическая реализация языка программирования Pico.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0B3760B68D4FD189256E4746C42AC057__1695366180
URL1:https://en.wikipedia.org/wiki/Meta-circular_evaluator
Заголовок, (Title) документа по адресу, URL1:
Meta-circular evaluator - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)