- 
                Notifications
    You must be signed in to change notification settings 
- Fork 39
Description
Эта задача — подзадача для #91. Подробнее о встраивании и прогонке см. в #91.
Основные расширения синтаксиса
- Добавить синтаксис во front-end Простого Рефала, позволяющий отдельно задавать свойства функций в виде списка имён ($ENTRY,$INLINEи т.д.)
Foo {
  …
}
Bar {
  …
}
$ENTRY Foo, Bar;
$INLINE Bar;
- Во front-end’е Простого Рефала добавить поддержку ключевого слова $INLINEперед именем функции (по аналогии с$ENTRY):
$INLINE Apply { … }
- Во front-end’е Рефала-5λ добавить псевдокомментарий *$INLINE(уточнение: эту часть задачи делаю я, @Mazdaywik):
*$INLINE Foo, Bar;
- Реализовать поддержку встраивания функций как один из проходов обессахаривателя. Семантика встраивания достаточно подробно описана в задаче Встраивание и специализация функций в Рефале-5λ #91.
Нюанс — встраивание и прогонка
В задаче #91 предлагается реализовать механизм прогонки с расщеплением предложений:
$INLINE Foo {
  s.X = s.X s.X
  ((e.Y)) = (((e.Y)));
}
Bar {
  t.X = #A;
  t.X t.Y t.Z = <Foo t.Y>;
  e.K = #B;
}
 ↓ ↓ ↓
Bar {
  t.X = #A;
  t.X s.X1 t.Z = s.X1 s.X1;
  t.X ((e.Y1)) t.Z = (((e.Y1)));
  t.X t.Y t.Z = <Foo1 t.Y>;
  e.K = #B;
}
$ENUM Foo1;
Достоинство данного механизма: повышается глубина оптимизации. Недостаток — для рекурсивных встраиваемых функций он будет зацикливаться. Поэтому предлагается ввести два ключевых слова: $INLINE для простого встраивания (не меняющего левую часть) и $DRIVE для прогонки (соответственно, *$INLINE и *$DRIVE для Рефала-5λ).
Список литературы
Теоретической основой данной задачи являются прежде всего две работы Турчина.
- В. Ф. Турчин. Эквивалентные преобразования рекурсивных функций, описанных на языке РЕФАЛ. В cб.: Труды симпозиума “Теория языков и методы построения систем программирования”, Киев-Алушта: 1972. Стр. 31-42. (djvu скан), (pdf скан), (djvu LaTeX), (pdf LaTeX)
- В. Ф. Турчин. Эквивалентные преобразования программ на РЕФАЛе. В cб.: Труды ЦНИПИАСС “Автоматизированная система управления строительством”, выпуск 6, М: 1974. Стр. 36-68. (djvu), (pdf).
Следует иметь ввиду, что в этих материалах рассматриваются L-выражения — жёсткие выражения без t-переменных. При реализации прогонки в Простом Рефале следует описанные алгоритмы аккуратно расширить на t-переменные.