Перенесите исходный код Топаза, написанный до v5, на текущий синтаксис вручную. Сохраняйте прежнее поведение и сравнивайте результаты после каждого изменения.
Установите Топаз и сохраните копии исходного кода, входных данных и результатов. Совместимые обновления продукта не требуют отдельного переноса исходников.
Перенесите один файл
В этом историческом примере использованы старые формы объявления и типа массива.
mut let имена: [string] = ["Ada"]
let первое = имена[0]Сохраните приведённый ниже код с текущим синтаксисом в рабочей папке как from-pre-v5.tpz.
let mut имена: Array<string> = ["Ada"]
let первое: Option<string> = имена.get(0)
print("{первое}")Выполните эти команды из той же папки.
topaz check from-pre-v5.tpz
topaz run from-pre-v5.tpzПроверка завершается с кодом 0. Запуск также завершается с кодом 0 и печатает следующий результат.
Some(Ada)имена.get(0) возвращает Option<string>. Первый элемент существует, поэтому результат равен Some(Ada). Индекс вне массива возвращает None. Прямая индексация массива также поддерживается и вызывает ошибку выполнения при выходе за границы. Выберите нужное программе поведение.
В документации помещайте старый код в блок text. Для текущего синтаксиса используйте блок topaz.
Запишите поведение перед изменением проекта
Запишите входные файлы, корни модулей, входные данные, ожидаемый вывод, ошибки выполнения, файловые и сетевые действия. Сохраните результаты запусков для сравнения. Отделите примеры на Rust, JavaScript и синтаксисе фреймворков от исходников Топаза.
Приведите исходный код и метаданные пакета к текущему режиму языка. Настройки пакета описаны в разделе Пакеты и распространение. Прежний синтаксис смотрите в Классике, а нужную сейчас форму ищите в текущем руководстве.
Замените повторяющиеся формы
| Старая форма | Текущая форма | Что сохранить |
|---|---|---|
mut let x | let mut x | Возможность повторного присваивания привязке |
[T] | Array<T> | Тип элемента |
function(T) -> U | (T) -> U | Типы параметра и результата |
[head, ...tail] | [head, ..tail] | Остаток элементов в шаблоне списка |
args: ...T | ...args: T | Тип вариативного аргумента |
Анонимная function | (x: T) => expr | Параметры, результат и захваченные привязки |
s[i], s.length | s.scalars() и явные строковые API | Позиции и количество скаляров Unicode |
Обратные кавычки, ${expr} | Двойные кавычки, {expr} | Содержимое строки и интерполяцию |
Скаляр Unicode представляет одно значение Unicode и может отличаться от байта или видимого символа. Индексация и зарегистрированные теги шаблонов описаны в разделе Строки и шаблоны. Используйте self в тех местах, где его допускает текущее объявление метода.
Для обрабатываемых ошибок используйте Result, для отсутствующих значений используйте Option или тип с null. Различайте ошибки выполнения и возвращаемые значения ошибок. Перенесите очистку в defer или поддерживаемые конструкции using. Обновите import, export, видимость и инициализацию по разделу Модули и видимость.
Код других языков оставляйте в явно обозначенных шагах сборки или преобразования. Вставлять его в модуль Топаза как синтаксис Топаза нельзя.
Сравните переписанную программу
Выполните topaz check для изменённого исходника, затем запустите тесты проекта. Для файла выше сравните вывод с Some(Ada). Для проекта сравните сохранённые входные данные и результаты.
Проверьте инициализацию модулей, порядок обхода, позиции скаляров Unicode, числовые ошибки, очистку и разрешённые операции хоста. При диагностике исправьте указанное место по ссылке на текущий синтаксис. Если проверка прошла, но вывод отличается, изучите изменённую логику на тех же входных данных.
Соберите программу для нужных нативных сред, Web или Worker по разделу Артефакты и развёртывание. Неподдерживаемые формы должны вызывать диагностику до создания результата сборки. Перенос завершён, когда проверки и тесты проходят, а каждая выбранная сборка ведёт себя ожидаемым образом.