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

Рефакторинг, учитывающий неразменные переменные #354

Merged
merged 2 commits into from
Apr 11, 2021

Conversation

Mazdaywik
Copy link
Member

@Mazdaywik Mazdaywik commented Apr 10, 2021

@VladisP, Вам интересен только первый коммит 7119e63 — переименование функции Solve в Solve-Drive. Вам в рамках задачи #322 потребуется также написать функцию Solve-Spec, которая будет использоваться при специализации. Там, где Solve-Spec будет предлагать динамическое обобщение, функция Solve-Drive должна будет просто возвращать Undefined.

@Apakhov, я поменял интерфейс функции OptTree-Drive, чтобы он был совместим с оптимизациями #231 и #283, возможно, я ими займусь весной. Кроме того, ушло устаревающее деление режима прогонки на режим «прогонки» (когда сужение разрешены) и «встраивания» (когда они запрещены). Полностью это деление устареет при выполнении Вами задачи #340. Таким образом, второй коммит 1ef5b6c — шаг в направлении #340.

Возможно, я ещё немного упрощу OptTree-Drive — вместо t.Metatables между функциями будет передаваться e.DriveInfo, поэтому пока это draft pull request. Чистовиком он будет либо если я это сделаю (сегодня-завтра), либо передумаю, т.к. имеющаяся архитектура уже неплоха.


Неразменные переменные (термин из старой статьи Турчина) — переменные, которые запрещено сужать при прогонке. В коде они обозначены как e.WholeVars.

Смысл в том, что в рамках задач #251 и #322 потребуется разработать функцию
обобщённого сопоставления с другим интерфейсом — Solve-Spec. Эта функция
будет возвращать либо просто решение (когда решение существует),
либо динамическое обобщение левой части аргумента и результат для него.

Функции Solve-Drive и Solve-Spec будут обёртками над некоторым внутренним
кодом в GenericMatch.ref.
Теперь в <OptTree-Drive …> не передаются флаги оптимизации.
Значения флагов учитываются при построении e.DriveInfo:
если режим оптимизации отключён, соответствующие функции просто
не вносятся в e.DriveInfo, если режим прогонки ослаблен до OptInline,
то прогоняемые функции помечаются как Inline.

В интерфейс и логику <OptTree-Drive-Expr …> добавлены неразменные
(несужаемые) переменные. Однако, они пока используются также,
как ранее используемые флаги Drive и Inline: для режима прогонки
с сужениями множество пустое, для прогонки без сужений — совпадает
со множеством всех переменных.
@Mazdaywik Mazdaywik added this to the study spring 2021 milestone Apr 10, 2021
@Mazdaywik Mazdaywik requested review from Apakhov and VladisP April 10, 2021 09:28
@Mazdaywik Mazdaywik self-assigned this Apr 10, 2021
@Mazdaywik Mazdaywik marked this pull request as ready for review April 11, 2021 10:10
@Mazdaywik Mazdaywik merged commit 7e87b7d into master Apr 11, 2021
@Mazdaywik
Copy link
Member Author

Лучшее — враг хорошего. Возиться с t.Metatables не буду.

@Mazdaywik Mazdaywik deleted the mazdaywik-whole-vars branch April 13, 2021 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants