Подтвердить что ты не робот

Является ли библиотека бинарной сериализации С++ для backward/foward совместимой?

Возможный дубликат:
Обновление библиотеки модернизации сериализации

Я пытаюсь найти сериализационное решение для приложения на С++. Мне бы очень хотелось иметь возможность использовать бинарную сериализацию boost. Если бы я должен был сериализовать объект, используя более старую версию бинарной библиотеки сериализации, будет ли приложение, использующее более новую версию библиотеки boost, всегда иметь возможность ее прочитать? Как насчет наоборот? Что такое философия повышения обратной совместимости в библиотеке сериализации?

4b9b3361

Ответ 1

Они делают это, увеличивая версию в заголовке. Так что да, это совместимо в том смысле, что вы получите изящный сбой, если попытаетесь прочитать двоичные данные, сериализованные с несовместимой версией, как примечания к выпуску 1.45.0 имеют тенденцию указывать. Кроме того, есть ошибки в 1.42 и 1.43, которые нарушают его!

Внутренние двоичные архивы, созданные в версиях 1.42 и 1.43, страдают серьезной проблемой. Вероятно, они не будут читаемы этой последней версией. Это связано с тем, что 1.42 внесли некоторые изменения в двоичный формат некоторых типов. Обычно это можно устранить, обнаружив номер версии библиотеки, записанный в заголовок архива. К сожалению, этот номер версии библиотеки не был увеличен на 1,42, как и следовало ожидать. Итак, теперь у нас есть две разные версии двоичного архива с тем же номером версии библиотеки.

Я лично поставил бы больше веры в Google Protocol Buffers, он явно поддерживает обратную совместимость:

Вы можете добавлять новые поля в свои форматы сообщений, не нарушая обратной совместимости; старые двоичные файлы просто игнорируют новое поле при разборе.

Однако это требует немного больше усилий на стороне системы сборки, поскольку она предполагает использование автоматически сгенерированного кода.