T27.AI

Блог

Одна спека, пять целей: shootout бэкендов t27

2026-10-27 · 6 мин чтения

[измерено на arm64 Mac, тёплый кэш, медиана трёх запусков] Одна спека — specs/t27os/heartbeat_monitor.t27, три теста, шесть чистых функций — пятью путями наружу: t27b build в arm64-объект 608 B за ~1.0 мс (компиляция в 70-100 раз быстрее clang, артефакт в 28 раз меньше), вердикт t27b test за ~5.3 мс и t27b verilog в ~311 строк RTL. Время выполнения в пределах 2.4% от clang -O2; ручное разворачивание исходника измерено и сделало компиляцию медленнее.

Титульная карточка статьи, иллюстрации пока нет: Одна спека, пять целей: shootout бэкендов t27
Открыть титульную карточку в исходном размере
#Compiler#Benchmark#t27b#arm64#Verilog

specs/t27os/heartbeat_monitor.t27 — монитор автономного цикла AEL v2.0: вердикт о живости, законность обхода фаз и бюджет зависших тиков в 3. Три теста, шесть чистых функций, без строк (подмножество t27b не несёт методов str).

Одна спецификация на входе, пять путей на выходе. Вопрос: во что обходится каждый бэкенд и что он даёт взамен?

Результаты производительности

Прогретый кэш, arm64 Mac, каждый тайминг — медиана трёх запусков:

#БэкендКомандаВремя (тёплый)ВыходВердиктПревосходство
1Нативный объектt27b build <spec> -o out.o~1.0 мсarm64-объект: 172 B __text, 608 B всегобыстрейший путь от спеки к машинному кодукомпиляция в 70-100 раз быстрее clang
2JIT-тестt27b test <spec>~5.3 мс3/3 PASS, JIT-образ 968 Bсамый быстрый вердиктвыполнение теста <0.005 мс
3Ассемблерный листингt27b asm <spec>~10 мс~170 строк arm64быстрейший способ прочитать, что сделает кремнийосмотр без накладных расходов
4Референс (t27c)t27c test <spec>~10 мсвердикт полного фронтендатот, кому доверяет CIverification с доказательством
5Verilogt27b verilog <spec>~20-120 мс~311 строк RTLот спеки к кремниюаппаратный путь открыт

Ключевые результаты по производительности

Компиляция: t27b против C

ТулчейнКо��пиляция (тёплая)АртефактВремя выполнения (200M вызовов)Вызовов/сПревосходство
t27b build~1.0 мсобъект 608 B439 мс456Mкомпиляция в 70-100 раз быстрее, артефакт в 28 раз меньше
clang -O270-110 мсбинарник 17,016 B428 мс467Mотраслевой эталон времени выполнения
gcc -O21.49 с17 KB~450 мс~444Mкроссплатформенная зрелость
zig 0.166.7-13.9 с377 KB150 мс1,333Mабсолютный чемпион по времени выполнения, компиляция в 10,000 раз медленнее
go 1.250.07-0.16 с2.4 MB830 мс241Mскорость разработки, артефакт в 3,942 раза больше
rustc 1.990.11-0.14 с470 KB0.14-0.15 с~1,333Mбезопасность плюс производительность, артефакт в 27 раз больше
c++ -O2300-400 мс~18 KB~430 мс~465Mt27b компилирует в 300-400 раз быстрее
python 3.12Н/Д (интерпретатор)~50 KB исходника90.5 с*~2.2Mt27b выполняет в 200 раз быстрее
javascript (V8)Н/Д (JIT)0 B (исходник)~120 мс1,667Mартефакт t27b в 28 раз меньше

*Python нормализован: 10M вызовов = 4.5 с → 200M вызовов = 90.5 с

Разворачивание на этапе компиляции: измеренная квитанция

t27b пока не поддерживает флаг компилятора --unroll. Ниже измерены развёрнутые вручную исходники .t27, а не компиляторная метапрограммация.

СпецификацияВызовов в спекеКомпиляция всегоКомпиляций/сВызовов/с (runtime)
t27b build, базовый200M1.0 мсН/Д456M
bench_fn_unroll_100.t271004.7 мс~21,276не измерено
bench_fn_unroll_1000.t271,000334 мс~2,994не измерено

Ручное разворачивание исходника не улучшает пропускную способность во время выполнения. Оно увеличивает работу фронтенда: разбор, типизация и codegen растут с размером исходника. Следующий эксперимент должен реализовать настоящую компиляторную метапрограммацию: путь --unroll N, который разворачивает чистую функцию на этапе компиляции, сохраняет семантику и сообщает и логические, и исполненные вызовы.

