Cap'n Proto
m (Added comma) |
m ("either" -> "easier") |
||
Line 11: | Line 11: | ||
== Segments == | == Segments == | ||
− | Cap'n Proto messages are generally divided into several units called "segments" in order to make construction of the message | + | Cap'n Proto messages are generally divided into several units called "segments" in order to make construction of the message easier.<ref>https://capnproto.org/encoding.html#messages</ref> Messages using segments begin with a "segment table"<ref>https://capnproto.org/encoding.html#serialization-over-a-stream; name is from https://capnproto.org/encoding.html#canonicalization</ref> and then the content of those segments. It is possible to write a "flat" message that takes up a single segment, however, the help text of the CLI calls this "rare". |
== Packing == | == Packing == |
Latest revision as of 06:26, 29 May 2019
Cap'n Proto is a serialization format and RPC system meant to be an improved version of Protocol Buffers, written by the same author[2]. Its major claimed advantage over Protocol Buffers is fast serialization and very fast deserialization; parsing is done lazily and much more simply than in Protocol Buffers, mostly amounting to a small amount of bounds-checking. Compare Simple Binary Encoding and FlatBuffers in this regard.
Contents |
[edit] Extensions
Cap'n Proto schema files have the extension ".capnp"[3]. It is not clear what, if any, extensions may be in use for the serialized format.
[edit] Segments
Cap'n Proto messages are generally divided into several units called "segments" in order to make construction of the message easier.[4] Messages using segments begin with a "segment table"[5] and then the content of those segments. It is possible to write a "flat" message that takes up a single segment, however, the help text of the CLI calls this "rare".
[edit] Packing
Cap'n Proto defines a very simple compression format called the "packing" format, which is essentially a variant of run-length encoding that only encode runs of bytes with value 0x00. This is especially useful because Cap'n Proto does not leave out zero-valued fields[6][7], and so without packing, messages may consist of long runs of zero bytes for the values of uninitialized fields. Packing can in many cases significantly reduce file size. See [1] for details on the format.
[edit] Canonical Form
"Canonicalized" messages are those belonging to a well-defined subset of the regular message format. Where packing is used on canonicalized messages, it is taken as a container rather than as part of the format (unlike for non-canonicalized messages). See [2] for a specification.
[edit] Software
- Official library
- Includes a CLI capable of dumping, converting, etc. messages
- Debian packages capnproto, libcapnp-*
- List at [3]
[edit] Links
- Official website
- Show HN: Cap'n Proto, by the ex-maintainer of Protocol Buffers
- Hacker news: Cap’n Proto
- What's the difference between the Protocol Buffers and the Flatbuffers?
[edit] References
- ↑ https://capnproto.org/news/2013-04-01-announcing-capn-proto.html
- ↑ https://capnproto.org/index.html, section "Why do you pick on Protocol Buffers so much?"
- ↑ https://capnproto.org/language.html
- ↑ https://capnproto.org/encoding.html#messages
- ↑ https://capnproto.org/encoding.html#serialization-over-a-stream; name is from https://capnproto.org/encoding.html#canonicalization
- ↑ https://capnproto.org/encoding.html#structs, and the fact that fast pointer access requires this to be true
- ↑ https://capnproto.org/news/2014-06-17-capnproto-flatbuffers-sbe.html