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

Выпуски

Выпуск — это тег vX.Y.Z, а по нему архив и публикация пакета. Страница печатается из тегов: сколько тегов, столько записей, пропустить выпуск нельзя.

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

Записи ниже написаны про язык, а не про работу над ним. Что приехало в ствол после последнего выпуска, показывает журнал вливаний; заголовки всех коммитов — журнал коммитов.

0.7.29 — 18 октября 2026

Готовые сборки и установка одной командой, законы категорий доказываются

Что появилось

Что изменилось

Что сломалось

0.7.28 — 14 октября 2026

Примеры в законах проверяются, ошибки в категориях находятся при компиляции

Что появилось

Что изменилось

Что сломалось

0.7.27 — 14 октября 2026

Доказательства по-взрослому: алгебра, завершение рекурсии, формулы в LaTeX; HTTPS без curl

Что появилось

Что изменилось

Что сломалось

0.7.26 — 11 октября 2026

TLS на языке, случайность у хозяина, цена до прогона, кеш ядра и второй сличитель на Lean

Что появилось

Что изменилось

Что сломалось

0.7.25 — 6 октября 2026

Точное целое и точное дробное, предел потомку от поручения, страница реестра

Что появилось

Что изменилось

Что сломалось

0.7.24 — 3 октября 2026

Линтер в языке, памятка ядра и три закрытые дыры в доказательствах

Что появилось

Что изменилось

$ flang run-script cyrillic:check
кириллица в путях: 5, все в ведомости — новых нет                 код 0

Что сломалось

0.7.23 — 29 сентября 2026

Поле записи проверяется по своему типу, и прогон знает предел памяти

Что появилось

$ flang run runaway.flang --function «Раздуть» --args '{"текст":"а","раз":28}' --trust --memory-limit 32M
FLANG_MEMORY: прогон остановлен на пределе памяти 32 МиБ: занято 25 МиБ, просили ещё 25 165 880 байт
  считалась функция «Раздуть», шагов программы 544
                                                                    код 5

Заявка #160.

$ flang check chain.flang --proof --json
… "stepRules":[{"step":1,"line":33,"rule":"цель есть допущение"}, …]

Что изменилось

объект «Мера»
  «шаг»: неотрицательное

тотальная функция «Отрицательный шаг»
  возвращает неотрицательное
  обеспечивает «итог не меньше нуля» результат не меньше 0
  (запись «Мера» с «шаг» равным -7).«шаг»
0.7.22: $ flang check step.flang
step.flang: проверено — разбор, типы, завершаемость, ядро и примеры; замечаний нет   код 0

0.7.23: $ flang check step.flang --proof
FLANG_TYPE в файле step.flang, строка 9, столбец 33: поле «шаг» записи «Мера»: ожидался неотрицательное, получен целое   код 1
$ flang io child.fscript --timeout 1000 -- 'sleep 3'
… "failed FLANG_IO_TIMEOUT: программа «sh» молчала дольше 1000 мс и оборвана хозяином (--timeout)"

Заявка #162.

Заявка #160.

Заявка #161.

$ cat .flangrc
недоказанное = разрешение
$ flang run p.flang --function «Ответ»
flang: .flangrc: запись «недоказанное = разрешение» устарела и пока читается — замените её на «unproven = allow»
42

Что сломалось

$ flang check app/main.flang
FLANG_IMPORT_NOT_FOUND в файле app/main.flang, строка 1, столбец 1: не найден модуль «Мера»   код 1

Миграция: перенесите модуль в дерево проекта, ввезите его путём (использует «Мера» из "../mera.flang") или назовите предел поиска переменной FLANG_MODULE_ROOT.

0.7.22 — 26 сентября 2026

Силлогизм следует и верный код символа вне базовой плоскости

Что появилось

утверждение «все люди смертны»
  для всех кто: «Человек»
  утверждаем («Смертен» от кто)

следует «Сократ смертен»
  дано сократ: «Человек»
  утверждаем («Смертен» от сократ)
  по свойству «все люди смертны»
$ flang check socrates.flang --proof
утверждение «Сократ смертен» — доказано: терм принят ядром, 1 шаг, основания: утверждение «все люди смертны» — утверждение обо ВСЕХ входах

Без строки по свойству заключение не доказывается:

FLANG_PROOF_STEP: теорема «Сократ смертен»: ни одного шага        код 1

Что изменилось

$ flang repl
» код символа "𝒜"
119964
» код символа "👍"
128077

Заявка #103.

$ flang --step-limit 100000000 emit файл.flang --target c
flang: неизвестная команда «--step-limit»              код 2

Что сломалось

былостало
scripts/raskrutka.shscripts/bootstrap-reprint.sh
scripts/otpechatok-semeniscripts/seed-fingerprint

Миграция: замените имена в своих скриптах и в настройке CI.

0.7.21 — 22 сентября 2026

Недоказанный код больше не запускается по умолчанию

Что появилось

