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

Реестр пакетов

Реестр flang — это список имён, а не склад кода. Список — строчный файл: в каждой строке пять полей через знак «|», и больше в ней ничего нет. На вопрос «какая версия пакета годится» реестр отвечает адресом, по которому лежит пакет, а не самим пакетом; имя получает версию только здесь, в списке; ни одного нового слова в языке реестр не заводит. Ни сервера, ни базы, ни учётных записей для этого не нужно — и по решению их нет. Довод целиком: ADR-0059.

Список лежит файлом по постоянному адресу

https://digitable-lol.github.io/flang/registry.list

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

вариант «Запросить» с способ равным "GET"
  и адрес равным "https://digitable-lol.github.io/flang/registry.list"
  и тело равным ""

На сайте лежит копия того же файла из дерева scripts/registry-example/registry.list — знак в знак, и кладёт её туда та же сборка, что печатает эту страницу.

Пять полей

полечто в нём
имяимя пакета — то, что стоит в использует
версиятри числа через точку: старшая, средняя, младшая
отпечатокsha256 файла пакета
адресгде лежит файл пакета
нуждычего пакет требует от других имён; пусто — ничего

Нужда пишется как имя: диапазон, нужды разделяются точкой с запятой. Диапазонов четыре: любая, ровно 1.2.3, не ниже 1.2.3, в пределах 1.x. Разбор списка и выбор версии написаны и доказаны в flang/stdlib/registry.flang; сдаётся выбор прогоном плана, а не командой двоичного — нового слова реестр не заводит нигде.

Нынешние записи

Таблица ниже напечатана из этого файла прогоном flang run-script registry:page; руками её не правят — правка затрётся следующей печатью.

имяверсияотпечатокадреснужды
Логика1.0.01dc6da94a777a731150d896e28d9b20ce0afd6ca876b0cafe1c0d0d3d0b4c864registry-example/logic-1.0.0.flang-package
Логика1.2.0b2bda19546f5cbb2b7642a80f54458197bca3dfde517983356080a11c62870d2registry-example/logic-1.2.0.flang-package
Логика2.0.05374735fb59ebaf5e374ffa1e4a985a8b66616f35a45f4cd35244697ed91c965registry-example/logic-2.0.0.flang-package
Списки1.4.2802d716b62ea8918ded9cdda7ed2fd04c16aa97da4d519381e3c98e4e3f5ccc9registry-example/lists-1.4.2.flang-packageЛогика: не ниже 1.0.0
Множество строк1.0.0cf3a1697ccc1e7c2fa4fd72b3210ad5372590c0844f13e07119fa290a1f69931registry-example/sets-1.0.0.flang-packageЛогика: не ниже 1.0.0
Множество строк1.1.0a9a776e153d9789c7e29f8c66ad92df36a834f21630c6388b41ebd4f8d2effc2registry-example/sets-1.1.0.flang-packageСписки: в пределах 1.x; Логика: в пределах 1.x
Опциональное значение0.9.017eac86ce77be366094d22be0f537d4bab5bb00958fb41df3bd7353060957c7dregistry-example/optional-0.9.0.flang-packageЛогика: ровно 2.0.0

Записей в списке: 7.

Отпечаток сверен с файлом при печати

Отпечаток — единственное, на чём держится доверие к чужому пакету, и портится он молча. Поэтому тот же прогон, который печатает таблицу, пересчитывает sha256 каждого адреса и сличает с полем «отпечаток». Разошёлся хоть один знак — страница не печатается вовсе: прогон отвечает числом выхода 1 и FLANG_REESTR_OTPECHATOK, называет запись, оба отпечатка и адрес, а сборка сайта краснеет на нём и до читателя не доезжает.

Проверка заведена не впрок: отпечатки в примере однажды разошлись с файлами, и увидеть это было некому — реестр не звала ни одна работа сборки (задача 4909, сделана: сторож scripts/guards/registry-resolution-guard.fscript и работа CI registry-resolution).