Рефал-5λ

Предисловие

РЕФАЛ — РЕкурсивный Функциональный АЛгоритмический язык [1], язык функционального программирования, ориентированный на символьные вычисления, обработку и преобразование текстов. У данного языка есть много диалектов, язык Рефал-5λ — один из них.

Примечание. Устоявшегося способа написания названия языка РЕФАЛ нет, встречается запись как кириллицей, так и латиницей, целиком в верхнем регистре, с большой буквы или с маленькой. В этом документе, когда речь идёт о семействе языков, я буду использовать запись в верхнем регистре (РЕФАЛ), когда будет идти речь о конкретном диалекте, буду использовать запись, принятую в руководстве конкретного языка. Если слово «рефал» будет употребляться в роли прилагательного, то оно будет писаться с маленькой буквы: рефал-выражение, рефал-программа.

Данная реализация предоставляет два похожих диалекта: Рефал-5λ и Простой Рефал. При ссылках на них рекомендуется использовать именно такую запись: с большой буквы (каждое слово) и буква «лямбда» — греческая. На английском языке эти названия рекомендуется записывать Refal-5λ, Simple Refal. Если типографские возможности не допускают использования символа «λ», рекомендуется запись Рефал-5-лямбда, Refal-5-lambda.

Далее по тексту суффикс «-5λ» часто будет опускаться — вместо «Рефал-5λ» будет записываться для краткости просто «Рефал».

Изначально язык (под именем Простой Рефал) разрабатывался Александром Коноваловым aka Маздайщик как исследовательский проект — автор хотел для себя понять, как осуществляется компиляция кода на РЕФАЛе в императивный код. Целью было написание минимального, но при этом алгоритмически полного компилятора диалекта Базисного РЕФАЛа, простота транслятора (например, однопроходность) была важнее удобства программирования на языке. Несмотря на это ограничение (а, возможно, благодаря ему), язык получился довольно целостным и согласованным.

Компилятор оказался достаточно простым, благодаря чему в МГТУ имени Н. Э. Баумана на кафедре ИУ9 «Теоретическая информатика и компьютерные технологии» он использовался (и используется) как тестовый полигон для нескольких курсовых проектов и выпускных квалификационных работ бакалавра.

Исследовались на нём следующие возможности:

В процессе эволюции компилятор незначительно отошёл от своей первоначальной простоты. Во-первых, он стал использоваться как back-end для Модульного Рефала, для чего в него были добавлены такие возможности, как идентификаторы, абстрактные типы данных и статические ящики. Позже на нём исследовалась реализация вложенных функций — соответственно, язык пополнился и этим удобным средством.

Постепенно автор (Маздайщик) понял, что, во-первых, из-за необходимости предобъявлений на языке программировать неудобно, во-вторых, отдельный несовместимый диалект никому не нужен. И поскольку язык был концептуально ближе всего к классическому диалекту РЕФАЛа-5, было решено плавно преобразовать его в компилятор диалекта РЕФАЛа-5, однако, обладающего возможностями Простого Рефала (прежде всего, функциями высшего порядка и вложенными функциями в том числе) — такой диалект был назван Рефал-5λ.

Ссылки

  1. А. П. Немытых, Лекции по языку программирования Рефал. Сборник трудов по функциональному языку программирования Рефал, том I // Под редакцией А. П. Немытых. — Переславль-Залесский: Издательство «СБОРНИК», 2014, 194 с. — ISBN 978-5-9905410-1-6 — стр. 120. Доступно в Интернете: http://refal.botik.ru/library/refal2014_issue-I.pdf