Сборка и поставка

Состояние инструментария

Текущая идентичность продукта Топаза, доступные продукты поставки и важные для выбора ограничения.

Топаз 5.19.0 — текущий продукт. Текущий режим языка — topaz-5.19.

Проверьте установку командой:

BASH
topaz version --verbose

Эта команда выводит сведения об идентичности компилятора, режима языка, среды выполнения и генератора Rust. При сообщении о проблеме с установкой приложите полный вывод.

Выбор компилятора

Установленный компилятор Stage 2 используется по умолчанию на поддерживаемых маршрутах текущего режима. Rust Stage 0 можно явно выбрать для сравнения, восстановления, работы со старыми режимами языка и объявленными маршрутами совместимости:

BASH
topaz check app/main.tpz
topaz check app/main.tpz --compiler self
topaz test --root app --locked --compiler self
topaz emit app/main.tpz --compiler self
topaz emit app/main.tpz --target python --compiler self --out-dir python-source
topaz build app/main.tpz --compiler self --out-dir app-product
topaz build app/main.tpz --target web --compiler self --out-dir web-product
topaz dev --root web-app --locked --compiler self
topaz fmt app/main.tpz --compiler self
topaz lsp --compiler self
topaz doc --root app --locked --compiler self --out-dir api-docs
topaz compiler observe app/main.tpz --compiler self --out-dir observation
topaz check app/main.tpz --compiler rust
topaz compiler status --json

На поддерживаемых маршрутах текущего режима при отсутствии --compiler выбирается self. Этот маршрут использует установленный образ самокомпилируемого компилятора и при ошибке не повторяет выполнение через Rust. Этот выбор распространяется на parse, dump-ast, check, все текущие профили, отчёты об экспорте, run, test, bench, заблокированные пакеты и compiler observe, проверенный boxed-вывод Rust, нативную сборку, продукты Python, raw Web, worker, Web-приложение, HTTP-сервис и разрешённые маршруты dev для Web и сервиса, а также на форматирование, LSP и документацию пакета. Маршруты форматирования и документации self принимают выбранный синтаксический и семантический продукт, после чего используют общий с Rust детерминированный форматтер и схему представления. Self-реализация LSP строит и кэширует этот проверенный продукт для набора открытых документов и отвечает на все объявленные методы без вызова стадии компилятора Rust. Один процесс LSP сохраняет единственный выбор компилятора. После изменения настройки перезапустите сеанс редактора. Целевые адаптеры self используют только те же проверенные факты, записывают происхождение topaz-stage2 и не вызывают целевой front end Rust. Старые режимы языка, непроверенная компиляция, нативная специализация и перечисленные команды только для Rust при пропущенном выборе разрешаются в пользу совместимости с Rust до запуска компилятора. Неподдерживаемый явный выбор self останавливается до чтения исходных файлов и формирования результата. Команда восстановления Rust только отображается, но не запускается.

Флаг --verbose для команды, использующей компилятор, показывает, являлся ли разрешённый выбор явным, текущим значением по умолчанию или режимом совместимости.

Намерение выбора компилятора сохраняется до определения фактического режима языка. Для пакетной команды CLI сначала читает и проверяет только корневой topaz.toml. Разрешение зависимостей, проверка файла блокировки, чтение исходных файлов, работа с кэшем и формирование результата выполняются позже. Пакет со старым режимом языка использует Rust при пропущенном выборе или явном rust, а явный self отклоняется до дальнейшей обработки. Поэтому выбор по умолчанию для текущего режима и объявленный выбор совместимости с Rust остаются раздельно отслеживаемыми.

Установленный процесс один раз проверяет и декодирует точный неизменяемый образ самокомпилируемого компилятора, после чего подготовленная программа совместно используется рабочими потоками self-компилятора и LSP. Ключ кэша включает идентичность образа, набора исходных файлов, схемы, шаблона среды выполнения и набора инструментов. Любое расхождение останавливает self-компиляцию. Исходные файлы цели, диагностика, сгенерированный код и управляемые результаты по-прежнему вычисляются для каждого запроса и не переиспользуются как подготовленное состояние компилятора. Подготовка укладывается в задокументированные пределы холодного запуска, LSP и памяти.