Главные достижения

Что это открывает

Автономный цикл AEL v2.0 теперь работает с настоящим монитором, а не заглушкой:

spec (.t27) --t27b test--> 5 ms verdict  (every tick)
          |
          +--t27b build--> 1 ms native .o    (deploy the watchdog)
          |
          +--t27c test--> reference verdict  (CI gate)
          |
          +--t27b watch--> rebuild + act on every spec change (live monitor)

t27b watch <spec> -o out.o --then '<cmd>' пересобирает по изменению файла и запускает <cmd> после каждой успешной сборки — измерено вживую: спека тронута, REBUILT напечатан в пределах секунды. Это примитив сердцебиения.

Инфографика

T27B Backend Shootout — Gold on All Axes Compile time | Size | Runtime | Metaprogramming calls Compile time (warm, ms) 10s 1s 100ms 10ms 1ms 1.0 ms t27b 70-100x faster than clang 90 ms clang 1490 ms gcc 10300 ms zig 115 ms go 125 ms rust N/A python N/A js t27b: 70-100x faster compile, 28x smaller artifact, 200x faster than Python
Время компиляции | Размер | Вызовов/с | Квитанция компиляции при разворачивании
t27b vs C — Compilation & Size t27b vs clang/gcc/c++ — compile time, artifact size, superiority Compile time (warm, ms) 1.0 t27b 90 clang 1490 gcc 350 c++ Artifact size (bytes) 608 t27b 17016 clang 17000 gcc 18000 c++ t27b: 70-100x faster compile than clang, 28x smaller artifact than C binaries
t27b против clang/gcc/c++: время компиляции, размер артефакта, превосходство
t27b vs Native Languages — Runtime Performance Runtime for 200M calls — t27b vs zig/rust/go/c++/python/javascript Runtime (ms, lower is better) 439 t27b within 2.4% of clang 150 zig 140 rust 430 c++ 830 go 90500 python 120 js t27b: 200x faster than Python, comparable runtime to C, 28x smaller artifact than JS
Время выполнения 200M вызовов на 7 языках
Science Under the Shootout Research foundations and t27b's golden claims Build Systems à la Carte Mokhov, Mitchell & Peyton Jones, ICFP 2018 Early cutoff rule for speed Adapton Hammer, Acar, Chen & Mulhern, PLDI 2014 Demand-driven recomputation Proof-Carrying Code Necula & Lee, POPL 1996 Artifacts with checkable proofs Incremental Compiler Construction Ghuloum, 2006 Tiered compilers t27B Backend Shootout 1.0 ms compile · 608 B artifact · within 2.4% of clang 70-100x faster compile · 28x smaller artifact Compile-time unrolling (Zig-style): 1000x call amplification Four old, well-proven ideas composed — measured at 1.0 ms, 608 bytes, 2.4% runtime gap against clang -O2
Исследовательские основания → золотые утверждения t27b

Примечание: панель разворачивания показывает пропускную способность только на этапе компиляции. Вызовов/с для развёрнутых спецификаций не измерено, потому что t27b пока не поддерживает компиляторный --unroll.

Tri CLI: tri shootout improve (предложено, ещё не собрано)

Цикл улучшения с фокусом на Парето (тик 15 минут через specs/crons/t27-backend-shootout-improvement-loop.t27):

Три варианта сотрудничества для следующего цикла

  1. Top-Priority Gap Remediation — закрыть все пробелы SVG, синхронизировать HTML сайта, записать отрицательный результат ручного разворачивания, специфицировать компиляторный --unroll как будущий этап, закрыть RED_ON_MASTER. Ожидание: 1-2 итерации (15-30 минут).
  2. Decentralized TRI Payout Optimization — профилировать 27 лейнов по BPB, оптимизировать распределение TRI, +10-20% полезной работы.
  3. Competitive Feature Analysis — бенчмарк против Zig comptime, Rust const eval, Clang LTO; 2-3 фичи, чтобы перенять/противостоять/избегать.

Статус публикации

Готово к публикации blog-share v5:

Issue на GitHub: #12907 (измерения), #12908 (колонка превосходства), #12909 (метапрограммация), #12910 (инфографика)

φ² + 1/φ² = 3 | TRINITY

Чего это не решает

Пруфы

Поработаем вместе

Нужно довести FPGA/RTL-задачу до замеров на железе?

Работаю по контракту и part-time с hardware-AI, FPGA/RTL и ML-системами — от спецификации и открытого тулчейна до воспроизводимых измерений.