Remix.run Logo
usrnm 6 days ago

Cap'n'proto is not very nice to work with in C++, and I'd discourage anyone from using it from other programming languages, the implementations are just not there yet. We use both cnp and protobufs at work, and I vastly prefer protobufs, even for C++. I only wish they stayed the hell away from abseil, though.

yencabulator 4 days ago | parent | next [-]

The developer experience of capnproto is pretty darn miserable. I replaced my Rust use of it with https://rkyv.org/ -- probably the biggest ergonomic improvement was a single validation after which the message is safe to look at, instead of errors on every code path. The biggest downside was loss of built-in per-message schema evolution; in my use case I can have one version number up front.

porridgeraisin 6 days ago | parent | prev [-]

I always thought people had a positive view on abseil, never used it myself other than when tinkering on random projects. What's the main issue?

usrnm 6 days ago | parent [-]

The thing is a huge pain to manage as a dependency, especially if you wander away from the official google-approved way of doing things. Protobuf went from a breeze to use to the single most common source of build issues in our cross-platform project the moment they added this dependency. It's so bad that many distros and package managers keep the pre-abseil version as a separate package, and many just prefer to get stuck with it rather than upgrade. Same with other google libraries that added abseil as a dependency, as far as I'm aware

mkoubaa 6 days ago | parent | next [-]

I'd rather they just used the abseil headers they needed with the abseil license at the top than make it a build dependency.

The concept of a package is antithetical to C++ and no amount of tooling can fix that.

usrnm 6 days ago | parent [-]

abseil is not header-only, though

mkoubaa 4 days ago | parent [-]

Skill issue

jjmarr 6 days ago | parent | prev [-]

I like abseil besides the compile times. Not having to specialize my own hash when using maps is nice.