compiler status --json — машиночитаемый источник сведений об установленном производителе, идентичности образа программы и набора исходных файлов, поддерживаемых и отклоняемых маршрутах, решении при пропущенном выборе для каждого маршрута, выборе по умолчанию, совместимости, восстановлении и запрете скрытого отката. Управляемые артефакты также сообщают, являлся ли выбор явным, текущим значением по умолчанию или режимом совместимости.

Граница восстановления установленного продукта

Продукт, установленный через npm, использует то же значение по умолчанию для проверки пакета, выбранного теста, управляемой упаковки Python и запуска без исходников. Повторная сборка одного управляемого каталога через Rust и self атомарно заменяет происхождение, а не переиспользует чужой результат.

С тем же установленным выбором по умолчанию двухмодульное учебное приложение проходит проверку, выбранный тест и нативную релизную сборку, а затем запускается без исходников. Полевой реестр закрывает только решённые проблемы продукта. Широкие проверки компилятора и интеграций остаются за кандидатом.

Установленные маршруты Stage 1 и Stage 2 создают из нового исходника отдельные свежие проверенные наблюдения. Затем self по умолчанию собирает новый нативный продукт, который запускается без исходников. Восстановление Rust Stage 0 остаётся отдельным закреплённым путём реконструкции, а не значением по умолчанию.

Точный npm-продукт содержит оба варианта компилятора в одном исполняемом файле и не требует checkout репозитория. Продукт, собранный любым вариантом, запускается после удаления исходников Топаза. Если установленный образ самокомпилируемого компилятора отсутствует или повреждён, запрос self завершается ошибкой, не повторяет работу через Rust и не переиспользует его результат. Повторяйте исходную команду с --compiler rust только при явном выборе восстановления. Rust остаётся независимо доступен, а опубликованный комплект восстановления Stage 0 служит отдельным путём офлайн-реконструкции, а не автоматическим откатом.

Установленный self-компилятор теперь владеет полным версионированным продуктом компиляции текущего режима: упорядоченными модулями, токенами и AST, разрешением имён и экспортами, типизированной профильной диагностикой, пониженным представлением и требованиями среды выполнения, а также созданным Rust точным происхождением вызова и результата. Адаптер среды лишь проверяет и декодирует эти факты, не воссоздавая отсутствующие решения компилятора. Для допущенных команд общие пакетные и исполняющие компоненты потребляют один и тот же проверенный продукт.

Вывод Rust через self сохраняет таблицу IR фиксированной точки и добавляет только обычный фасад приложения. Таблицу исполняет общая целевая среда без образов компилятора. Она не может запускать парсер, разрешитель, проверку, понижение или генератор Rust. Манифест нативного артефакта фиксирует выбранный компилятор, производителя, наборы исходников компилятора и цели, продукт компиляции, хеш созданного исходника и targetCompilerFallback: false.

Доступные пути продукта

  • CLI форматирует, проверяет, тестирует, запускает, генерирует исходный код и собирает файлы либо пакеты.
  • Платформенная сборка создаёт исполняемый файл для текущей системы.
  • Python-сборка создаёт program.py и topaz_py_rt.py. Для их выполнения требуется Python 3.11 или новее.
  • Raw Web и Web Worker создают WASM-пакеты для существующей среды выполнения JavaScript.
  • Web Application создаёт полноценный управляемый статический продукт для браузера.
  • HTTP-сервис создаёт управляемый платформенный процесс HTTP/1.1 с фиксированными параметрами приёма соединений, запросов, очереди, времени выполнения, логирования и завершения.
  • Пакетные команды используют манифесты, lock-файлы, зависимости по пути и проверенные зависимости, сохранённые вместе с проектом.
  • topaz lispex embed run выполняет один запрос Лиспекса через точный вычислитель внутри установленного бинарного файла. topaz lispex embed info --json выводит сведения об идентичности компонента, профиля, контракта, среды выполнения и политики без fallback.
  • Браузерная песочница предоставляет ограниченную проверку и выполнение через интерпретатор без установки CLI Топаза.

Запуск вычислителя Лиспекса

Продукт принимает четыре именованных обычных файла или пути. Каталог результатов не должен существовать заранее:

BASH
topaz lispex embed run \
  --source rule.lspx \
  --input value.lpxvalue \
  --limits limits.json \
  --output lispex-result

Успешно завершённое вычисление записывает result.lpxvalue и report.json. При детерминированной семантической ошибке или исчерпании лимита записывается только report.json. При отказе запроса, нарушении контракта или ошибке движка каталог не создаётся. Предварительный результат и транскрипт не пересекают границу.

