## Предисловие

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

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

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

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

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

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

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

* генерация интерпретируемого кода (курсовой Вадима Сухарева, весна 2009,
  курсовой Игоря Дрогунова, осень 2015),
* компиляция в C# (курсовой Натальи Конновой (Быкадоровой), весна 2010 —
  не в основной ветке, метка 005),
* представление объектных выражений при помощи rope (курсовой Константина
  Белёва, осень 2014 — работа не завершена, нет в репозитории),
* оптимизация совместного сопоставления с образцом (курсовой Павла Батусова,
  осень 2014, ВКР бакалавра Ивана Скрыпникова, весна 2016, курсовой Павла
  Савельева, осень 2016),
* оптимизация построения результатных выражений (курсовой Дорофеева Михаила,
  весна 2010 — не в основной ветке, метка 006, ВКР бакалавра Евгения Копьёва,
  весна 2016),
* встроенный пошаговый отладчик (курсовой Дарьи Сухомлиновой, осень 2016),
* синтаксис присваиваний (курсовой Дамира Габбасова, осень 2016).

В процессе эволюции компилятор незначительно отошёл от своей первоначальной
простоты. Во-первых, он стал использоваться как 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>
