Простая в использовании расширяемая сериализация / маршаллинг?

У меня вопрос о сериализации структур данных. Существует множество возможностей для сериализации структур данных (также называемых маршалингом или дефляцией , см. вики-статью ). Кажется, что каждый язык программирования, фреймворк, стандарт или библиотека привносят с собой свои собственные методы сериализации. Многие также определяют свой собственный язык описания данных / интерфейса (который я предпочитаю зависимой от языка структуре данных, определенной только внутри кода). Просто чтобы назвать несколько (см. вики-статью ): COM IDL, CORBA IDL, Thrift IDL, буфер протокола Google «.proto», XSD, ASN.1 IDL и так далее. Некоторые из этих сериализаций могут генерировать структуру данных языка и код для сериализации и десериализации этих структур.

Я провел некоторое исследование по этой теме, но я все еще не определился. Итак, мой вопрос: Какую сериализацию мне следует использовать?

Мои требования : расширяемость , эффективное использование пространства (по крайней мере, двоичное), эффективный доступ к данным, простота использования (возможно, с сгенерированным кодом и геттером и сеттеры) и c ++ - совместимость.

Расширяемость должна обеспечивать прямую и обратную совместимость . Чтобы быть более конкретным, часто форматы данных, которые я пишу, со временем будут расти, потому что я добавляю новые поля данных, которые я не мог предвидеть в начале разработки. Теперь я хотел бы иметь возможность читать сохраненные данные из устаревшего формата с более новой версией программного обеспечения, поля данных, не найденные в старых сохраненных данных, могут быть заполнены значениями по умолчанию или чем-то еще. С другой стороны, я хотел бы иметь возможность читать данные, записанные с новым описанием. У него есть действительно приятные функции, документация очень хорошая, и синтаксис кажется довольно простым. Возможно, я немного придирчив, но есть некоторые вещи, которые мне не нравятся: я не понимаю, как он может справиться с прямой совместимостью (см. 4 ). Я бы предпочел сгенерированный код.

2) google protobuf, кажется, лучше соответствует моим потребностям, но я не вникал в их глубину. Похоже, они хорошо справляются с прямой и обратной совместимостью (см. 5 ). У них есть генераторы кода для разных языков, и разработчики знают об очень похожих концепциях, например (см. FAQ ). Я более подробно изучу protobufs.

3) Похоже, что дух ускорения не то, что я ищу.

6
задан Metaprogger 25 February 2011 в 22:23
поделиться