Skip to content

flang 0.4.1 — компилятор, который ставится без Node

Choose a tag to compare

@the-homeless-god the-homeless-god released this 05 Aug 23:26
· 112 commits to main since this release

Компилятор flang, напечатанный в C99. Ставится там, где есть cc — Node не нужен.

Установка

tar -xzf flang-0.4.1-c.tar.gz && cd flang-0.4.1-c
make
./flang_cli

Никаких зависимостей, кроме libc и libm. Собирается cc -std=c99 -Wall -Wextra -Werror -pedantic без единого предупреждения.

Почему архив с C, а не бинарник

Компилятор языка написан на самом языке и печатается в C, поэтому релиз содержит уже напечатанный исходник. Так поступают самоприменяющиеся языки: Go долго возил сгенерированный C, Nim возит до сих пор. Проблема начальной загрузки остаётся только у того, кто развивает сам язык, — ему нужен Node, чтобы получить первый бинарник из исходников на flang.

Архив собран node scripts/build-release-c.mjs: тот же скрипт печатает C, собирает его в окружении без Node в PATH и запускает результат. Битый архив не уедет.

Переносимость

Рантайм не содержит архитектурно-зависимых конструкций. Проверено кросс-сборкой под RISC-V (riscv64-linux-gnu-gcc) и запуском под QEMU: те же значения, включая 0.1 плюс 0.2 = 0.30000000000000004, NaN и Infinity, до последнего знака.

Что в этой версии

  • Самоприменение замкнулось: компилятор печатает сам себя, и второй проход даёт побайтово тот же C — все шесть файлов.
  • Восемь целей печати: C, Go, Rust, Python, Java, C#, Elixir, JavaScript.
  • Ядро FTS переписано на flang: 300 функций, все тотальные.
  • Разбор суждений в основной проверке: недостижимые свойства, дыры в покрытии и перекрытия правил находятся с указанием строки и интервала контрпримера.
  • Первый шаг теоркат-поверхности: стрелка, композиция, цепочка, единица — стыковка доказывается компилятором.

Через npm

npm install -g @digitable-lol/fts

Этот путь даёт весь инструментарий, включая семь остальных бэкендов, интерпретатор и языковой сервер, — и требует Node.