boost::serialization hell - эмоциональный пост про проблемы, возникающие при использовании boost::serialize.
Будет полезно тем, кому в проекте нужна сериализация и кто рассматривает boost::serialize как один из вариантов.
Quaternions and spherical trigonometry
3 дня назад
13 коммент.:
Ох уж этот буст.
Заметка не то чтобы сильно удивительная, честно говоря. Вот если бы он написал что boost::serialize это очень круто, то тогда это была бы бомба!
Пожалуй, кому-нибудь стоит написать книгу про то в каких случаях буст стоит использовать. :-D
Весьма типичная история про OpenSource технологии.
Про сериализацию - реклмендую например Binary XML.
классическая ошибка - путать сериализацию и протокол общения в гетерогенной среде. Сериализация (любая хоть даже от mfc) дает байты как оно в бинарнике версии X. Разумеется оно рассыпается уже в версии X+1. Ну и "а буст не умеет все сам" месадж из того поста намекает на опыт и/или его отсутствие :)
boost::serialize удобно использовать для хранения данных локальных для данной машины/версии. Я бы не выбрал его для общения между нодами, особенно если другие ноды используют другие языки программирования. Давно есть thrift, google protobuf и еще пачка отлаженных мульти-языковых технологий
Спасибо, пост пришёлся очень в тему :) Не ожидал, что в бусте могли допустить несовместимость между минорными версиями...
Кстати, библиотеку сериализации я бы стал обновлять в последнюю очередь - чему там обновляться? Заморозить версию да и всё. Ну а если буст не позволяет обновить другие библиотеки не затронув сериализацию, то явно лучше что-то другое использовать.
Тормозит он очень.
boost слишком сложная либа, лучше его не юзать
boost - это набор библиотек, самых разных - сложных и простых... Нельзя говорить о нем в единственном лице...
P.S. boost делает разработку на С++ более/менее приемлимой, особенно в начальной стадии проекта
Рекомендую ознакомиться с Abstract Syntax Notation 1 (ASN.1) - язык описания структур данных, конечной целью которого является, в сущности, сериализация/десериализация.
Плюсы:
1. Стандарт ITU-T
2. Не привязан к конкретному языку программирования, но существуют трансляторы описаний структур данных ASN.1 в структуры данных и процедуры сериализации/десериализации для массы ЯП (С, С++, Java, ...)
3. Существует несколько правил кодирования (сериализации, encoding rules), оптимизированных под производительность/размер получаемых данных/...
ASN.1 получил широкое распространение, например, телекоммуникационные протоколы.
ASN.1 стадарт неплохой, но в последних редакциях чересчур всеохватный и комплексный. Более того, его использование подразумевает наличие компилятора, генерирующего код на целевом языке для кодирования и декодирования структур. А серьезные ASN.1 компиляторы ориентированы на рынок телекомов и стоят сумасшедшие деньги. А лучший из бесплатных - asn1c - генерирует код только для простого С.
Эмоции блоггера понятны (у меня были похожие) - автор библиотеки на самом деле не совсем адекватный человек (ну или такое впечатление он создает).
Как-то автор взял и стал сохранять версии объектов как 1 байт, хотя везде тип версии был обозначен как unsigned int. После того как со сменой буста все перестало работать пошел гуглить.
Сейчас уже не приведу урл, но автор упорно говорил что это не баг а так и должно быть - он где-то в доках писал что версия должна помещаться в один байт, ну а кто думал по-другому он не виноват. следующая версия показала что автор признал неправоту.
В целом ситуация когда следующая версия может не прочитать то что сохранила предыдущая - восхищает.
с другой стороны библиотека работает да и код получается нормальный - т.ч. думайте сами.
ASN действительно слишком запутанная штука и компиляторы стоят дорого. Неплохо бы посмотреть на Google Protocols.
PS: Мирослав, с какой это радости совместимость должна рассыпаться в версии X+1???? Она как раз не должна. В этом-то и заключается цимес нормальных методов сериализации.
Использовал буст более чем в 10и проектах, в том числе и сериализацию. Проблемы были, но связаны они были больше с моим недопониманием, чем с проблемой в самом бусте. Буст - это круто.
Отправить комментарий