<story><title>Protocol Buffers, Avro, Thrift &amp; MessagePack</title><url>http://www.igvita.com/2011/08/01/protocol-buffers-avro-thrift-messagepack/</url></story><parent_chain></parent_chain><comment><author>hesdeadjim</author><text>I work at an indie game shop and I have pushed us to use it (almost) everywhere we need to define a file format. Originally we were using JSON for everything, which is great for the quick and dirty approach -- but as our code base (primarily C++) has grown I absolutely love the guarantees I get with protobufs:&lt;p&gt;- Strongly typed, no boilerplate error checking if someone set my &quot;foo&quot; field on my object to an integer instead of a string&lt;p&gt;- Easy to version and upgrade, just create new fields, deprecate the old ones, and move on with life.&lt;p&gt;- Protobuf IDLs are the documentation and implementation of my file format -- no docs to write about what fields belong in what object and no issues with out of sync documentation/code.&lt;p&gt;- Reflection support, don&apos;t use this a lot, but when I need it it&apos;s awesome.&lt;p&gt;- Variety of storage options. For instance the level editor I wrote recently uses the human-readable text format when it saves out levels. But when I am ready to ship, I can trivially convert these level files to binary and immediately improve the performance of my app.&lt;p&gt;- Tons of language bindings. Our engine code base is C++, but any build scripts I write are done in Python and if my script needs to touch protobuf files I don&apos;t have to rewrite my file parsing routines -- it just works.&lt;p&gt;I looked into using Apache Thrift as well, but their text-based format is not human readable so it was a non-starter for us.</text></comment>
<story><title>Protocol Buffers, Avro, Thrift &amp; MessagePack</title><url>http://www.igvita.com/2011/08/01/protocol-buffers-avro-thrift-messagepack/</url></story><parent_chain></parent_chain><comment><author>mikeklaas</author><text>&amp;#62; (Word of warning: historically, Thrift has not been consistent in their feature support and performance across all the languages, so do some research).&lt;p&gt;Conversely, we chose Thrift over protobuf for this reason.  Protobuf&apos;s python performance was &lt;i&gt;abysmal&lt;/i&gt; — over 10x worse than Thrift.</text></comment>