Топаз 5.15.0 — текущий продукт. Текущий режим языка —
topaz-5.15.
Проверьте установку командой:
topaz version --verbose
Она сообщает идентичность компилятора, режима языка, среды выполнения и генератора Rust. При сообщении о проблеме установки приложите полный вывод.
Выбор компилятора
Rust Stage 0 остаётся компилятором по умолчанию и средством восстановления. Установленный компилятор Stage 2 также можно явно выбрать для разбора, проверки, запуска, тестов, измерения, проверки пакета и наблюдения компилятора в текущем режиме языка:
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 в точности равно выбору rust. Маршрут self
использует установленный образ C2 и при ошибке не повторяет работу через Rust.
Этот выбор действует для parse, dump-ast, check, всех текущих профилей,
отчётов об экспорте, run, test, bench, заблокированных пакетов и
compiler observe, проверенного boxed-вывода Rust, нативной сборки, продуктов
Python, raw Web, worker, Web-приложения, HTTP-сервиса и разрешённых маршрутов
dev для Web и сервиса, форматирования, LSP и документации пакета. Маршруты
форматирования и документации self потребляют выбранный синтаксический и
семантический продукт C2, а затем используют общий с Rust детерминированный
форматтер и схему представления. LSP self строит и кэширует выбранный продукт
C2 для набора открытых документов и отвечает на все объявленные методы без
вызова стадии компилятора Rust. Один процесс LSP сохраняет один выбор
компилятора; после изменения настройки перезапустите сеанс редактора. Целевые
адаптеры self потребляют только проверенные факты C2, записывают происхождение
topaz-stage2 и не вызывают целевой front end Rust. Старые режимы языка,
непроверенная компиляция и нативная специализация пока требуют
--compiler rust. Неподдерживаемый выбор self останавливается до чтения
исходников и создания результата; команда восстановления Rust только
показывается, но не запускается.
compiler status --json — машиночитаемый источник сведений об установленном
производителе, идентичностях образа программы и набора исходников,
поддерживаемых и отклоняемых маршрутах, выборе по умолчанию, восстановлении и
запрете скрытого отката.
Граница восстановления установленного продукта
Точный npm-продукт содержит оба варианта компилятора в одном исполняемом файле
и не требует checkout репозитория. Продукт, собранный любым вариантом,
запускается после удаления исходников Топаза. Если установленный образ C2
отсутствует или повреждён, запрос self завершается ошибкой, не повторяет
работу через Rust и не переиспользует его результат. Повторяйте исходную
команду с --compiler rust только при явном выборе восстановления. Rust
остаётся независимо доступен, а опубликованный комплект восстановления Stage
0 служит отдельным путём офлайн-реконструкции, а не автоматическим откатом.
Установленный self-компилятор теперь владеет полным версионированным продуктом компиляции текущего режима: упорядоченными модулями, токенами и AST, разрешением имён и экспортами, типизированной профильной диагностикой, пониженным представлением и требованиями среды выполнения, созданным Rust и точным происхождением вызова и результата. Адаптер среды лишь проверяет и декодирует факты C2, не воссоздавая отсутствующие решения компилятора. Для допущенных команд общие пакетные и исполняющие компоненты потребляют один и тот же проверенный продукт.
Вывод Rust через self сохраняет таблицу IR фиксированной точки от C2 и
добавляет только обычный фасад приложения. Таблицу исполняет общая целевая
среда без образов компилятора C1/C2; она не может запускать парсер,
разрешитель, проверку, понижение или генератор 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 с конечными настройками приёма соединений, запроса, очереди, срока выполнения, журнала и завершения.
- Пакетные команды используют манифесты, файлы блокировки, зависимости по пути и проверенные зависимости, сохранённые вместе с проектом.
- Браузерная песочница предоставляет ограниченные проверку и выполнение интерпретатором без установки CLI Топаза.
Наблюдения за компилятором
Установленный CLI может записать текущий проверяемый конвейер компилятора вплоть до созданного исходного кода Rust в один канонический управляемый пакет:
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:
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. Обычные команды компилятора по-прежнему используют
Rust Stage 0.
Установленный продукт также открывает созданный C1 как явно выбираемый Stage 1 Compiler Preview:
topaz compiler preview main.tpz --producer stage1 --terminal rust-source --out-dir stage1-observation
topaz compiler validate stage1-observation
C1 потребляет версионированный обмен и закрытый IR без исходного текста,
созданные понижением и генератором Rust на Топазе. Он компилирует обычный пакет,
не подключая и не вызывая повторно целевые парсер, разрешение имён, проверку,
понижение, генератор или интерпретатор на Rust. Управляемый пакет фиксирует
стадии производителя и результата 1/1, идентичности набора исходников
компилятора, созданного кода и шаблона среды, а также
targetCompilerFallback: false. Это не заявление о фиксированной точке
Stage 2.
Граница сравнения раздельно оценивает семантические наблюдения, диагностику, созданный исходный код, поведение созданного продукта и происхождение. Stage 0 и C1 совпадают на заявленных многомодульном и отклоняемом примерах. Повторная генерация C1 стабильна по байтам; код Rust от Stage 0 и Stage 1 может различаться и фиксируется как два отдельно детерминированных результата, а не как ложное требование равенства байтов. Неверная идентичность производителя или повреждённый управляемый продукт C1 отклоняются без повторной компиляции цели через Stage 0.
Установленный продукт позволяет выполнить точное сравнение без рабочей копии репозитория:
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 используйте обычные команды observe,
check или сборки.
Создаваемый компилятором код Rust хранит сведения о производителе и сборке вне канонических байтов исходника. Благодаря этому следующие стадии могут сравнивать созданный исходник побайтно, не стирая сведения о его происхождении. Установленная команда Stage 1 и Rust Stage 0 по умолчанию не изменились.
Теперь свежий запуск C1 создаёт R1, а закреплённая сборка связывает именно эти байты с отдельным образом программы C2. Даже при одинаковом каноническом исходнике компилятора C1 и C2 имеют независимые манифесты и встроенные образы. Одна эта граница сборки не запускает C2 и не объявляет фиксированную точку.
Независимо встроенный образ C2 запускается явно:
topaz compiler preview app/main.tpz \
--producer stage2 \
--terminal rust-source \
--out-dir stage2-observation
Флаг --self-source без пути к входному файлу компилирует набор исходников
компилятора, встроенный в установленный продукт. Команда записывает манифест
продукта Stage 2 и не повторяет попытку через C1 или целевой front end Rust.
Проверка фиксированной точки разделяет два утверждения. Она сравнивает декодированную семантику программ компилятора C1 и C2 и канонические наблюдения для одного нормального и одного диагностического ввода, затем сравнивает свежие R1/R2 как исходные байты без нормализации. Оба слоя равны. Различие происхождения образов и запусков C1/C2 ожидаемо, а байты нативных исполняемых файлов в это утверждение не входят. Результат показывает стабильность явного Preview-компилятора на этих границах, но не делает Stage 2 компилятором по умолчанию и не доказывает корректность любого возможного поведения.
Ограниченные негативные проверки по одной изменяют семантическую проекцию, идентичность созданного исходника, происхождение C2, производителя, seed или границу runtime. Отсутствующие факты исходника и режим языка вне текущей границы Preview также останавливаются до фиксации готового каталога результата. Ни один сбой не повторяет попытку через C1 или целевой front end Rust.
Точный локальный npm-пакет запускает обычный Stage 2 и форму self-source после
удаления целевого исходника и путей к репозиторию. Пакет self-source содержит
stage2-fixed-point.json: состояния семантики и созданного исходника равны
pass, а воспроизводимость нативного бинарника остаётся not-run. Офлайн-
источник восстановления Stage 0 включает манифесты C1/C2, запись фиксированной
точки, схемы, среду выполнения и метаданные закреплённого набора инструментов.
Восстановленный Stage 0 остаётся отдельно выбираемым движком, а не
автоматическим откатом.
Два полных наблюдения можно сравнить на той границе, которая отвечает на нужный вопрос:
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 и другие зависящие от хоста операции:
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. Выполнение в песочнице является экспериментом с исходником, а не свидетельством развёртывания.
Порядок выполнения параллельных задач не определён. Программа не должна зависеть от конкретного чередования.
LIT остаётся ограниченной поверхностью внутренней проверки и интеграции Lispex. Это не поставляемая цель Топаза и не доказательство эквивалентности всего языка.
Рекомендуемый порядок
Начните с fmt --check, check и test. Используйте run для командного
приложения и dev для Web Application или HTTP-сервиса. Соберите только
нужную цель и копируйте весь её управляемый каталог.