SBE got a little press today and I finally looked at it myself.
In certain narrow use cases, it may work OK and be slightly faster than Cap'n Proto. However, that speed comes with some significant functionality costs:
1) There is no bounds checking at all, at least in the C++ bindings. Reading a message you don't trust can trivially crash you, or perhaps even perform a heartbleed-like attack by tricking you into reading data past the end of the message. Being able to accept untrusted inputs clearly wasn't a design goal for them, which is fair enough for many use cases.
Cap'n Proto is intended to be secure, although it has not yet received a formal security review.
2) The schemas are XML. Compare this:
To this:
(Note that these schemas don't represent the same thing. It seems we both coincidentally chose car descriptions as a benchmark subject.)
3) You can _only_ read and write data sequentially. If your message contains lists, there is potentially no way to know where a particular entry in the list is located until you've processed all the data before it, because list entries can have nested lists and thus are variable-width. The (C++) API doesn't even appear to give you a way to seek backwards to items you've seen previously. (Actually, it looks like the API makes it quite easy to shoot yourself in the foot by accessing things in the wrong order. If your message contains two lists "cats" and "dogs", there's nothing stopping you from accidentally calling the dogs() accessor first and getting garbage out.)
They seem to describe this as a feature, pointing out that sequential access is faster. Sure, but sometimes the thing you want to do just isn't sequential. Sometimes you want to pull one data point out of the middle of a large structure. Sometimes you want to reference entries in some list by index. Sometimes you want a hash table. It looks like all these things are pretty inconvenient in SBE.
In fact, requiring sequential access defeats one of the biggest advantages of using this sort of CPU-friendly encoding in the first place: the ability to mmap() a huge data structure wholesale and just use it without doing a pass over the content.
In contrast, Cap'n Proto uses pointers to enable random access, just like regular in-memory data structures normally do.