bmstu-iu9 / bmstu-iu9/refal-5-lambda
Тестирование, рефакторинги, оптимизации и исправления после ВКР
- Dominant language
- C++
- Stars
- 97
- Forks
- 40
- PR merge metrics
- No merged PRs in 30d
Description
Только что завершились две выпускные квалификационные работы:
* @Apakhov, реализовавший построение ациклического графа суперкомпиляции путём задержки рекурсивных вызовов (#340),
* @VladisP, реализовавший #322 и #251.
Эти расширения станут основным новшеством версии 3.4. Однако, прямо сейчас создавать новую версию преждевременно по следующим причинам.
1. @Apakhov и @VladisP намеренно работали с очень ограниченным объёмом кода (в смысле, я ограничил их работу). Работа @Apakhov’а была ограничена файлом `OptTree-Drive-Expr.ref`, работа @VladisP’а — файлами `GenericMatch.ref` и `OptTree-Spec.ref`. Однако, полноценная реализация новых функций требует изменения куда большего объёма кода (например, скрипта в `OptTree.ref`).
Ограниченность поля для работы @Apakhov’а и @VladisP’а была намеренной, т.к. этого было достаточно для выполнения содержательной части задачи.
2. Ациклическая прогонка @Apakhov’а делает ненужной авторазметку прогоняемых функций в том виде, в каком она сейчас есть. Исходно разметка была призвана не допускать пометки `$DRIVE` для рекурсивных функций. Сейчас рекурсивные функции могут иметь метку `$DRIVE`, их прогонка не зациклится.
3. Со специализацией без шаблона @VladisP’а становятся ненужными шаблоны в абстрактном синтаксическом дереве. Но, чтобы их удалить, нужны более глубокие правки.
4. Да, авторазметка для специализации тоже становится ненужной.
4. Основные компоненты для #314 уже реализованы ([#251](https://github.com/bmstu-iu9/refal-5-lambda/issues/251), [#322](https://github.com/bmstu-iu9/refal-5-lambda/issues/322), [#340](https://github.com/bmstu-iu9/refal-5-lambda/issues/340)). Фактически в #314 нужно реализовать поддержку псевдокомментариев так, как она описана (и в следующем релизе удалить старый синтаксис).
5. Написанный студентами код может быть неоптимальным, т.к. у них нет опыта в оптимизации Рефала.
6. Новые оптимизации работают глубже, из-за чего могут выявиться проблемы в других частях системы. В частности, обостряются проблемы с раздуванием программ (#332). На данный момент проблема купирована в 54c28cad9921556d208bc43dc88f55943d7885cb.
7. Хотя все автотесты выполнились, включая и случайные, тестовое покрытие, выполненное студентами неполное. Требуется более тщательное тестирование.
8. Автотесты проверяют корректность. Содержательную сторону нужно тестировать вручную.
9. Даже если обе оптимизации в отдельных ветках работали порознь, при работе вместе возможны проблемы.
10. Можно удалить `ObjectMatch.ref`, т.к. новый алгоритм сопоставления покрывает этот случай.
----------------------
В первую очередь нужно
* самоприменить компилятор на максимальных оптимизациях,
* проверить, что совместная работа оптимизаций работает так, как надо (остаточная программа в логе соответствует ожиданиям).
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.