Перейти к содержимому
Топаздокументация
Загрузка

Поиск в документации

Проект и руководство

Выберите результат стрелками и нажмите Enter, чтобы открыть его.

Введите имя API, номер диагностики, правило или тему проекта.

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

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

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

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

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

    import std.io
    
    io.writeLine("ready")
    

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

    topaz check main.tpz
    topaz run main.tpz
    

    Обе команды завершаются с кодом 0. Первая выводит следующие результаты.

    main.tpz: types-ok (2 modules)
    main.tpz: resolve-ok (2 modules)
    

    Вторая выводит 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 и создайте новое наблюдение. Для сообщения о неожиданном различии сохраните исходные каталоги наблюдений.

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

    Меню

    Загрузка