Проверьте соответствие программы правилам Топаза, затем испытайте её поведение в нужной среде. Если результаты компиляторов различаются, выберите подходящий слой сравнения.
Установите CLI Топаза. Сведения об установленном компиляторе и поддерживаемых целях приведены в разделе Состояние инструментария.
Проверка и запуск файла
Создайте пустой рабочий каталог и сохраните в нём файл main.tpz.
print("ready")Выполните команды из этого каталога.
topaz check main.tpz
topaz run main.tpzОбе команды завершаются с кодом 0. Первая выводит следующие результаты.
main.tpz: types-ok (1 module)
main.tpz: resolve-ok (1 module)Вторая выводит ready. check находит ошибки синтаксиса, имён, типов и выбранного профиля. Профиль задаёт поддерживаемые функции и правила выполнения. Проверьте вывод программы, изменения файлов и код завершения на входных данных, важных для приложения.
Для развёртывания пройдите Первое приложение, соберите программу и запустите её вне исходного проекта. Проверьте требования цели. Неподдерживаемая операция должна вызывать ошибку до записи продукта. Вместе с результатом теста сохраните точные входные данные, инструментарий, среду, профиль и лимиты ресурсов.
Где искать информацию
| Вопрос | Источник |
|---|---|
| Что означает этот синтаксис или тип? | Спецификация языка SPEC определяет синтаксис, типы и поведение |
| Проходит ли файл выбранные проверки? | Средство статической проверки сообщает об ошибках или принимает файл |
| Что произойдёт при выполнении с этим входом? | Запустите программу через интерпретатор или собранный продукт в нужной среде |
| Как использовать поддерживаемую функцию? | Примеры руководства связывают входы, команды и результаты |
| Что проверял конкретный тест? | Изучите его входные данные, среду, лимиты и записанные результаты |
Выбор слоя сравнения
Наблюдение компилятора сохраняет исходный код и записи одной компиляции. Раздел Состояние инструментария объясняет состав файлов и проверку. compiler compare читает два сохранённых наблюдения без обращения к исходным файлам.
| Слой | Что сравнивается |
|---|---|
semantic | Исходные файлы и последовательные записи компилятора вплоть до диагностики и результата. Сравнение останавливается на первом различающемся этапе |
generated-source | Точные байты сгенерированного Rust |
provenance | Компилятор и входные данные, создавшие результат |
native-binary | Точные байты исполняемых файлов для одной цели. Принимает пути к исполняемым файлам вместо каталогов наблюдений |
Сгенерированный код и происхождение сравниваются независимо. Другой идентификатор производителя меняет результат сравнения происхождения. Семантическое сравнение проверяйте отдельно, а поведение сравнивайте запуском тестов приложения.
Чтение различий в JSON
Продолжайте в каталоге с созданным выше main.tpz. Наблюдения содержат исходный код и требуют такой же защиты. Выбирайте ещё не использованные каталоги результатов вне каталога исходного кода.
topaz compiler observe main.tpz --out-dir ../before-observationКоманда завершается с кодом 0, создаёт ../before-observation и выводит ../before-observation: compiler-observation-ok. Теперь замените ready на done в main.tpz, оставив остальной файл без изменений.
topaz compiler observe main.tpz --out-dir ../after-observation
topaz compiler compare --layer semantic ../before-observation ../after-observationКоманда наблюдения завершается с кодом 0 и выводит ../after-observation: compiler-observation-ok. Сравнение завершается с кодом 1, поскольку исходный код изменился. Ниже приведены поля из JSON-вывода.
{
"equal": false,
"firstFailingPhase": "source-set",
"layer": "semantic"
}equal показывает, совпал ли выбранный слой. firstFailingPhase указывает первое различие, здесь это набор исходных файлов. Пути файлов и подробности находятся в mismatches полного вывода. Если изменение было случайным, верните строку ready в main.tpz и создайте новое наблюдение. Для сообщения о неожиданном различии сохраните исходные каталоги наблюдений.