Description
Только что завершились две выпускные квалификационные работы:
- @Apakhov, реализовавший построение ациклического графа суперкомпиляции путём задержки рекурсивных вызовов (Прогонка, которая не зацикливается #340),
- @VladisP, реализовавший Расширенный алгоритм обобщённого сопоставления #322 и Специализация без шаблона #251.
Эти расширения станут основным новшеством версии 3.4. Однако, прямо сейчас создавать новую версию преждевременно по следующим причинам.
-
@Apakhov и @VladisP намеренно работали с очень ограниченным объёмом кода (в смысле, я ограничил их работу). Работа @Apakhov’а была ограничена файлом
OptTree-Drive-Expr.ref
, работа @VladisP’а — файламиGenericMatch.ref
иOptTree-Spec.ref
. Однако, полноценная реализация новых функций требует изменения куда большего объёма кода (например, скрипта вOptTree.ref
).Ограниченность поля для работы @Apakhov’а и @VladisP’а была намеренной, т.к. этого было достаточно для выполнения содержательной части задачи.
-
Ациклическая прогонка @Apakhov’а делает ненужной авторазметку прогоняемых функций в том виде, в каком она сейчас есть. Исходно разметка была призвана не допускать пометки
$DRIVE
для рекурсивных функций. Сейчас рекурсивные функции могут иметь метку$DRIVE
, их прогонка не зациклится. -
Со специализацией без шаблона @VladisP’а становятся ненужными шаблоны в абстрактном синтаксическом дереве. Но, чтобы их удалить, нужны более глубокие правки.
-
Да, авторазметка для специализации тоже становится ненужной.
-
Основные компоненты для Универсальная древесная оптимизация $OPT #314 уже реализованы (#251, #322, #340). Фактически в Универсальная древесная оптимизация $OPT #314 нужно реализовать поддержку псевдокомментариев так, как она описана (и в следующем релизе удалить старый синтаксис).
-
Написанный студентами код может быть неоптимальным, т.к. у них нет опыта в оптимизации Рефала.
-
Новые оптимизации работают глубже, из-за чего могут выявиться проблемы в других частях системы. В частности, обостряются проблемы с раздуванием программ (Древесные оптимизации раздувают программы #332). На данный момент проблема купирована в 54c28cad9921556d208bc43dc88f55943d7885cb.
-
Хотя все автотесты выполнились, включая и случайные, тестовое покрытие, выполненное студентами неполное. Требуется более тщательное тестирование.
-
Автотесты проверяют корректность. Содержательную сторону нужно тестировать вручную.
-
Даже если обе оптимизации в отдельных ветках работали порознь, при работе вместе возможны проблемы.
-
Можно удалить
ObjectMatch.ref
, т.к. новый 5965 лгоритм сопоставления покрывает этот случай.
В первую очередь нужно
- самоприменить компилятор на максимальных оптимизациях,
- проверить, что совместная работа оптимизаций работает так, как надо (остаточная программа в логе соответствует ожиданиям).