Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I’ve been using CapnProto, and while I like it, it certainly has a small community, and support can suffer due to that. I haven’t tried it, but have heard good thing about flatbuffers, and would def give that a second look if I were to make the decision again.


For me the clinchers over flatbuffers are:

- No need to build messages 'inside out' / leaves first to get zero copy behaviour. This is huge.

- Fully functional RPC implementation with really interesting latency hiding behaviour via asynchronous promises. It's got most of what I want from gRPC without the horrid googlisms and dependencies.

- CapnProto has a canonical encoding, which makes it suitable for hashing and comparison.

- It has a packed encoding, whereas with Flatbuffers you're going to have to compress with a more hardcore codec like zlib.

- CapnProto supports runtime reflection via a dynamic API. This is useful in cases where you really need it, like when creating generic bindings for dynamically typed languages or use cases. Like protobufs it has a "lite" mode to opt out of this.

- CapnProto JSON support in the library is better, probably due to the above.

Major cons:

- Ugly schema format.

- Not header only (I've not tested whethwr or not there is a positive here with respect to build times)

- The "kj" support library is a bit of a pain in the ass, refusing to use common C++ vocabulary types like string_view or support common STL data structures like vectors or strings. Writing a message in to a std::vector for instance will require a specialization of an interface.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: