Pre-v5 material — provenance, не compatibility promise. v5.0/v5.1 были private design generations; synchronized public line выбрана в v5.2. Сохраняйте intended behavior, переписывайте source в current grammar и позволяйте checker громко выявить boundaries.
1. Инвентаризация до переписывания
Запишите entry files, module roots, inputs, outputs, faults, host effects и golden transcripts. Отделите настоящий Topaz от Rust/JavaScript/framework examples. Не выводите semantics из старой страницы; используйте current SPEC/examples.
2. Нормализация повторяющихся форм
mut let→let mut,[T]→Array<T>, старый function type →(T) -> U.- List rest —
..rest, variadic —...args: T, anonymous function — lambda, receiver — только admittedself. - String indexing/
.lengthзаменяются scalar APIs; templates используют registry tags и{expr}. - Recoverable failure —
Result, absence —Option/nullable, runtime faults loud, cleanup —defer/admittedusing. - Модули переписываются в текущие формы
importиexport; синтаксис других языков остаётся на явно отмеченной границе сборки или конвертации.
3. Исторический код остаётся историческим
Legacy spelling находится в text, не canonical Topaz fence:
mut let names: [string] = ["Ada"]
let first = names[0]Current form явно показывает mutation, collection type и bounds:
let mut names: Array<string> = ["Ada"]
let first: Option<string> = names.get(0)
print("{first}")4. Восстановление proof, не только parse
Запустите topaz check --language-version 5.6, затем reference fixtures через run. Build только нужные targets и сравните declared observables. Перепроверьте module initialization, order, scalar positions, faults, cleanup и profiles. Parse не доказывает migrated behavior.
5. Граница автоматизации
Команда миграции охватывает только известные переходы между прежними формами исходного кода и пакетов, а не произвольное преобразование семантики до-v5. Подробные руководства могут содержать API фреймворков и синтаксис других языков, которые нельзя проверить автоматической заменой. Сравните пример в Классике, затем адаптируйте его к текущему языку.
Выходной gate
Migration закрыта, когда current checker проходит, outputs recaptured, admitted backends согласны на declared tests, canonical fences не содержат Hard Stops, current links заменили legacy authority, а unsupported behavior имеет loud disposition.