вариант «Сделать» с поручение равным (вариант «Прочитать переменную среды» с имя равным "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.

Что изменилось

Что сломалось

$ flang run price.flang --function 'Скидка' --args '{"цена": 100, "скидка": 150}'
не доказано: утверждений 1: доказано 0, сетка 1 — запуск только по явному согласию: --trust
код 3

Миграция: добавьте --trust — вердикт не будет считаться вовсе.

Затронуты сценарии, звавшие flang run или flang io на программах, где обеспечивает закрыто только примерами. Проверить заранее: flang check --proof <файл> — итог «доказано 0, сетка N» значит, что программа попадёт под новое правило.

0.7.20 — 18 сентября 2026

Компилятор доказан сам себе целиком: 650 мест из 650 переиграны независимой программой

Что появилось

Что изменилось

Что сломалось

0.7.19 — 13 сентября 2026

Кванторы дошли до собранного компилятора

Что появилось

Что изменилось

Что сломалось

0.7.18 — 12 сентября 2026

Проверка стала строже, а дерево — понятнее

Что появилось

Что изменилось

Что сломалось

0.7.17 — 11 сентября 2026

Язык прошёл собственную проверку на доказуемость

Что появилось

Что изменилось

Что сломалось

0.7.16 — 9 сентября 2026

Чекер переигрывает вывод факта о типе; дорога до конца измерена поимённо

Что появилось

Что изменилось

Что сломалось

0.7.15 — 8 сентября 2026

Калькулятор снят из чекера: гейт независимой проверки закрыт

Что появилось

Что изменилось

Что сломалось

0.7.14 — 7 сентября 2026

Чекер сам проигрывает доказательства завершения

Что появилось

Что изменилось

Что сломалось

0.7.13 — 6 сентября 2026

Объект доказательства: чекер проверяет готовый вывод ядра, а не пересчитывает его

Что появилось

Что изменилось

Что сломалось

0.7.12 — 6 сентября 2026

Установка везёт рантаймы всех девяти целей печати, а не одной

Что появилось

Что изменилось

Что сломалось

0.7.11 — 5 сентября 2026

Надзор возвращён на dev, и сторожа доказывают прогоном, что умеют краснеть

Что появилось

Что изменилось

Что сломалось

0.7.10 — 4 сентября 2026

Хотфикс: живая оболочка падала на каждой строке ввода

Что изменилось

Что сломалось

0.7.9 — 4 сентября 2026

Метка есть, публикация остановлена конвейером

Что изменилось

0.7.8 — 4 сентября 2026

Метка есть, публикация остановлена конвейером — намеренно

Что изменилось

0.7.7 — 4 сентября 2026

Метка есть, публикация остановлена конвейером — намеренно

Что изменилось

0.7.6 — 4 сентября 2026

Метка есть, публикация остановлена конвейером

Что изменилось

0.7.5 — 4 сентября 2026

Метка есть, публикация остановлена конвейером

Что изменилось

0.7.4 — 4 сентября 2026

Метка есть, публикация остановлена конвейером

Что изменилось

0.7.3 — 3 сентября 2026

Хотфикс версии дошёл до публикации

Что изменилось

0.7.2 — 3 сентября 2026

Метка есть, публикация снова не дошла

Что изменилось

0.7.1 — 3 сентября 2026

Хотфикс версии — тег вышел, публикация не дошла

Что изменилось

Что сломалось

0.7.0 — 3 сентября 2026

Компилятор перепечатан начисто, а главная работа выпуска — поиск собственных обманов

Что появилось

Что изменилось

Что сломалось

0.6.2 — 22 августа 2026

Установка через Homebrew починена: архив приезжал с каталогом, в который нельзя войти

Что появилось

Что изменилось

Что сломалось

0.6.1 — 22 августа 2026

Правка компилятора, не доехавшая до собранного, теперь краснеет за полсекунды

Что появилось

Что изменилось

Что сломалось

0.6.0 — 22 августа 2026

Долгие вычисления перестали упираться в память: 15,98 ГиБ ушли в 0,0135

Что появилось

Что изменилось

Что сломалось

0.5.1 — 19 августа 2026

Установка на macOS починена: 0.5.0 не собирался там ни у кого

Что появилось

Что изменилось

Что сломалось

0.5.0 — 18 августа 2026

Компилятор считает себя сам, а напечатанный код стал быстрее и экономнее

Что появилось

Что изменилось

Что сломалось

0.4.8 — 9 августа 2026

Вложение и пересечение: у множеств появились слова

Что появилось

Что изменилось

Что сломалось

0.4.7 — 7 августа 2026

Монада, отказ значением, полиморфизм

Что появилось

Что изменилось

0.4.6 — 7 августа 2026

Бинарник разговаривает с человеком: check, оболочка, справка, man

Что появилось

Что изменилось

0.4.5 — 7 августа 2026

Оболочка в установленном бинарнике, ввод-вывод и процессы на BEAM

Что появилось

Что изменилось

0.4.4 — 6 августа 2026

Языковой сервер, функтор с законами, конкурентность

Что появилось

Что изменилось

0.4.3 — 6 августа 2026

Подсветка для Vim едет в пакете

Что появилось

0.4.2 — 6 августа 2026

Целей печати стало восемь, а компилятор ставится без Node

Что появилось

Что изменилось

0.4.1 — 5 августа 2026

Команды пакета отвечают после установки

Что изменилось

0.4.0 — 5 августа 2026

Первая публикация

Что появилось