tag:blogger.com,1999:blog-3179964835593137794.post9133142652960566876..comments2022-04-09T14:53:02.942+03:00Comments on Распутывая нити: boost::serialization hellAndrey Valyaevhttp://www.blogger.com/profile/05020625213099509709noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-3179964835593137794.post-35276638440895401462011-03-07T05:46:19.111+03:002011-03-07T05:46:19.111+03:00В таких делах нужно сначала строго специфицировать...В таких делах нужно сначала строго специфицировать формат данных (или взят готовый типа ASN.1, InfoSet и т.п.), а потом уже кидаться за написание библиотеки сериализации. Это было одной из причин из за чего boost::serialization был отвергнут почти сразу.Anonymoushttps://www.blogger.com/profile/00079330706099573036noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-11836970633403411862011-02-28T18:38:01.126+03:002011-02-28T18:38:01.126+03:00Если взять упомянутый выше QDataStream, то не совс...<i>Если взять упомянутый выше QDataStream, то не совсем понятно, как можно сериализовать какой-то свой не-QObject-ный тип.</i><br /><br />Чтобы сериализовать свои типы от QObject наследоваться не нужно.<br /><br /><br /><i>"Хочешь пользоваться ею [Qt] -- играй по её правилам"</i><br /><br />Дело не в правилах, а конкретной проблеме. В Qt описанная проблема отсутствует.<br /><br /><i>Давайте не будет делить ПО на две категории "нормальное" и "то, которое я использовал один раз, оно мне не понравилось, потому что там всплывают косяки и я не знаю, что с ними делать, потому что последние N лет имел дело с другими косяками".</i><br /><br />Если косяки всплывают НЕ только у меня, то это уже паталогия, а паталогия это ненормально. Так что можно и поделить ;)Unknownhttps://www.blogger.com/profile/00585809311183470478noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-85100675968512485592011-02-28T10:12:22.815+03:002011-02-28T10:12:22.815+03:00Kirikaza:
it has been discovered that binary archi...Kirikaza:<br /><i>it has been discovered that binary archives created by versions 1.42-1.44 cannot always be read by the recent binary archive code. ... As of this writing, it is not known whether all binary archives created with these versions can be loaded»</i><br /><br />Реально получилось так, что версия 1.45 не смогла распарсить архив, созданный версией 1.35. Какая-то заморочка с binary_object, не стал тратить много времени. 1.46 нормально заработала.<br /><br />То есть вполне реальна ситуация, что данные от прошлой версии не смогут быть прочитаны. Такая возможность - напрягает...Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-74062859005746868392011-02-27T19:36:32.140+03:002011-02-27T19:36:32.140+03:00Евгений, нам нет смысла изобретать велосипед. Лучш...Евгений, нам нет смысла изобретать велосипед. Лучше выбрать что нибудь готовое. Вообще все велосипеды из проекта надо искоренять. :) Там их и без того много.<br /><br />tt2507, застабилизировать boost навсегда - это всеравно что не пользоваться им вообще. Там постоянно появляется что-то новое и интересное. Обидно. :)<br /><br />Застабилизировать serialization можно, отчасти. Он завязан на остальные возможности boost. У нас сейчас для совместимости есть serialization 1.35, пока вроде работает, но с очередной версией буста может и перестать работать.<br /><br />Спасибо всем за мощный фидбек, есть много материалов для размышления и исследования. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-54546596724226023772011-02-27T04:37:22.203+03:002011-02-27T04:37:22.203+03:00Надо было делать свою прослойку между вашим кодом ...Надо было делать свою прослойку между вашим кодом и "boost::serialization hell") чтобы не было проблем.Vladimirhttps://www.blogger.com/profile/00724274353659963129noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-20352182526002078842011-02-26T19:19:10.514+03:002011-02-26T19:19:10.514+03:00Зачем обновлять библиотеку сериализации? Там что-т...Зачем обновлять библиотеку сериализации? Там что-то меняется? Почему нельзя её просто заморозить навсегда, и по крайней мере не волноваться о совместимости между версиями библиотеки?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-8004246454213277632011-02-26T16:13:34.801+03:002011-02-26T16:13:34.801+03:00Мои 5+ копеек.
[1]
«написано что версии 1.42,1.4...Мои 5+ копеек.<br /><br />[1]<br /><br /><i>«написано что версии 1.42,1.43,1.44 содержали ошибку, и отныне считаются некошерными. Вплоть до того что архивы указанных версий не прочитаются на текущей. Это же жесть! Тестировать то не пробовал его никто?»</i><br /><br />А теперь процитирую оригинал:<br /><br /><i>«it has been discovered that binary archives created by versions 1.42-1.44 cannot always be read by the recent binary archive code. Work has proceeded in detecting the source of these anomolies and those which have been reported with test cases have been fixed. As of this writing, it is not known whether all binary archives created with these versions can be loaded»</i><br /><br />Дабы не вводить никого в заблуждение.<br /><br />[2]<br /><br /><i>«в нормальных библиотеках (в классах сериализации) предусмотрена обратная совместимость путём указывания версии: http://doc.qt.nokia.com/latest/qdatastream.html»</i><br /><br />Давайте не будет делить ПО на две категории "нормальное" и "то, которое я использовал один раз, оно мне не понравилось, потому что там всплывают косяки и я не знаю, что с ними делать, потому что последние N лет имел дело с другими косяками".<br /><br />[3]<br /><br />Qt -- монолитная, цельная платформа. Хочешь пользоваться ею -- играй по её правилам. Если взять упомянутый выше QDataStream, то не совсем понятно, как можно сериализовать какой-то свой не-QObject-ный тип. Поклонник Qt тут же скажет: "А в чём проблема? Ну наследуй QObject, вот беда". Противник тут же возопит: "И что, я всё и вся должен отнаследовать от QObject?!" Постараюсь сохранитить нейтральность и процитирую себя: "Хочешь пользоваться ею [Qt] -- играй по её правилам". Кого-то это устраивает, а кого-то -- нет.<br /><br />[4]<br /><br />boost::serialization -- небольшая библиотека. Она поддерживается небольшой группой лиц и не слишком распространена, отчего баги находятся медленно. Но если разработчик предпочёл её, значит, он так решил, т.е. взял на себя ответственность и смелость с ней возиться. (Если вы решили изучать хинди, то индийцы не виноваты, что в вашем городе нет преподавателя этого языка.)<br />С другой стороны, boost::serialization не навязывает своих правил, позволяя расширение в практически любом направлении и предоставляя различные варианты использования: с RTTI или без, с автомагической или ручной регистрацией типов, с расширением класса или с введением внешней функции.<br />Так что выбор остаётся за разработчиком, будет ли он писать свою реализацию архива (как предлагал(а) Oliora)<br /><br />[5]<br /><br />Thrift обязывает использовать явное описание передаваемых данных. С одной стороны, лишняя писанина, с другой -- всё понятно и однозначно, даже когда на разных сторонах различные языки.<br /><br />[5+]<br /><br />Извините, что так длинноKirikazahttps://www.blogger.com/profile/14668567652959341624noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-71997680418118655922011-02-26T15:17:01.821+03:002011-02-26T15:17:01.821+03:00Позволю себе прорекламировать себя самого. Когда-т...Позволю себе прорекламировать себя самого. Когда-то давно, когда boost::serialization был еще в зародыше, мне пришлось озадачиться проблемой версий. Из чего получилось <a href="http://eao197.narod.ru/objessty/html/oess_1_2_0__extensible_types.html" rel="nofollow">вот это</a> и <a href="http://eao197.narod.ru/objessty/html/oess_1_2_0__unknown_extension.html" rel="nofollow">вот это</a>.<br /><br />В качестве альтернативы Google Protobuf можно посмотреть еще и <a href="http://incubator.apache.org/projects/thrift.html" rel="nofollow">Thrift</a>, он родом из Facebook, кажется.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-15794840677820751482011-02-26T13:11:30.507+03:002011-02-26T13:11:30.507+03:00evlad: в нормальных библиотеках (в классах сериали...evlad: в нормальных библиотеках (в классах сериализации) предусмотрена обратная совместимость путём указывания версии: http://doc.qt.nokia.com/latest/qdatastream.htmlUnknownhttps://www.blogger.com/profile/00585809311183470478noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-29415827444346646292011-02-26T11:53:01.328+03:002011-02-26T11:53:01.328+03:00Систему, связанную с долговременным хранением чего...Систему, связанную с долговременным хранением чего-либо, можно делать только с явным формированием потока записи и чтением из него. Любые попытки сделать что-то на этом поприще неявно обязательно содержат закопанные грабли. Так что, boost, в сущности, не виноват.evladhttps://www.blogger.com/profile/04392145707520142999noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-82883097682707673602011-02-26T01:13:58.717+03:002011-02-26T01:13:58.717+03:00можно же взять текстовый архив и тогда проблем с с...можно же взять текстовый архив и тогда проблем с совместимостью резко поубавится. как вариант, написать свой архив - это не сложно. мы, в свое время, json-архив прикрутили дней за 5.<br />кстати, если будете смотреть замены, то поглядите на apache thrift и apache etch. а если продукт open-source, то еще на zeroc ice. не одним google-buffers интернет богат :)Oliorahttps://www.blogger.com/profile/07565895578713734995noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-63297127697232867462011-02-26T00:53:18.902+03:002011-02-26T00:53:18.902+03:00Используйте протокольные буфера, даже если вам нуж...Используйте протокольные буфера, даже если вам нужна скорость. На них весь Гугл стоит.Maksym Motornyyhttps://www.blogger.com/profile/10897433874042751198noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-9413946762498021752011-02-25T23:39:51.381+03:002011-02-25T23:39:51.381+03:00а нам запретили пользоваться сериализацией. только...а нам запретили пользоваться сериализацией. только БД.alexphttps://www.blogger.com/profile/13006036756399321809noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-58762057528057339632011-02-25T18:09:36.880+03:002011-02-25T18:09:36.880+03:00Надо будет поглядеть и на него.
Хотя я так понял ...Надо будет поглядеть и на него.<br /><br />Хотя я так понял основное у него - скорость. Нам скорость не очень нужна. У нас управляющий трафик.Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-78976795020809605832011-02-25T17:40:45.351+03:002011-02-25T17:40:45.351+03:00Мы у себя используем msgpack.Мы у себя используем msgpack.Qehgthttps://www.blogger.com/profile/13293619483296242978noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-56147028005530321682011-02-25T11:26:21.109+03:002011-02-25T11:26:21.109+03:00Думаем на эту тему... В том смысле, что protocol b...Думаем на эту тему... В том смысле, что protocol buffers наверное лучший вариант. Кроме совместимости - он еще и другими языками хорошо поддерживается.<br /><br />boost::serialize из под питона например заюзать - можно наверное, но задача не для слабонервных... :)<br /><br />Но, как уже писал выше, код старый. Там все сильно запутано. Сперва надо распутать, но только не уверен что мы успеем сделать это до выпуска очередной версии (полгода примерно осталось)... Со временем обязательно распутаем и применим что нибудь нормально совместимое по версиям. :)Andrey Valyaevhttps://www.blogger.com/profile/05020625213099509709noreply@blogger.comtag:blogger.com,1999:blog-3179964835593137794.post-69132229158457250022011-02-25T11:16:31.179+03:002011-02-25T11:16:31.179+03:00и что же думаете с этим делать?
Google protocol bu...и что же думаете с этим делать?<br />Google protocol buffers?Сергейhttps://www.blogger.com/profile/10973621537470546724noreply@blogger.com