title: Thrift vs Protocol buffers
body: <p>I've been using PB for quite a while now, but, Thrift has constantly been at the back of my mind.</p>
  
  <p>The primary advantages of thrift, as I see it are:</p>
  
  <ol>
  <li>Native collections (i.e, vector, set etc) vs PBs repeated providing functionality similar to, but not quite like (no iterators unless you dig into RepeatedField which the documentation states "shouldn't be required in most cases").</li>
  <li>A decent RPC implementation provided, instead of just hooks to plug your own in.</li>
  <li>More officially supported languages (PB offers "official" support for Java, C++, Python)</li>
  </ol>
  
  <p>The cons of Thrift:</p>
  
  <ol>
  <li>The RPC implementation means I can't plug in my own (for example) encryption/authentication layer on top.</li>
  <li>Windows support doesn't seem to be great.</li>
  <li>PB definitely seems to have, if not better, more accessible documentation.</li>
  </ol>
  
  <p>Neutral:</p>
  
  <ul>
  <li>Unknown size of .lib/.dll on Windows (Thrift).</li>
  <li>Large size of .lib on Windows (PB, but it does offer a -lite which is significantly smaller).</li>
  <li>Speed wise, they both seem to be similar.</li>
  </ul>
  
  <p>I'm not quite ready to take the plunge and switch to Thrift yet, can anyone offer me more pros/cons, or reasons to go one way or the other?</p>
  
  <p>Thanks!</p>