flang язык, в котором спецификация исполняется

К README · Указатель документации

Развитие языка

Эталонная реализация на JavaScript остаётся навсегда: относительно неё проверяется неподвижная точка, и её удаление сделало бы проверку невозможной. Работа над ней идёт в клоне:

npm install
npm run build
node scripts/build-release-c.mjs     # печатает релизный C и собирает его

Правка компилятора в flang/self/ обязана перепечатать точку раскрутки тем же коммитом, иначе bootstrap/ начнёт собирать прошлый компилятор молча:

node scripts/bootstrap-c.mjs           # перепечатать bootstrap/ (≈10 с процессорного времени)
node scripts/bootstrap-c.mjs --check   # сверить с исходниками побайтово, код 1 при расхождении

Стережёт это тест «точка раскрутки bootstrap/ совпадает с печатью текущих исходников, побайтово» в flang/test/self-bootstrap.test.mjs. Компилятор C ему не нужен, поэтому он идёт всегда — в отличие от самой неподвижной точки, которой нужен cc и которую в CI включает FTS_REQUIRE_TOOLCHAINS=c.

Команды, на которые язык отвечает:

# разобрать, проверить типы, доказать тотальность
flang check flang/examples/leetcode/035-search-insert-position.flang --pretty

# прогнать примеры, объявленные внутри функций
flang test flang/examples/leetcode/035-search-insert-position.flang --pretty

# вызвать функцию
flang run flang/examples/leetcode/035-search-insert-position.flang \
  --function "Место вставки" --args '{"элементы":[1,3,5,6],"цель":2}'
# {"function":"Место вставки","args":{...},"result":1}

# напечатать — цели: c | csharp | elixir | go | java | js | python | rust
flang emit flang/examples/leetcode/035-search-insert-position.flang \
  --target python --out ./out-python

Модель .fts — тоже программа flang, и те же команды принимают её напрямую. Но этот путь идёт через мост совместимости, которому нужно собранное ядро на TypeScript, поэтому сначала — npm install && npm run build внутри клона:

flang check examples/utilities/discount.fts --pretty
flang emit examples/utilities/discount.fts --target go --out ./out-go

Собственный CLI FTS — для моделей:

fts pipeline examples/real-world/order-shipment.fts --pretty
fts test examples/utilities/discount.fts --pretty
fts run examples/utilities/discount.fts \
  --utility "Рассчитать скидку" --input examples/utilities/discount.input.json --pretty
fts certify examples/real-world/order-shipment.fts \
  --context examples/real-world/order-shipment.context.json --pretty
fts generate examples/utilities/discount.fts --out generated

Тесты:

npm run test:flang    # язык: парсер, типы, тотальность, бэкенды, ядро и компилятор на flang
npm test              # всё: ядро, инструменты, flang

Каждая команда пишет JSON в stdout, диагностику в stderr и возвращает ненулевой код при отказе — один и тот же контракт везде, и именно он делает всё это пригодным для CI, редакторов и агентов. Единственное исключение — flang repl, который разговаривает с человеком.