Repository navigation
flang 0.7.21 — Недоказанное не запускается молча, а у хозяина появились среда и экран
Недоказанный код больше не запускается по умолчанию
Что сломалось
-
flang runиflang ioвыходят кодом 3, если обещание функции не доказано. Раньше такая программа запускалась и отвечала кодом 0.$ flang run price.flang --function 'Скидка' --args '{"цена": 100, "скидка": 150}' не доказано: утверждений 1: доказано 0, сетка 1 — запуск только по явному согласию: --trust код 3Миграция: добавьте
--trust— вердикт не будет считаться вовсе.Затронуты сценарии, звавшие
flang runилиflang ioна программах, гдеобеспечиваетзакрыто только примерами. Проверить заранее:flang check --proof <файл>— итог «доказано 0, сетка N» значит, что программа попадёт под новое правило.
Что появилось
-
Переменные окружения и доводы командной строки в планах. Поручения были в словаре языка, а рантайм отвечал на них
FLANG_IO_UNKNOWN.вариант «Сделать» с поручение равным (вариант «Прочитать переменную среды» с имя равным "HOME")Ответ —
«Значение среды»с полемзначение, либо«Переменной среды нет»отдельным вариантом, а не пустой строкой. Доводы плана — всё, что стоит после--:$ flang io script.fscript -- build --verboseЗапретить:
--no-env,--no-args. -
Вывод на терминал.
«Показать»кладёт кадр,«Ждать событие»ждёт клавишу:вариант «Сделать» с поручение равным (вариант «Показать» с место равным "экран" и текст равным кадр) вариант «Сделать» с поручение равным (вариант «Ждать событие» с срок равным 5000)Клавиша приходит как
«Случилось»с полямиоткудаизначение; по сроку —«Срок вышел». Имена клавиш:ввод,пробел,таб,возврат,выход,вверх,вниз,влево,вправо; печатный знак приходит собой.Рабочий пример —
docs/examples/io/progress-bar-on-screen.flang. Кадр идёт на/dev/tty, а не в stdout: там итог плана в JSON. Нет терминала (труба, файл, CI) — ответ прежний,FLANG_IO_NO_SCREEN. Ctrl-C по-прежнему убивает программу. Запретить:--no-screen. -
sh scripts/four-coverages.shпечатает четыре покрытия порознь, у каждого своя строка «чего это не значит», и рядом с числом стоят дата и коммит.
Что изменилось
-
Независимый сверщик перестал принимать ложное доказательство. Две дыры: подстановка доводов шла последовательно вместо одновременной, подстановка тела не спрашивала захват имени. Ни 529 мутационных проб, ни четыре проверки дерева их не ловили.
-
Он же перестал отвергать честные записи — вердикт зависел от порядка, в котором напечатаны блоки.
-
Доля мест, которые сверщик переигрывает независимо, — 650 из 650. Мест, где он верил ядру на слово, не осталось; прежде их было 12 посылок и 4 шага.
Unproved code no longer runs by default
Breaking
-
flang runandflang ioexit with code 3 when a function's promise is not proved. Such a program used to run and exit 0.$ flang run price.flang --function 'Скидка' --args '{"цена": 100, "скидка": 150}' не доказано: утверждений 1: доказано 0, сетка 1 — запуск только по явному согласию: --trust exit 3Migration: add
--trustand the verdict is not computed at all.Affected: scripts calling
flang runorflang ioon programs whereобеспечиваетis backed by examples only. Check in advance withflang check --proof <file>— a summary reading «доказано 0, сетка N» means the program falls under the new rule.
Added
-
Environment variables and command-line arguments in plans. The orders were in the language's vocabulary, but the runtime answered
FLANG_IO_UNKNOWN.вариант «Сделать» с поручение равным (вариант «Прочитать переменную среды» с имя равным "HOME")The reply is
«Значение среды»with fieldзначение, or«Переменной среды нет»as its own variant — not an empty string. A plan's arguments are whatever follows--:$ flang io script.fscript -- build --verboseDeny with
--no-env,--no-args. -
Terminal output.
«Показать»draws a frame,«Ждать событие»waits for a key:вариант «Сделать» с поручение равным (вариант «Показать» с место равным "экран" и текст равным кадр) вариант «Сделать» с поручение равным (вариант «Ждать событие» с срок равным 5000)A key arrives as
«Случилось»with fieldsоткудаandзначение; a timeout as«Срок вышел». Key names:ввод,пробел,таб,возврат,выход,вверх,вниз,влево,вправо; a printable character arrives as itself.Working example:
docs/examples/io/progress-bar-on-screen.flang. The frame goes to/dev/tty, not stdout — stdout carries the plan's JSON result. With no terminal (pipe, file, CI) the answer is the sameFLANG_IO_NO_SCREENas before. Ctrl-C still kills the program. Deny with--no-screen. -
sh scripts/four-coverages.shprints four coverages separately, each with its own line saying what it is not, and every number carries a date and a commit.
Changed
-
The independent checker no longer accepts a false proof. Two holes: arguments were substituted sequentially rather than simultaneously, and body substitution did not check for name capture. Neither 529 mutation probes nor four tree gates had caught them.
-
The same checker no longer rejects honest records — the verdict depended on the order the blocks were printed in.
-
The share of places the checker replays independently is 650 of 650. Not one place is taken on the kernel's word any more; there used to be 12 premises and 4 steps.