Tengo una pregunta sobre serializaton de estructuras de datos. Hay muchas posibilidades para la serialización de estructuras de datos (también llamado clasificación o deflactando, ver wiki-article). Cada lenguaje de programación, framework, estándar o biblioteca parece traer sus propios métodos de serialización. Muchos también definen su propio lenguaje de descripción de datos/interfaz (que prefiero al idioma depende de la estructura de datos definida solo dentro del código). Solo por nombrar algunos (consulte wiki-article): COM IDL, CORBA IDL, IDL de ahorro, búfer de protocolo de Google ".proto", XSD, ASN.1 IDL, y así sucesivamente. Algunas de estas serializaciones pueden generar código de estructura y datos nativos del lenguaje para serializar y deserializar estas estructuras.Fácil de usar serialización extensible/clasificación?
Hice algunas investigaciones sobre este tema, pero todavía estoy indeciso. Entonces mi pregunta es: ¿Qué serialización debo usar?
Mis requisitos: extensibilidad, la eficiencia del espacio (al menos binario), acceso eficiente a los datos, la facilidad de usar (posiblemente con código generado y getter y setters) y C++ - compability.
La extensibilidad debe proporcionar compatibilidad hacia delante y hacia atrás. Para ser más específico, a menudo los formatos de datos que escribo crecerán con el tiempo, porque agrego nuevos campos de datos, que no pude prever al comienzo del desarrollo. Ahora me gustaría poder leer los datos almacenados de un formato desactualizado con una versión de software más nueva, los campos de datos que no se encuentran en los datos almacenados antiguos podrían llenarse con valores predeterminados o algo así. Por otro lado, me gustaría poder leer los datos escritos con la nueva descripción. El software compilado con la descripción de datos "anterior" debe ignorar el campo de datos desconocido (quizás generando alguna advertencia).
¿Alguna recomendación? También se agradecerían las recomendaciones sobre otras lecturas sobre ese tema.
--- --- Editar
1) impulso :: serialización parece ser bastante popular. Tiene algunas características muy agradables, la documentación es muy buena, y la sintaxis parece ser bastante directa. Tal vez soy un poco exigente, pero hay algunas cosas que no me gustan: no veo cómo podría manejar la compatibilidad futura (ver 4). Prefiero el código generado.
2) Google protobuf parece encajar mejor en mis necesidades, pero no he investigado su profundidad. Parecen manejar bien la compatibilidad hacia adelante y hacia atrás (ver 5). Tienen generadores de código para diferentes idiomas, y los desarrolladores conocen conceptos similares (ver FAQ). Voy a echar un vistazo más profundo a los protobufs.
3) impulso espíritu no parece ser lo que busco.
Sí, la compatibilidad con versiones anteriores lamentablemente no existe en boost :: serialization. Además, experimenté algunas pequeñas diferencias en los archivos XML generados en Mac y PC en una versión anterior de boost :: serialization, por lo que también existen dudas sobre la compatibilidad perfecta con ese formato. Indagar en Protobuf suena como la mejor idea, diga en qué dirección fue. –