Рефал - язык манипулирования
символьными объектами: текстами, формулами,
программами и т.п. Программа на Рефале состоит из
функций, которые могут определяться друг через
друга, т.е. рекурсивно. Отсюда и название:
АЛгоритмический язык РЕкурсивных Функций. Язык
Рефал был создан В. Турчиным [Тур 66] в качестве
метаязыка для описания семантики других языков.
Впоследствии, в результате появления достаточно
эффективных реализаций на ЭВМ он стал находить
практическое использование в качестве языка
программирования.
Рефал - язык бестиповый. В его основе лежит
понятие объектного выражения как универсального
типа данных. Все аргументы и результаты всех
функций являются объектными выражениями.
Объектное выражение определяется таким
образом, что операция конкатенации делается
неявной, скрытой. Точнее сказать, что
конкатенация на уровне значений выражается
конкатенацией на уровне имен. Это свойство
вытекает из основной цели рефала как метаязыка
для описания различных языковых объектов. Оно
придает особую выразительную силу и остальным
средствам языка, таким как образцы и
результатные выражения.
Образцы - мощное изобразительное средство. Они
в сжатой и наглядной форме обеспечивают как
запись условий на вид аргумента, так и разбиение
аргумента на составные части. Язык образцов
рефала лишен каких-либо "упрощающих"
ограничений, свойственных другим языкам, что
делает его очень простым для освоения и
использования.
Язык определения функций рефала, основанный на
понятиях образца и результатного выражения
чрезвычайно прост и компактен. Его минимальная
версия получила название Базисный рефал [Тур 74]. Диалект
Базисного рефала под названием Рефал-2 [Клр 86, Клр87] был
реализован на многих типах отечественных ЭВМ и
долгое время играл роль де-факто стандарта языка
Рефал.
В середине 80-х В. Турчиным предложен язык
Рефал-5, который содержит Базисный рефал в
качестве подмножества. Расширения языка Рефал-5
качественно меняют стиль программирования,
поэтому можно говорить о нем как о новом
поколении языка. В настоящее время существует
две реализации языка Рефал-5: одна выполнена Д.
Турчиным, другая - Н. Кондратьевым и Арк. Климовым.
Обе имеют практически один и тот же входной язык,
но отличаются рядом особенностей реализации.
Вторая известна также под названием Рефал-6,
однако следует помнить, что это название не
языка, а его реализации.
Параллельно, С. Романенко разработал язык Рефал
Плюс, основаный в принципе на тех же расширениях,
что и Рефал-5, но доведенный до концептуальной
полноты. В нем основным можно назвать расширение
рефала средствами обработки неуспехов.
Впоследствии ряд нововведений Рефала Плюс в
несколько пересмотренном виде был перенесен
Арк.Климовым в реализацию Рефала-6. В настоящее
время (1999) продолжается работа по унификации
входных языков Рефал Плюс и Рефал-6.
Арк.Климов. |