9.2 Номера полей и схема
- Каждое поле
dataи каждый вариантenumимеет стабильный тег (номер в wire-формате). - Тег задаётся явно
@tag(n)или назначается компилятором. Назначенные теги фиксируются в файлеoxl.schema.lockпакета (имя типа → имя поля → тег). Новое поле получаетmax(tag) + 1. Lock-файл ДОЛЖЕН храниться в системе контроля версий. Формат и сверка с реестром — приложение C. - Переименование поля без
@renamed(from: "old")трактуется как удаление и добавление. - Версия схемы:
@v(N)наdata,enumилиservice(по умолчанию 1).@since(N)— поле появилось в версии N;@removed(N)— поле удалено в версии N, его тег зарезервирован навсегда.
Изменения, ломающие совместимость (компилятор и oxl publish ДОЛЖНЫ отвергать их относительно последней опубликованной схемы):
| Изменение | Почему |
|---|---|
удаление поля без @removed | старые читатели теряют данные молча |
| повторное использование тега | неверная интерпретация данных |
изменение типа поля, кроме расширений i32→i64, u32→u64, f32→f64, T→T? | несовместимое кодирование |
| добавление обязательного поля (без значения по умолчанию и не опционального) | старые писатели его не отправляют |
T? → T | старые писатели могут не отправлять |
удаление варианта enum или добавление варианта в enum без @open | старые читатели не смогут разобрать |
| удаление или переименование rpc, изменение его параметров или результата | ломает клиентов |
Связанные диагностики
См. также
Исходник: docs/spec/oxl-standard.md