Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Подготовить архитектуру компилятора к ВКР2021 #349

Closed
4 tasks done
Mazdaywik opened this issue Mar 15, 2021 · 2 comments · Fixed by #351
Closed
4 tasks done
Assignees

Comments

@Mazdaywik
Copy link
Member

Mazdaywik commented Mar 15, 2021

Эта задача блокирует задачи #340, #283, #231 и #248.

Требуется отделить код, который будет изменяться в рамках задачи #340 («Прогонка, которая не зацикливается») от кода, который будет изменяться в рамках остальных трёх задач, связанных с оптимизациями условий и нетривиальных образцов (#283, #231 и #248). Изменения в этих трёх задачах будут координироваться отдельно.

Такое разделение выполнить довольно просто. Задача #340 подразумевает выполнение нескольких прогонок в отдельно взятом результатном выражении. Результатом такой прогонки будет набор пар: сужения на переменные выражения + преобразованное выражение. Код, выполняющий преобразование в функции, будет к прогонке в выражении относиться как к чёрному ящику: получает набор новых сужений и новых результатных выражений, дробит предложение по вариантам, применяет к образцу сужения и заменяет выражение на результат прогонки. На данный момент выражением является только правая часть предложения при левой части в виде L-образца без условий. В дальнейшем будет интереснее (#283, #231, #248).

Эта задача подразумевает рефакторинг файла OptTree-Drive.ref с выносом логики прогонки в отдельный новый файл OptTree-Drive-Expr.ref. Соответственно, @Apakhov будет работать только в файле OptTree-Drive-Expr.ref, а @torrentino555 и @dynamic-pie — в файле OptTree-Drive.ref. Вопрос координации совместной работы @torrentino555 и @dynamic-pie будет решаться в процессе работы.


Реализовывать новый алгоритм обобщённого сопоставления #322 без модификации алгоритма специализации смысла мало: на имеющихся прогонках прирост производительности будет небольшим. Поэтому нужно подготовить и компонент специализации.


Задача #340 требует алгоритма проверки отношения Хигмана-Крускала, который реализован в OptTree-Spec.ref. Можно просто объявить соответствующую функцию entry и добавить $EXTERN. Однако, в этом случае получится странная связь между прогонкой и специализацией. Поэтому нужно выделить отношение Хигмана-Крускала в отдельный файл.


Нужно решить важный вопрос: для задач #322+#251 и #340 использовать новые опции или менять код на месте?

Вариант добавления новых опций, преимущества и недостатки:

  • ✔ Для замера производительности можно будет использовать простой бенчмарк самоприменения.
  • ❌ Сильно усложнится архитектура — нужно будет сохранять старый код в дополнение к новому. Получится куча вариантов a la HighLevelRASL. Но в случае оптимизаций уровня RASL’а это оправдано, а тут сначала эту архитектуру нужно будет добавлять, потом удалять, оставляя только новый код.
  • ❌ Нужно будет протягивать эти флаги в те точки, где выбирается конкретный вариант алгоритма, либо использовать глобальные переменные (копилку или статические ящики).
  • ❌ Ещё больше вариантов ветвления, ещё медленнее автотесты.

Вариант изменения кода на месте.

  • ✔ Архитектуру существенно менять не надо будет.
  • ✔ Никакой протяжки новых флагов, используем существующие.
  • ✔ Не нужно новых вариантов в автотесты.
  • ❌ Не получится использовать встроенный бенчмарк. Нужно будет делать сравнение производительности актуальной рабочей версии с некоторой предыдущей референсной версией, например, 3.3. Но для этого нужно будет создать отдельный бенчмарк. Например, развить https://github.com/Mazdaywik/simple-refal-benchmark.

Так что более предпочтительным выглядит второй вариант — изменение кода на месте.


  • Выделить код прогонки выражения в отдельный файл.
  • Выделить отношение Хигмана-Крускала в отдельный файл.
  • Возможно, сделать какие-нибудь дополнительные рефакторинги в модуле специализации.
  • На основе https://github.com/Mazdaywik/simple-refal-benchmark подготовить хороший, годный бенчмарк для Рефала-5λ, в том числе, умеющий сравнивать производительность с Рефалом-5 там, где это возможно.
@Mazdaywik Mazdaywik added this to the study spring 2021 milestone Mar 15, 2021
@Mazdaywik Mazdaywik self-assigned this Mar 15, 2021
@Mazdaywik
Copy link
Member Author

@dynamic-pie и @torrentino555 сменили темы и научного руководителя ВКР, поэтому задачи #231, #248 и #283 в рамках ВРК2021 выполняться не будут.

Однако, задача всё равно актуальна, т.к. позволит заметно упростить код для понимания. Кроме того, не исключено, что упомянутыми тремя задачами я сам займусь. Решение настоящей задачи позволит мне оптимизировать условия, не конфликтуя с @Apakhov’ым.

@Mazdaywik Mazdaywik changed the title Разделить правки по задачам развития прогонки Рефакторинги: подготовить кодовую базу к ВКР Mar 22, 2021
@Mazdaywik Mazdaywik changed the title Рефакторинги: подготовить кодовую базу к ВКР Подготовить архитектуру компилятора к ВКР2021 Mar 23, 2021
Mazdaywik added a commit that referenced this issue Mar 26, 2021
Переименование
  HighLevelRASL-Common.ref → HighLevelRASL-Common+Condition.ref
в отдельной ветке для сохранения истории правок.
Mazdaywik added a commit that referenced this issue Mar 26, 2021
Переименование
  HighLevelRASL-Condition.ref → HighLevelRASL-Common+Condition.ref
в отдельной ветке для сохранения истории правок.
Mazdaywik added a commit that referenced this issue Mar 26, 2021
Слияние двух отдельных веток.
История правок в объединённом файле сохранится.
Mazdaywik added a commit that referenced this issue Mar 26, 2021
Переименование обратно
  HighLevelRASL-Common+Condition.ref → HighLevelRASL-Common.ref
@Mazdaywik
Copy link
Member Author

Из постановки текущей задачи исключён бенчмарк, он вынесен в независимую задачу #350.

Mazdaywik added a commit that referenced this issue Apr 7, 2021
Файл OptTree-Drive.ref переименован для сохранения истории правок.
Mazdaywik added a commit that referenced this issue Apr 7, 2021
Техническое слияние двух веток. Неиспользуемые функции в файлах
OptTree-Drive.ref и OptTree-Drive-Expr.ref удалены. История правок,
отображаемая в git blame, сохранена.
Mazdaywik added a commit that referenced this issue Apr 7, 2021
Попутно актуализирован комментарий, мультимножество в нём не было описано.
Mazdaywik added a commit that referenced this issue Apr 7, 2021
)

Файл OptTree-Spec.ref переименован для сохранения истории правок.
Mazdaywik added a commit that referenced this issue Apr 7, 2021
)

Техническое слияние двух веток. Неиспользуемые функции в файлах
OptTree-Spec.ref и OptTree-Relation.ref удалены. История правок,
отображаемая в git blame, сохранена.
@Mazdaywik Mazdaywik linked a pull request Apr 7, 2021 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant