HN Hall of Fame Weekly email

Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C

blog.reverberate.org Essays & writing Essays & articles Software engineering Class of 2024-08 Hall of Fame
Screenshot of blog.reverberate.org captured 2026-07-20
Page preview · captured 2026-07-20

Resurfaced independently across 4 calendar years, with breakout response in 2 of them.

submissions
6
submitters
6
observed span
2021–2024
peak thread · 190 comments
586 pts
latest 20+ return · 2024-08-19
366 pts

Submission timeline

2007–2026

One slot for every year since HN launched. Height is that year's peak points; orange marks a 100+ point or 50+ comment breakout. Select a bar to open its strongest thread.

First comments on top threads

HN comment order

A very interesting trick! In my opinion, the big takeaway here is that if you are willing to write your C code in tail call style, you can get a lot of control over which variables are stored in machine registers. In the x86-64 ABI, the first 6 function parameters are guaranteed to be passed via registers. Obviously, this is architecture-specific. Other architectures may use a different calling convention that ruins this kind of manual register allocation. I'd imagine that…

ufo·586-point thread·

A C standard proposal exists for tail call [0], in the form of "return goto (expression);". What I like about it, over standardizing [[musttail]], is that lifetimes of local objects are guaranteed to end. This makes it possible to implement without extensive escape analysis. [0] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3266.htm#5...

fuhsnn·366-point thread·

The first top-level comment from each of the four biggest threads, in HN’s own order. Excerpts are shortened; open a comment for full context.

Breakout years
2

100+ points or 50+ comments

Total points
966

reference only — not used in Hall rules or ranking

Total comments
350

reference only — not used in Hall rules or ranking

Every submission