L'équipe Google "Fun Propulsion Labs" a récemment libéré les sources de FlatBuffers. Construit spécifiquement pour supporter les besoins en performance des développeurs de jeux, FlatBuffers stocke des données sérialisées dans des buffers qui peuvent être soit stockés dans des fichiers ou transférés tels quels sur le réseau, sans coût additionnel de parsing.
Quelques fonctionnalités clés de FlatBuffers :
- Accès à la donnée sérialisée sans empaquetage/dépaquetage
- Efficacité mémoire et vitesse - la seule mémoire requise pour accéder aux données est celle du buffer ; 0 mémoire additionnelle requise
- Flexibilité - compatibilité ascendante et descendante via les champs optionnels
- Empreinte de code minuscule
- Fortement Typé - erreurs détectées à la compilation plutôt qu'à l'exécution
- Pratique - code succint via en-têtes C++ générées. Fonctionnalité optionnelle pour parser des schémas et représentations proches du JSON à l'exécution de manière efficace si besoin (plus rapide et efficace d'un point de vue mémoire que d'autres parsers JSON)
L'avantage de FlatBuffers par rapport à des solutions alternatives comme Protocol Buffers ou du parsing de JSON, c'est qu'il y a moins de coûts additionnels en amont, tout spécialement parce qu'il n'y a pas de parsing.
Utiliser les FlatBuffers en C++ implique les étapes suivantes :
- Créer un fichier de schéma utilisant la DSL spécifiée
- Utiliser le compilateur de schéma pour générer les fichiers d'en-tête C++
- Inclure le fichier d'en-tête généré dans votre programme (nécessite aussi d'avoir le fichier flatbuffers/flatbuffers.h dans votre path)
- Lire et écrire les données en utilisant la classe FlatBufferBuilder (qui construit un flatbuffer binaire)
Il existe encore quelques petits points moins bien polis, comme il est visible dans les discussions passées sur le groupe de discussion. Le support pour Java est aussi expérimental pour le moment. Le support C# est l'une des requêtes les plus populaires, et pourrait faire son apparition dans la prochaine release.
Vous pouvez en apprendre plus sur les FlatBuffers en vous référant à la documentation.
Un autre projet qui évite les étapes d'encodage/décodage pour obtenir des bénéfices en performance et qui vaut le coup d'oeil est Cap'n Proto.