Skip to content

flang 0.4.5 — ввод-вывод, процессы на BEAM, оболочка в бинарнике

Choose a tag to compare

@the-homeless-god the-homeless-god released this 07 Aug 03:31
· 59 commits to main since this release
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₂.