Re:Show HN: Molecule – Streaming, zero-allocation protobuf d...
by richieartoul on Sunday March 29, 2020 @08:50PM
(#22724215)
Yeah thats a good point. The use-case I wrote this for involved decoding a protobuf message that has only 3 fields, but where the total size is several MiB. For my workload this optimization is meaningless, the most important thing is to avoid allocating huge slices, but for lots of small protobufs like the one you defined a hand-rolled solution will definitely be faster.
Do you think I could just manually inline the decoding code as much as possible in the molecule library, or does it need a different API?
Also if you open a P.R I'll merge it :)
Re:Show HN: Molecule – Streaming, zero-allocation protobuf d...
by thedance on Sunday March 29, 2020 @08:54PM
(#22724235)
Heh OK, see my other post for the simplest possible improvement.
Re:Show HN: Molecule – Streaming, zero-allocation protobuf d...
by thedance on Sunday March 29, 2020 @08:49PM
(#22724210)
Example: hoisting the condition `if buf[i] < 0x80 ...` out of DecodeVarint into DecodeTagAndWireType speeds up the included microbenchmark by over 10% on my machine, just because it eliminates the function call for tags 1-15 (these are the magical tags, if you are using protobufs in a performance-sensitive context).
If your use case is really simple, and you want the fastest possible proto decoding, you can hand-roll it pretty easy.
Then your code is structured such as Improve the exception hardness of this code to the extent that it suits your use case.