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

Критика boost::serialize

boost::serialization hell - эмоциональный пост про проблемы, возникающие при использовании boost::serialize.
Будет полезно тем, кому в проекте нужна сериализация и кто рассматривает boost::serialize как один из вариантов.

13 коммент.:

asfdfdfd комментирует...

Ох уж этот буст.

Заметка не то чтобы сильно удивительная, честно говоря. Вот если бы он написал что boost::serialize это очень круто, то тогда это была бы бомба!

Пожалуй, кому-нибудь стоит написать книгу про то в каких случаях буст стоит использовать. :-D

soonts комментирует...

Весьма типичная история про OpenSource технологии.

Про сериализацию - реклмендую например Binary XML.

Myroslav Rubanets комментирует...

классическая ошибка - путать сериализацию и протокол общения в гетерогенной среде. Сериализация (любая хоть даже от mfc) дает байты как оно в бинарнике версии X. Разумеется оно рассыпается уже в версии X+1. Ну и "а буст не умеет все сам" месадж из того поста намекает на опыт и/или его отсутствие :)

Alex Ott комментирует...

boost::serialize удобно использовать для хранения данных локальных для данной машины/версии. Я бы не выбрал его для общения между нодами, особенно если другие ноды используют другие языки программирования. Давно есть thrift, google protobuf и еще пачка отлаженных мульти-языковых технологий

R комментирует...

Спасибо, пост пришёлся очень в тему :) Не ожидал, что в бусте могли допустить несовместимость между минорными версиями...
Кстати, библиотеку сериализации я бы стал обновлять в последнюю очередь - чему там обновляться? Заморозить версию да и всё. Ну а если буст не позволяет обновить другие библиотеки не затронув сериализацию, то явно лучше что-то другое использовать.

Andrey комментирует...

Тормозит он очень.

Анонимный комментирует...

boost слишком сложная либа, лучше его не юзать

Alex Ott комментирует...

boost - это набор библиотек, самых разных - сложных и простых... Нельзя говорить о нем в единственном лице...
P.S. boost делает разработку на С++ более/менее приемлимой, особенно в начальной стадии проекта

Анонимный комментирует...

Рекомендую ознакомиться с Abstract Syntax Notation 1 (ASN.1) - язык описания структур данных, конечной целью которого является, в сущности, сериализация/десериализация.
Плюсы:
1. Стандарт ITU-T
2. Не привязан к конкретному языку программирования, но существуют трансляторы описаний структур данных ASN.1 в структуры данных и процедуры сериализации/десериализации для массы ЯП (С, С++, Java, ...)
3. Существует несколько правил кодирования (сериализации, encoding rules), оптимизированных под производительность/размер получаемых данных/...

ASN.1 получил широкое распространение, например, телекоммуникационные протоколы.

sapien2 комментирует...

ASN.1 стадарт неплохой, но в последних редакциях чересчур всеохватный и комплексный. Более того, его использование подразумевает наличие компилятора, генерирующего код на целевом языке для кодирования и декодирования структур. А серьезные ASN.1 компиляторы ориентированы на рынок телекомов и стоят сумасшедшие деньги. А лучший из бесплатных - asn1c - генерирует код только для простого С.

Анонимный комментирует...

Эмоции блоггера понятны (у меня были похожие) - автор библиотеки на самом деле не совсем адекватный человек (ну или такое впечатление он создает).

Как-то автор взял и стал сохранять версии объектов как 1 байт, хотя везде тип версии был обозначен как unsigned int. После того как со сменой буста все перестало работать пошел гуглить.
Сейчас уже не приведу урл, но автор упорно говорил что это не баг а так и должно быть - он где-то в доках писал что версия должна помещаться в один байт, ну а кто думал по-другому он не виноват. следующая версия показала что автор признал неправоту.
В целом ситуация когда следующая версия может не прочитать то что сохранила предыдущая - восхищает.
с другой стороны библиотека работает да и код получается нормальный - т.ч. думайте сами.

LB комментирует...

ASN действительно слишком запутанная штука и компиляторы стоят дорого. Неплохо бы посмотреть на Google Protocols.
PS: Мирослав, с какой это радости совместимость должна рассыпаться в версии X+1???? Она как раз не должна. В этом-то и заключается цимес нормальных методов сериализации.

Анонимный комментирует...

Использовал буст более чем в 10и проектах, в том числе и сериализацию. Проблемы были, но связаны они были больше с моим недопониманием, чем с проблемой в самом бусте. Буст - это круто.