Выпуски
Выпуск — это тег vX.Y.Z, а по нему архив и публикация пакета. Страница печатается из тегов: сколько тегов, столько записей, пропустить выпуск нельзя.
Ящика три: что появилось, что изменилось, что сломалось. Пустой ящик не печатается — «сломалось: ничего» на девяти выпусках подряд читателю ничего не сообщает.
Записи ниже написаны про язык, а не про работу над ним. Что приехало в ствол после последнего выпуска, показывает журнал вливаний; заголовки всех коммитов — журнал коммитов.
0.6.2 — 22 августа 2026
Установка через Homebrew починена: архив приезжал с каталогом, в который нельзя войти
Что появилось
- Защищённое соединение работает живьём: двенадцать прогонов с настоящими кодами ответа.
- Принцип свёртки усилен пройденным куском списка: +2 доказанных обещания, при правиле заведены подделка и честная половина.
Что изменилось
- Две меры длины строки сведены к одной. Попутно найдена и закрыта порча памяти.
- Разведка ввозов разбирает шапку файла, а не файл целиком: память проверки −24 %, время −5 %.
- Сняты две рукописные копии сличения списков и исправлены три устаревшие ссылки на давно снятый запрет.
Что сломалось
- Ничего. Этот выпуск чинит установку, сломанную в 0.6.0 и 0.6.1: архив собирался режимом
--mode=u=rw,go=r, который снимает право входа и с КАТАЛОГОВ, поэтомуruntime-cприезжал какdrw-r--r--иbrew installпадал сErrno::ENOENT: runtime-c/flang_cli.c. Лечится буквойX—--mode=u=rw,go=r,a+X. Команда исправлена и в формуле, и в конвейере публикации; довод записан рядом с ней.
0.6.1 — 22 августа 2026
Правка компилятора, не доехавшая до собранного, теперь краснеет за полсекунды
Что появилось
- Дешёвая сверка исходников компилятора с его переводом на C:
sh scripts/raskrutka.sh --bystro. Прежде расхождение ловилось только часовой перепечаткой, и за двое суток работа четырежды уезжала в ствол правилом, которого в собранном компиляторе не было. Теперь это видно сразу и на каждом пуше. - Два новых правила у проверяльщика доказательств: разбор случаев по внутреннему условию цели и правило несовместимых условий. Прибавка измерена и записана числом в самом ядре: +2 и +2 доказанных обещания на шести файлах библиотеки.
- Октетная пара поручений у файлов: читать и писать файл байтами, а не текстом. Текстовая пара на нетексте теперь честно отказывает вместо тихой порчи, а нулевой октет вернулся в законный текст — отказ только на неправильном UTF-8.
Что изменилось
- Проверка столкновений имён видит всё замыкание: ввоз по имени без пути разрешается реестром, и вместо одного файла из тридцати шести она смотрит все. На этом дереве — 736 файлов и 56 345 объявлений.
- Проверка подделок смотрит весь каталог, а не список: названных подделок было 15, стало 24, и обрыв на первой несложившейся больше не прячет остальные.
«Ответить в соединение»перестало рвать содержимое по первому нулевому байту: длина берётся у самого значения. Замерено на собственном исходнике компилятора — ствол терял 47 184 байта наflang/self/link.flang.
Что сломалось
- Текстовые поручения чтения и записи файла на двоичном содержимом теперь отказывают, а не возвращают обрезанное. Для двоичного есть октетная пара.
0.6.0 — 22 августа 2026
Долгие вычисления перестали упираться в память: 15,98 ГиБ ушли в 0,0135
Что появилось
- Вход в PostgreSQL по
scram-sha-256: SHA-1, HMAC, PBKDF2 и клиент SCRAM написаны на самом языке, а вход проверен прогоном против настоящей PostgreSQL 17.10, а не заглушки. - Три новых правила вывода у проверяльщика доказательств. Оговорка о конечности: «не число» стоит вне порядка, всякая граница на нём ложна, и оговорка «пока это число» теперь читается фактом. Разбор случаев по дизъюнкции в допущении: «А или Б» не расщепляется, а разбирается надвое, и цель принимается только когда сошлись оба случая. Цель «А и притом Б».
- Надзор за упавшими процессами поверх сети: узел переживает смерть соседа, а работу пропавшего забирает выживший. Пропажу надзору отдаёт доклад слоя связи, а не уборка сокета.
- Модуль «Провод» — общая половина двоичных протоколов поверх TCP, вынутая из драйвера PostgreSQL. Из 83 функций драйвера про сам PostgreSQL оказались 39; остальное годится любому двоичному протоколу.
- Браузерные страницы написаны на самом языке: восемь целей печати из восьми, ни одной строки JavaScript в самих страницах.
- Проверка пустых доказательств. 93 доказанных утверждения библиотеки разложены на четыре кучи, и «доказано» о том, что верно про любую функцию с такой же подписью, названо своим именем, а не сосчитано наравне с содержательным.
Что изменилось
- Память при долгом вычислении перестала расти. Интерпретатор — это цикл, и область памяти освобождалась только в самом конце: хвостовая рекурсия стоила 84 килобайта на виток. Теперь она освобождается на каждом витке. На 200 000 витков пик был 15,98 ГиБ, стал 0,0135 ГиБ, время упало с 25,3 до 13,5 секунды, а от числа витков пик не зависит вовсе.
- Равенство в теле функции разрешено: прежний запрет оказался устаревшим ограничением, а не границей языка. Разрешение считать по-прежнему не означает разрешения выводить — подделка на это заведена.
- Потолок шагов при печати компилятора поднят с 40 миллионов до миллиарда. После новых правил вывода проверка компилятора самим собой перестала помещаться в прежний, и печать отменялась целиком.
- Реализация проверок на JavaScript снята: слой доказательств (4958 строк), проверки печати и занятых целью имён (682 строки) и четыре файла, которых не звал никто (836 строк). Печать компилятора в C не требует Node ни на одном шаге.
- Поиск по кодам отказа в документации находит 13 кодов из 13 — было 0 из 13.
Что сломалось
- Ярлык
emit:checkубран: проверку печати делаетpechat:checkна самом языке, аoccupied:checkзовётscripts/occupied-names-guard.flangвместо снятого скрипта на JavaScript. - Общая половина драйвера PostgreSQL уехала в модуль «Провод». Программы, звавшие
«Знак байта»,«Четыре октета»,«Два октета»и соседей прямо у «Разговора с базой», должны ввозить «Провод».
0.5.1 — 19 августа 2026
Установка на macOS починена: 0.5.0 не собирался там ни у кого
Что появилось
«Открыть соединение»— поручение, которым программа сама идёт к чужой службе по сокету. До него на flang нельзя было написать клиент к базе данных или к любой службе с двоичным протоколом: служба умела отвечать, но не спрашивать.- Вся четвёрка сетевых поручений переименована на одно слово:
«Открыть соединение»,«Принять соединение»,«Прочитать из соединения»,«Ответить в соединение». - Вторая дверь у напечатанной программы на C —
МОДУЛЬ_enter: она сверяет аргументы с объявленными типами. Прежде чужой код, слинкованный с библиотекой, получал на−3длянатответ1и не узнавал об этом.
Что изменилось
- Пакет в npm называется
@digitable-lol/flang, а не@digitable-lol/fts: язык называется flang. - Файлы C зовутся
compiler_flang.[ch]вместоkompilyator_flang.[ch]— транслит ушёл из имён, и печать стала меньше на 124 431 байт. - Сборка выхода зовётся
flang, а неflang_cli; формула Homebrew и плагин asdf принимают оба имени.
Что сломалось
- Ничего из объявленного прежде. Двоичный по-прежнему печатает только в C и не берёт составные значения в
--args— обе границы названы на страницах установки и вman.
0.5.0 — 18 августа 2026
Компилятор считает себя сам, а напечатанный код стал быстрее и экономнее
Что появилось
- Каждая из восьми целей печати теперь написана и на самом flang: последним закрыт
js. Целей, у которых своей версии на flang нет, не осталось. - Отчёт о доказательствах считается кодом на самом flang:
flang check --proofбольше не зовёт реализацию на JavaScript. - Тип
вес— отрезок от нуля до бесконечности. Три действия над ним разрешены, четыре отказывают и показывают пару, на которой отказали. - Точные десятичные: деньги считаются без двоичной дроби, и двоичный берёт их сам.
- Разрешение «повторить безопасно» выдаётся явно, а не подразумевается.
- Замок зависимостей: программа собирается из него без исходников.
- Ввод-вывод дорос до перечисления каталога и запуска процесса, а
flang ioразными кодами выхода отличает «нашёл беду» от «сам сломался». - Сайт документации собирается из
docs/одной командой, без единой зависимости.
Что изменилось
- Напечатанный C стал быстрее: межмодульная оптимизация включена умолчанием — это 1,14 раза, — а проверка типа не печатается там, где тип уже доказан: на арифметике это 4,9 раза, вместе 1,6.
- Область памяти в цели C научилась откатываться: сортировка слиянием четырёх тысяч чисел берёт 3,5 МиБ вместо 1655.
- Объявленный предел глубины в WebAssembly стал пределом: 7474 вложенных вызова и тот же текст отказа, что при обычном запуске, вместо смерти вкладки на глубине 60.
- Диагностика цитирует слово той поверхности, на которой написан файл: расхождений 0 из 186.
- Языковой сервер перестал отвечать нулём байт и кодом 0 на непонятый довод.
Что сломалось
- Слово
требуетстало ключевым. Программа, в которой это было своё имя, больше не разбирается.
0.4.8 — 9 августа 2026
Вложение и пересечение: у множеств появились слова
Что появилось
- У множеств появились слова: вложение и общая часть — и работают они по причине, а не по списку.
- Объявленная мера:
убывает <выражение>. Цикл доказывается ей там, где двух даровых порядков не хватило. - Логика пишется инфиксом:
не,и притом,или. - Кодовая точка символа стала числом — строкам не хватало именно этого.
- У процесса своя куча: сообщение уезжает в неё копией, а исчерпание кучи стало отказом процесса, а не смертью программы.
- Ящик ограничен объявляемым размером, и переполнение стало отказом отправителя.
- Словарь стал логарифмическим: дерево поиска с приоритетом по хешу ключа.
Что изменилось
- Горячая замена работает под живым планировщиком, а состояние переезжает проверенной функцией.
- Компилятор, напечатанный в C, ставит проверку убывающей меры и больше не зацикливается там, где реализация на JavaScript отказывала.
Что сломалось
- Слово
убываетстало ключевым.
0.4.7 — 7 августа 2026
Монада, отказ значением, полиморфизм
Что появилось
- Монада получила форму:
в монадеразворачивается в разбор до конца разбора. - Отказ «к числу» стал значением: столбец из строк складывается, не падая.
- Число убывает на постоянный шаг — до проверенного дна.
Что изменилось
тотальнаяперестала обещать больше, чем доказано: где завершение держится числом, в код печатается проверка убывающей меры.- Библиотека схлопнулась по типам после закрытого полиморфизма; второй параметр нашёл дефект в самоприменении.
0.4.6 — 7 августа 2026
Бинарник разговаривает с человеком: check, оболочка, справка, man
Что появилось
- Установленный бинарник стал инструментом для человека:
flang check, справка, версия, страницаman. - Функция стала значением: компилятор заменяет её меткой и разбирает по меткам, поэтому граф вызовов остаётся конечным, а функция-значение доехала до всех целей печати.
- В языке появился словарь.
- Логические операции появились функциями — слово «и» в языке уже занято.
Что изменилось
- Самоприменение понимает полиморфизм и высший порядок.
- Связывание перестало терять теоркат на границе файла: доказательство переживало её и не должно было.
0.4.5 — 7 августа 2026
Оболочка в установленном бинарнике, ввод-вывод и процессы на BEAM
Что появилось
- Оболочка есть в бинарнике, который ставится готовым: язык можно потрогать сразу после установки.
- Язык научился читать файл и ходить в сеть, не перестав быть чистым.
- Надзор перестал быть объявлением: упавший процесс поднимается к тому же началу.
- Процессы поехали на настоящей BEAM через печать в Elixir, и сверка идёт по набору исходов.
- Типы стали параметрическими — без этого монада была невыразима.
Что изменилось
- Лексер стал тотальным целиком: слои самоприменения перестали ходить по строке позицией.
- Четыре задачи и стандартная библиотека стали тотальными.
0.4.4 — 6 августа 2026
Языковой сервер, функтор с законами, конкурентность
Что появилось
- Языковой сервер для
.flang: та же проверка, что уflang check, прямо в буфере. - Конкурентность: атомарность по процессу, а не глобальная, и печать в BEAM.
- Функтор перестал быть словом без гарантии: у него появились законы, и они проверяются.
Что изменилось
- Двунаправленные управляющие символы больше не печатаются сырыми в java, csharp и elixir: подмена исходника невидимым знаком закрыта во всех целях.
0.4.3 — 6 августа 2026
Подсветка для Vim едет в пакете
Что появилось
- Подсветка едет в пакете: 154 слова языка, и различимость ролей проверяется.
- Оболочка
flang repl: язык можно потрогать, а не только запустить файл. - Встроенная форма «разложить … на символы» — посимвольный проход стал доказуемым.
0.4.2 — 6 августа 2026
Целей печати стало восемь, а компилятор ставится без Node
Что появилось
- Печать в Java, C# и Elixir — целей стало восемь.
- Компилятор ставится без Node: релизный C и формула для установщика.
Что изменилось
- Компилятор, написанный на самом flang, напечатал сам себя без единого расхождения.
- Описание пакета отставало на пять целей печати — исправлено.
0.4.1 — 5 августа 2026
Команды пакета отвечают после установки
Что изменилось
- После установки команды печатали ноль байт и выходили с кодом 0: страж точки входа сравнивал пути как строки, а установщик кладёт команды символьными ссылками. Закреплено проверкой, которая ставит ссылку так же.
0.4.0 — 5 августа 2026
Первая публикация
Что появилось
- Пакет несёт язык вместе с инструментами FTS: 327 файлов, 1,1 МБ в архиве и 8,3 МБ распакованным.
- Печать в C, Go, Rust и Python.
- Связывание модулей:
использует, и выборочный ввозтолько. - Самоприменение: лексер, разборщик, проверка типов, анализ тотальности и печать в C — написаны на самом flang.
- Команда
emit: печать в целевой язык из командной строки.