Это единственное руководство для переноса действительно старого исходного
кода Топаза, написанного до v5. Оно не задаёт цепочку обновлений между
выпусками: совместимые изменения продукта не требуют отдельной процедуры
переноса. Сначала зафиксируйте задуманное поведение, затем перепишите программу
в текущей грамматике и позвольте средству проверки явно показать оставшиеся
несовместимые места.
1. Инвентаризация до переписывания
Запишите входные файлы, корни модулей, входные данные, ожидаемый вывод, ошибки, внешние эффекты и проверенные образцы вывода. Отделите настоящий Топаз от примеров на Rust, JavaScript или коде фреймворка. Не восстанавливайте поведение по одной лишь похожей записи на старой странице; используйте текущее руководство и канонические примеры.
2. Нормализация повторяющихся форм
mut let→let mut,[T]→Array<T>, старое обозначение типа функции →(T) -> U.- Остаток шаблона списка —
..rest, вариативный параметр —...args: T, анонимная функция — лямбда, аselfиспользуется только там, где это допускает текущее объявление метода. - Индексация строки и
.lengthзаменяются скалярными API; шаблоны используют зарегистрированные теги и{expr}. - Восстанавливаемая ошибка представляется через
Result, отсутствие значения — черезOptionили допускающийnullтип, ошибка выполнения остаётся явной, а очистка выполняется черезdeferили разрешённыйusing. - Модули переписываются в текущие формы
importиexport; синтаксис других языков остаётся на явно отмеченной границе сборки или конвертации.
3. Исторический код остаётся историческим
Старое написание помещается в блок text, а не в канонический блок Топаза:
mut let names: [string] = ["Ada"]
let first = names[0]Текущая форма явно показывает изменяемость, тип коллекции и безопасную проверку границ:
let mut names: Array<string> = ["Ada"]
let first: Option<string> = names.get(0)
print("{first}")Some(Ada)names.get(0) возвращает Option<string>, поэтому успешный поиск виден как
Some(Ada), а не зависит от непроверенной индексации строки.
4. Проверка поведения, а не только синтаксиса
topaz check from-pre-v5.tpz
topaz run from-pre-v5.tpz
После успешной проверки сравните вывод с результатом, записанным до переписывания. Повторно проверьте инициализацию модулей, порядок обхода, скалярные позиции строк, числовые ошибки, очистку ресурсов и границы профиля среды.
Собирайте только те цели, которые собираетесь поставлять. Сравнивайте объявленные результаты лишь для целей, поддерживающих переписанный исходный код. Неподдерживаемая форма должна завершиться ясной диагностикой, не создавая артефакт с другим или неполным поведением.
5. Граница автоматизации
topaz migrate --from <version> --to <version> распознаёт только явно принятые
соседние переходы внутри v5. На этих объявленных границах команда может
проверить совместимый исходный код или обновить поддерживаемые метаданные
пакета. Она не переводит синтаксис до v5 и не угадывает смысл старой
программы. Подробные руководства также могут содержать API фреймворков и
синтаксис других языков, которые нельзя проверить автоматической заменой.
Используйте Классику только как исторический
контекст, а программу адаптируйте к текущему языку.
Условие завершения
Покинуть это руководство можно, когда текущая проверка проходит, необходимые результаты записаны заново, каждая выбранная поддерживаемая цель выдаёт заявленный результат, каждое неподдерживаемое поведение явно отклонено или отдельно описано, а в канонических блоках Топаза не осталось старых форм. Вернитесь к Краткому обзору синтаксиса и переходите из него в нужные разделы текущего руководства.