flang компилятор доказывает, что программа не зациклится 0.6.2 GitHub

Переключение слоя не всегда опускает потолок: у sets он ВЫРОС, и это не провал

До 19 августа каждое переключение слоя на flang опускало счётчик JavaScript в рабочем пути. У отношений множеств вышло наоборот: 36 840 → 36 915, плюс 75 строк. Причина не в плохой работе, а в том, что у файла ДВЕ ПОЛОВИНЫ, и вынуть можно было только одну.

flang/src/sets.mjs (291 строка) отвечал за две разные вещи:

Вторая берёт не программу целиком, а ctx, который типизатор собрал у себя. Отдельно от типизатора она не снимается и не сверяется. Значит модуль уходит не целиком: checkSetLaws переключается на слой, а checkSetShapes уедет вместе с types.mjs — тем же разделением, каким выехал obligations.mjs.

Поправка 19 августа: разделение сделано, и предсказание сбылось буквально. Здесь стояло «(503 строки)» — столько в файле было, пока половины лежали вместе. checkSetShapes со своими помощниками уехал в flang/src/set-shapes.mjs (252 строки), в sets.mjs осталась 291 строка законов, и из рабочего пути flang check модуль ушёл ЦЕЛИКОМ. Потолок при этом опустился: 36 239 → 35 991, на 252 строки, а число ФАЙЛОВ не изменилось — один вышел, один вошёл, ровно как у obligations.mjs и as-written.mjs.

Вывод самой заметки от этого не меняется, а подтверждается: рост потолка при переключении был не провалом, а честным показанием того, что вынута половина. Вторая половина вынулась отдельным приёмом и отдельным заходом.

Это два разных события, и путать их дорого. «Вынут из решения» — модуль больше ничего не решает. «Вынут из загрузки» — процесс его больше не читает. У множеств случилось первое и не случилось второе, и потолок честно показал это ростом: дверь в src/self.mjs (+59) и строка таблицы в bin/flang.mjs (+16) пришли, а 503 строки никуда не делись.

Чем подтверждено. Прогон flang/test/rabochiy-put.test.mjs на ветке work/orakuly: до переключения 27 файлов / 36 840 строк, после — 27 файлов / 36 915. Разложение по строкам самого модуля: только checkSetLaws со своим хозяйством (вложениеИз, образыСтороны, сеткаВхода, вычислитель, покажи) — 225 строк; остаётся 278.

Чем ограничено. Это не общий закон про все переключения: у равенства морфизмов в тот же день src/setoid.mjs ушёл из пути целиком, и потолок упал с 37 263 до 36 581. Признак, по которому случай узнаётся заранее, ровно один: у функции второй аргумент — чужое состояние (ctx), а не программа. Такую половину переносить бесполезно: сверять её не с чем, пока не разделён её хозяин.

Связано: removed-from-the-decision-and-removed-from-the-load-are-two-events, porting-the-tier-three-oracle-splits-into-five-different-tasks