Вычислитель, профиль, политика среды выполнения и допуск зафиксированы в установленном продукте. Выбор вычислителя или профиля, загрузка sidecar, callback, импорт и fallback отсутствуют. Отчёт является записью продукта Топаза, а не переносимой квитанцией поставщика Лиспекса. Подробное различие описано в разделе Вычислитель Лиспекса и LIT.

Топаз предоставляет зафиксированный API ограниченного приложения std.lispex через интерпретатор и допущенные нативные цели выпуска. Точный процесс работы с манифестом, блокировкой, сборкой, свидетельством и повтором описан в разделе Запуск правил Лиспекса. Маршруты generated-python, raw-web, worker-web, managed-web, http-service, no-capability и mcp-empty-component-set отклоняют эту возможность до вывода или выполнения. Fallback отсутствует.

Наблюдения за компилятором

Снять наблюдение установленного компилятора

Установленный CLI позволяет записать текущий проверяемый конвейер компилятора вплоть до сгенерированного исходного кода Rust в единый канонический управляемый пакет:

BASH
topaz compiler observe --root my-app --locked --out-dir compiler-observation
topaz compiler validate compiler-observation

Результат следует размещать вне my-app. В противном случае при следующем наблюдении управляемый каталог результата может войти в состав фактов о каталогах пакета. Пакет содержит точные байты исходных файлов, набор исходных текстов, исходные и выровненные токены, AST, сведения о разрешении имён, структурированные типы, вызовы, захваты замыканий, пониженное представление без исходного текста, операции среды выполнения, сгенерированный код Rust, диагностику, запрос, ответ и происхождение. Обеспечивайте его защиту так же, как и для исходного пакета.

Проверить пакет наблюдения

Команда validate работает только на чтение. Она проверяет каноническую кодировку, схемы, порядок, перекрёстные ссылки, полноту, размеры и хеши без повторной компиляции и чтения исходного дерева файлов. В сведениях о происхождении производителем указан Rust Stage 0. Это описывает конкретный маршрут наблюдения, но не определяет язык реализации остальных этапов компилятора.

Использовать явное превью фронтенда

Явный предварительный маршрут запускает текущие лексер, обработчик раскладки, парсер, логическое замыкание импортов, разрешение имён и статическую проверку, написанные на Топазе и размещённые в Rust Stage 0:

BASH
topaz compiler preview --root my-app --locked --out-dir typed-preview
topaz compiler validate typed-preview

Формирование пакета завершается на типизированной фазе и содержит указание engine: topaz-front-end-preview, стадии производителя и результата 0/0, а также Rust Stage 0 в качестве хоста начальной загрузки. Фронтенд Топаза охватывает текущую грамматику и канонический AST, логическое замыкание модулей пакета, подключённых зависимостей и стандартной библиотеки, а также точные области видимости, объявления, ссылки, экспорты, статические типы, вызовы, захваты и структурированную диагностику. Число фактов об исходных файлах, узлов AST и Typed, глубина анализа и объём обмена с оболочкой ограничены. Данный маршрут не выполняет понижение представления, генерацию, сборку или запуск целевой программы. Он не представляет собой заявление о Stage 1 или о самокомпилируемом компиляторе. При сбое маршрут останавливает выполнение и не повторяет работу фронтенда средствами Rust. Обычные команды компилятора используют значение по умолчанию, установленное для их маршрута.

Запустить превью компилятора Stage 1

Установленный продукт также предоставляет явно выбираемый Stage 1 Compiler Preview:

BASH
topaz compiler preview main.tpz --producer stage1 --terminal rust-source --out-dir stage1-observation
topaz compiler validate stage1-observation

Stage 1 Preview принимает версионируемый формат обмена и закрытый IR без исходного текста, сформированные подсистемами понижения и генерации Rust на Топазе. Он компилирует обычный пакет без повторного подключения или вызова целевых парсера, разрешения имён, проверки, понижения, генератора или интерпретатора на Rust. Управляемый пакет фиксирует стадии производителя и результата 1/1, идентичность набора исходных текстов компилятора, сгенерированного кода и шаблона среды выполнения, а также параметр targetCompilerFallback: false. Это не является заявлением о достижении фиксированной точки Stage 2.

Понять границу сравнения

