пятница, 25 февраля 2011 г.

boost::serialization hell

Никогда не используйте boost::serialize! Никогда...

Ну нельзя так работать, ну честное слово! Или может быть у них какие колебания в проекте, нехорошие? Не знаю...

Мы используем сериализацию...
"Мыши плакали, кололись, но продолжали есть кактус!.."


Самая большая проблема boost::serialize - это отсутствие совместимости на понижение. Мы не можем сформировать архив старой версии. И если вы вдруг задумаете строить клиент-серверную архитектуру на основе boost::serialization - одумайтесь.

Мы сидели на boost-1.35.0 достаточно долго, потом поняли, что продолжаться так больше не может и создали отдельный вариант boost::serialization, для старых версий. Для новых клиентов архивируем по новому, для старых по старому. Но новая версия попадет в ту же ловушку, как только выйдет. Нам придется иметь три, или четыре версии сериализации для совместимости.

Вообще с совместимостью в boost::serialization плохо. Обновились до 1.45.0 - система не работает. Стали выяснять почему - что-то разъехалось с темплейтами. Сериализация пользовательских структур обрабатывается некорректно.

Но тут, неожиданно вышла версия 1.46. В общем списке изменений которой вообще не написано что что-то менялось в данной либе. Но в списке изменений самой либы написано - что версии 1.42,1.43,1.44 содержали ошибку, и отныне считаются некошерными. Вплоть до того что архивы указанных версий не прочитаются на текущей. Это же жесть! Тестировать то не пробовал его никто?

У нас пока все заработало. Но что делать дальше - не понятно. Надо бы уходит от этой сериализации в сторону какого нибудь google protocol. Но не все так просто. Для начала нужно в достаточной степени развязать все в исходных текстах, чтобы новые версии не зависели от старых. Пока там все очень сильно перемешано.