flang 0.4.1 — компилятор, который ставится без Node
Компилятор 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.