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

Чужие пакеты надо хранить: из трёх укладов два — это один в два слоя, а третий не про наше десятилетие

Прямой ответ на вопрос «как поступать с написанными другими кодерами пакетами». Укладов предлагалось три, и первое, что с ними надо сделать, — перестать считать их тремя.

Хранилище по содержимому и реестр имён — не выбор из двух, а два слоя одного решения. Хеш отвечает на вопрос «что считать одним и тем же»; имя с версией отвечает на вопрос «как об этом говорить и что ставить». Ни один из двух не закрывает вопрос другого: у хеша нет способа сказать «дай посвежее», у имени нет способа сказать «ровно этот код». Ровно так устроены Go (имена и версии снаружи, хеши в go.sum), Nix и, если снять лозунг, сам Unison Share — адреса внутри, @автор/проект/releases/7.19.2 снаружи. Это уже принятое решение (hash-inside-names-outside), и новые замеры его не пошатнули, а укрепили.

Вывод по спецификации отпадает, и отпадает по счёту, а не по вкусу. Три числа подряд, каждое со своим замером:

доводчислогде
из хеша код не восстановить540 бит тела против 256 бит адресаcode-cannot-be-derived-from-its-hash
спецификация не называет функциюоднозначна в 36,5 % случаевa-signature-does-not-determine-a-function
экономить нечемвся stdlib370 КиБ, весь flang в дереве — 3,4 МиБтам же

Третий довод убивает замысел раньше первых двух и по другой причине. Даже если бы синтез работал безупречно, он экономил бы мегабайты места, платя машино-часами вывода. Место уже измерено и признано не проблемой (unison-measured: кодовая база Unison со стандартной библиотекой — 16,7 МиБ, вчетверо меньше обычного node_modules инструментария TypeScript). Оптимизируется ресурс, которого не жалко.

Что от замысла остаётся живым. Не «не хранить», а не искать по имени: законы как указатель поверх хранилища (zakony-kak-ukazatel) — это тот же замысел, но с выполнимой постановкой. Он не отменяет хранилище, он делает его пригодным для поиска.

Рекомендация с ценой — та же, что в docs/modulnost-i-pakety.md, раздел 9, и я её подтверждаю, а не переоткрываю:

  1. Хеш нормализованного определения. ~1000 строк с тестами, около недели. Окупается не пакетами, а кешом доказательств: сегодня тотальность, постусловия и теоремы пересчитываются на каждом прогоне.
  2. Манифест, замок, хранилище ~/.flang/store. ~1370 строк, из них 500 — тесты, около двух недель. Синтаксис языка не меняется, меняется только чтение строки в из "...".
  3. Публичный индекс — не сейчас. Пока публикует один человек, реестр пуст.
  4. Заодно и обязательно: теоремы должны переезжать через импорт. Сегодня связывание берёт theorems только у входного файла — раздаётся код без доказательств, то есть без того, ради чего язык есть (names-not-hashes).

Чем подтверждено. Замеры 2026-08-18 на ветке work/packages-research, описанные в трёх связанных заметках; числа про Unison и место — прогоны 2026-08-15, ucm release/1.3.0 (unison-measured); цены шагов — разбор по файлам в docs/modulnost-i-pakety.md, раздел 9.

Чем ограничено.

Связано: hash-inside-names-outside, code-cannot-be-derived-from-its-hash, a-signature-does-not-determine-a-function, zakony-kak-ukazatel, synthesis-from-a-spec-hits-75-tree-nodes, derivation-works-where-the-domain-was-narrowed-on-purpose, a-ratchet-instead-of-derivation, unison-measured, unison-pull-brings-all-the-code-not-references, the-unison-diamond-breaks-on-a-type-edit-not-a-version-bump, names-not-hashes, owner-decisions