Здравствуйте!
Есть развесистые вложенные структуры. Хранится, допустим, просто в файле, как снимок памяти с корневой структурой. Всё структуры состоят из примитивных типов, вроде даже float'ов нет. Есть массивы, в тч и структур, исключительно фиксированного размера.
В любой новой версии софтины могут быть добавлены поля в какую-нибудь вложенную структуру, и, соответственно, вся двоичная раскладка поедет. Также поля могу быть удалены, перемещены, или переименованы.
В общем, такое вот, историческое легаси.
Требуется придумать какой-то механизм, который позволяет вычитать старую версию конфига, всё, что можно — перенести в новый конфиг, если чего-то в старом конфиге нет — установить значение по умолчанию.
Вроде бы, protobuf что-то умеет в версионность, но: нам нужно уметь для каждого поля любой структуры получить его смещение относительно начала файла, чтобы писать непоредственно по этому смещению.
Как вам такое?
ЗЫ Задача со звёздочкой — сделать на чистейшей сишечке.
ЗЫЫ Внешние инструменты не очень приветствуются, но можно попробовать написать что-то на питоне, и к питону наверное даже можно доустановить каких-то библиотек, помимо того, что идёт в базе, если это не слишком гемморно.