flang 0.4.5 — ввод-вывод, процессы на BEAM, оболочка в бинарнике
brew install digitable-lol/tap/flang
flang replОболочки в прошлом релизе не было, хотя мы говорили обратное. flang_repl.c лёг в репозиторий уже после тега v0.4.4, поэтому поставивший через brew получал компилятор без неё. Здесь она есть — проверено на архиве из чистой распаковки: собирается без Node, отвечает диагностикой с местом ввода.
Язык вышел наружу
Программа читает файл и ходит в сеть, не перестав быть чистой: поручение — это значение, исполняет его хозяин.
Прочитать файл «адрес.txt» → "http://…/страница"
Запросить GET → код 200, тело "привет из сети"
Записать файл «отчёт.txt» → записано 22 байта
Два следствия, ради которых так и сделано: flang test на этой программе даёт 10 примеров из 10 без единого эффекта — описание сравнивается с описанием; и все семь её функций доказаны тотальными.
Отказ приходит вариантом «Сбой», а не исключением: «файла нет», «сеть не ответила» и «хозяин запретил» идут одним путём. Набор поручений закрыт намеренно — каждое обязан уметь исполнить каждый из восьми хозяев.
Процессы поехали на настоящей BEAM
Процесс печатается GenServer-ом, надзор — деревом супервизоров OTP. Вытеснение по редукциям, отдельная куча у каждого процесса, распределённость — настоящие, а не свои.
Сверять значения нельзя: семантика есть любое чередование. Поэтому эталон гоняется на 1000 семян, из итогов собирается множество допустимых исходов, и каждый запуск на BEAM обязан в него попасть. 275 запусков, 250 журналов, 178 различных чередований — сошлось.
Честно про предел: редукционный квант BEAM много больше пробега обработчика, поэтому сверка доказывает включение, а не покрытие.
Лексер самоприменения стал тотальным целиком
84 функции из 84, долгов не осталось ни одного — было 54 из 88. Печать в C 223 из 326, парсер 188 из 374.
Причина одна: посимвольный проход перестал ходить по позиции. Раньше убывала разность «размер минус позиция» — число, а не значение; теперь строка раскладывается в список, и рекурсия по хвосту доказывается.
Теоркат и типы
Функтор с тремя доказуемыми законами, моноид и группа, изоморфизм, бифунктор. Параметрический полиморфизм — первая фаза; выяснилось, что печать его не стоит ничего: все восемь бэкендов типы уже стирали.
Языковой сервер flang-lsp. Справочник конструкций на портале — 41 карточка на все 112 форм языка.
Проверено: 1651 тест, ноль падений, неподвижная точка сошлась — семь файлов побайтово у эталона, flang₁ и flang₂.