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

Из хеша код не выводится: у средней функции flang вдвое больше содержания, чем влезает в адрес

Замысел владельца звучал так: «ввести хеш и получить код модуля, типа мне не нужно нигде хранить пакеты, они выводятся». Половина замысла проверяется арифметикой, и она не работает — не потому, что алгоритм не найден, а потому, что вывести нечего.

Считано на нашей же библиотеке. В flang/stdlib/ 208 функций с телом. Словарь токенов, встречающихся в телах, — 570 различных. Медианное тело — 59 токенов. Один токен из словаря в 570 несёт log₂ 570 = 9,15 бита, значит медианное тело flang — это 540 бит выбора. SHA-256 даёт 256 бит.

Средняя функция flang содержит вдвое больше, чем помещается в её адрес.

Восстановить 540 бит из 256 нельзя счётом, а не по недосмотру: отображение не взаимно однозначно, у каждого хеша тел-прообразов астрономически много. Хеш проверяет («это то самое?»), но не порождает («покажи то самое»).

Возражение «а мелкие-то функции влезают» разбирается тем же счётом и тоже проигрывает. Самое короткое тело в библиотеке — 16 токенов, это 146 бит, и в 256 бит оно действительно помещается: адреса хватило бы. Но взять код по адресу можно только перебором кандидатов с проверкой хеша, а кандидатов 570¹⁶ = 1,2 × 10⁴⁴. Сеть биткоина считает около 9 × 10²⁰ хешей в секунду (август 2026, CoinWarz). Вся эта сеть искала бы 1,4 × 10²³ секунды ≈ 300 тысяч возрастов Вселенной — чтобы восстановить самую короткую функцию из двухсот восьми. Информации хватает, вычислений — нет.

Отсюда прямое следствие про пакеты. Хеш — это адрес записи в таблице, которую кто-то ведёт, а не сжатый исходник. Unison Share — такая таблица. IPFS — такая таблица. ~/.flang/store из hash-inside-names-outside — такая таблица. Фраза «мне не нужно нигде хранить пакеты» неверна ровно настолько, насколько неверно «мне не нужен склад, у меня есть накладная».

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

Чем подтверждено. Замер на /srv/flang-rabota/packages, ветка work/packages-research, 2026-08-18. Считано по flang/stdlib/ (13 файлов): тела функций — это строки внутри объявления функция «…» за вычетом принимает, возвращает, обеспечивает, убывает, блоков пример и комментариев. Токенизация грубая: «имя в ёлочках», строка в кавычках, слово, число, одиночный знак. Итог: 208 тел, словарь 570, длины в токенах — минимум 16, медиана 59, среднее 78, максимум 475; медиана тела в байтах — 549. Счёт функций сверяется независимо: grep -h '^\s*принимает' flang/stdlib/*.flang | wc -l даёт 208.

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

Связано: a-signature-does-not-determine-a-function, hash-inside-names-outside, content-addressing, what-goes-into-the-hash, unison-measured, a-measured-zero-is-valuable