OxL Справочник OxL
РусскийEnglish

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, изменение его параметров или результаталомает клиентов

schema-attr, schema-break

См. также

Исходник: docs/spec/oxl-standard.md