Граница сравнения раздельно оценивает семантические наблюдения, диагностику, сгенерированный исходный код, поведение созданного продукта и происхождение. Rust Stage 0 и Stage 1 Preview дают совпадающие результаты на заявленных многомодульном и отклоняемом примерах. Повторная генерация в Stage 1 детерминирована с точностью до байта. Код Rust, полученный от Stage 0 и Stage 1, может различаться и фиксируется как два независимо детерминированных результата, без предъявления некорректного требования побайтового равенства. Неверная идентичность производителя или повреждённый управляемый продукт Stage 1 отклоняются без повторной компиляции целевого объекта через Stage 0.

Сравнить без клонирования репозитория

Установленный продукт позволяет выполнить точное сравнение без наличия рабочей копии репозитория:

BASH
topaz compiler observe main.tpz --terminal rust-source --out-dir rust-observation
topaz compiler preview main.tpz --producer stage1 --terminal rust-source --out-dir stage1-observation
topaz compiler validate rust-observation
topaz compiler validate stage1-observation
topaz compiler compare --layer semantic rust-observation stage1-observation

После записи двух управляемых наблюдений операции проверки и сравнения больше не обращаются к исходному файлу программы. Если Stage 1 отклоняет запрос или завершается с ошибкой, резервное наблюдение не создаётся. Команда лишь выводит отдельную команду восстановления compiler observe, никогда не выполняя её неявно. Для явного выбора Rust Stage 0 следует указать --compiler rust в обычной команде check или сборки.

Отделить происхождение сгенерированного Rust

Сгенерированный компилятором код Rust хранит сведения о производителе и сборке за пределами канонических байтов исходного текста. Благодаря этому последующие стадии могут сравнивать сгенерированный исходный код побайтно, сохраняя информацию о его происхождении. Установленная команда Stage 1 остаётся явным Preview производителя и изолирована от параметров по умолчанию для обычных маршрутов.

Собрать и запустить встроенный образ Stage 2

Свежий запуск Stage 1 формирует исходный код компилятора, а закреплённая сборка преобразует эти байты в отдельный установленный образ компилятора Stage 2. Два поколения сохраняют независимые манифесты и встроенные образы, даже если их канонический исходный код компилятора совпадает. Сам по себе этот рубеж сборки не запускает Stage 2 и не свидетельствует о достижении фиксированной точки.

Автономно встроенный образ Stage 2 запускается явно:

BASH
topaz compiler preview app/main.tpz \
  --producer stage2 \
  --terminal rust-source \
  --out-dir stage2-observation

Передача флага --self-source без указания пути к входному файлу выполняет компиляцию набора исходных текстов компилятора, встроенного в установленный продукт. Команда записывает манифест продукта Stage 2 и не осуществляет повторных попыток выполнения через другого производителя компилятора или целевой фронтенд Rust.

Проверить неподвижную точку

Проверка фиксированной точки разграничивает два утверждения. Она сравнивает декодированную семантику программы компилятора и канонические наблюдения двух последовательных самокомпилируемых поколений для одного штатного и одного диагностического входных наборов. Затем она сравнивает их повторно сгенерированный исходный код компилятора в виде исходных байтов без нормализации. Оба слоя идентичны. Различие в происхождении образов и сеансов запуска является ожидаемым, а байты нативных исполняемых файлов в данное утверждение не входят. Результат подтверждает стабильность явного Preview-компилятора на указанных рубежах. Поведение Stage 2 по умолчанию регламентируется отдельным договором поддержки. Ни один из полученных результатов не гарантирует корректность произвольного поведения.

Выполнить ограниченные канарейки сбоев

Ограниченные негативные проверки поочерёдно модифицируют семантическую проекцию, идентичность сгенерированного исходного кода, происхождение Stage 2, производителя, seed-значение или границу среды выполнения. Случаи отсутствия фактов об исходном коде, а также режимы языка, выходящие за рамки текущей границы Preview, также приводят к остановке процесса до фиксации итогового каталога с результатами. Ни при каком сбое не выполняется повторная попытка через другого производителя компилятора или целевой фронтенд Rust.

Точный локальный npm-пакет выполняет запуск обычного Stage 2 и варианта self-source после удаления целевых исходных текстов и путей к репозиторию. Пакет self-source содержит файл stage2-fixed-point.json. Состояния семантики и сгенерированного исходного кода имеют значение pass, а воспроизводимость нативного бинарного файла сохраняет статус not-run. Автономный источник восстановления Stage 0 включает манифесты поколений компилятора, запись фиксированной точки, схемы, среду выполнения и метаданные закреплённого инструментария. Восстановленный Stage 0 остаётся отдельно выбираемым движком, а не автоматическим откатом.

