Skip to content

Latest commit

 

History

History
24 lines (19 loc) · 3.39 KB

metacomp.md

File metadata and controls

24 lines (19 loc) · 3.39 KB

Метавычисления

Климов А.В., Романенко С.А. Суперкомпиляция: основные принципы и базовые понятия

https://keldysh.ru/papers/2018/prep2018_111.pdf

Комментарий от @ksromanov. В статье рассказывается про то, что же именно скрывается под загадочным термином "суперкомпиляция". Для меня, если честно, до прочтения этой статьи сам термин был столь же загадочен, как "сепуление". Авторы же дают определение самого подхода и рассказывают про наиболее популярный метод суперкомпиляции — преобразование программ через построение графа конфигураций, развеивая туман магии. Далее подход раскрывается на синтетических примерах, базирующихся на числах Пеано. Примеры показывают как возможости, так и ограничения подхода. Затем авторами рассказывается про родство суперкомпиляции и специализации программ (проекций Футамуры), кстати с определением, что же такое "специализация". И, окончательно, даётся краткий экскурс в историю суперкомпиляции.

Мне статья очень понравилась тем, что, с одной стороны, она обладает строгостью хорошей научной работы "старой школы", а с другой стороны написана приятным достаточно простым языком, облегчающим чтение. Хотя, конечно, мне пришлось перечитать её несколько раз. К сожалению, она рассматривает очень упрощённый модельный пример, недостаточно раскрывает специализацию, и, тем не менее, довольно объёмиста и сложна. По-хорошему, хотелось бы иметь учебник, позволяющий написать собственный суперкомпилятор. Возможно, наилучшим языком будет язык из семейства LISP.

С.А. Романенко написал и продолжение этой статьи под названием «Суперкомпиляция: гомеоморфное вложение, вызов по имени, частичные вычисления» https://keldysh.ru/papers/2018/prep2018_209.pdf, более подробно раскрывающую детали реализации суперкомпилятора SPSC (https://github.com/sergei-romanenko/spsc). В ней также упоминается написанный на Scheme специализатор Unmix https://github.com/sergei-romanenko/unmix.