Совместимость

Язык и совместимость

Проверка программы и её поведения, выбор записей компилятора для сравнения.

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

Установите CLI Топаза. Сведения об установленном компиляторе и поддерживаемых целях приведены в разделе Состояние инструментария.

Проверка и запуск файла

Создайте пустой рабочий каталог и сохраните в нём файл main.tpz.

TOPAZ
print("ready")

Выполните команды из этого каталога.

BASH
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. Наблюдения содержат исходный код и требуют такой же защиты. Выбирайте ещё не использованные каталоги результатов вне каталога исходного кода.

BASH
topaz compiler observe main.tpz --out-dir ../before-observation

Команда завершается с кодом 0, создаёт ../before-observation и выводит ../before-observation: compiler-observation-ok. Теперь замените ready на done в main.tpz, оставив остальной файл без изменений.

BASH
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-вывода.

JSON
{
  "equal": false,
  "firstFailingPhase": "source-set",
  "layer": "semantic"
}

equal показывает, совпал ли выбранный слой. firstFailingPhase указывает первое различие, здесь это набор исходных файлов. Пути файлов и подробности находятся в mismatches полного вывода. Если изменение было случайным, верните строку ready в main.tpz и создайте новое наблюдение. Для сообщения о неожиданном различии сохраните исходные каталоги наблюдений.

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