Выбрать границу сравнения

Два полных наблюдения можно сравнить на рубеже, соответствующем решаемой задаче:

BASH
topaz compiler compare --layer semantic observation-a observation-b
topaz compiler compare --layer generated-source observation-a observation-b
topaz compiler compare --layer provenance observation-a observation-b
topaz compiler compare --layer native-binary program-a program-b

Команда выводит одну каноническую запись в формате JSON с ограниченным размером и завершается с ошибкой при наличии расхождений в выбранном слое. Семантическое сравнение прекращается на первом этапе компилятора, содержащем различия. Сгенерированный исходный код и происхождение сравниваются независимо, поэтому смена производителя сама по себе не приводит к расхождению семантики языка.

Восстановление исходной реализации Rust Stage 0

Выпуск, прошедший проверку для самокомпиляции, содержит отдельный манифест восстановления и детерминированный архив исходного кода наряду с пятью стандартными платформенными файлами. Архив включает в себя исходный код компилятора на Rust, файл блокировки, сохранённые зависимости и лицензии, шаблоны среды выполнения, схемы протокола, нагрузку компилятора и инструменты реконструкции. В нём также отдельно зафиксирован набор встроенных файлов компилятора, написанных на Топазе. Две сборки архива из одинаковых входных данных дают идентичный побайтовый результат.

Сам комплект не содержит инструментария Rust. Для реконструкции закреплённая версия Rust должна быть установлена заранее. Далее сборка выполняется автономно, исключительно из каталога зависимостей в архиве. Это независимый путь восстановления и проверки происхождения, а не стандартный способ установки. Он не делает цепочку восстановления Rust самокомпилируемой.

Проверка исходников компилятора для начальной загрузки

Bootstrap Profile — машиночитаемое ограничение на использование текущего языка в исходном коде ядра компилятора. Оно не вводит новый синтаксис или диалект. Профиль принимает только заблокированный детерминированный пакет, в котором разрешённые операции не используют неявные полномочия среды, extern-модули, числа с плавающей точкой, конкурентность, ресурсы, тестовые API и другие зависящие от хоста операции:

BASH
topaz check --profile bootstrap --locked --root compiler-kernel

Человекочитаемая диагностика содержит стабильное правило bootstrap/*. При использовании --format json поток stderr содержит машиночитаемую диагностику профиля, а stdout — итоговую сводку. Локальное значение проверяется по разрешённой идентичности. Пользовательская функция с именем print не становится операцией хоста, а переименование запрещённой операции или создание псевдонима для неё не скрывают её.

Ограничения, важные для выбора

Все цели используют общий синтаксический анализ, разрешение модулей и статическую проверку, но операции, зависящие от среды, доступны не везде. Цель, которая не может сохранить операцию, должна отклонить её до записи продукта. В частности, сгенерированный Python не поддерживает текущее сжатие DEFLATE с фиксированными кодами Хаффмана, фиксированный zlib и вспомогательную функцию RS(255,223). Генерация завершается явной ошибкой. Перед выбором цели для двоичных медиа проверьте страницы Rust и Python.

HTTP-продукт намеренно ограничен. Он не включает TLS, HTTP/2, WebSocket, исходящие сетевые запросы, неявные полномочия окружения, общее изменяемое состояние Топаза или универсальный веб-фреймворк.

Среда Web Application предоставляет только объявленные полномочия браузера. Raw Web и Worker требуют наличия среды JavaScript. Выполнение в песочнице является экспериментом с исходным кодом, а не свидетельством развёртывания.

Порядок выполнения параллельных задач не определён. Программа не должна зависеть от конкретного чередования.

Установленный вычислитель не является бэкендом Лиспекса или --target lispex и не доказывает эквивалентность всего языка. LIT, сокращение от Lispex-in-Topaz, остаётся отдельной поверхностью внутренней и интеграционной проверки общего происхождения.

Рекомендуемый порядок

Начните с fmt --check, check и test. Используйте run для приложения командной строки и dev для веб-приложения или HTTP-сервиса. Соберите только необходимую цель и скопируйте весь её управляемый каталог.

Связанная документация