Top all-time · #579
Josh Haberman
Personal blog · blog.reverberate.orgprogrammingsystems
Josh Haberman's personal blog at blog.reverberate.org covers programming and systems. Since 2008, 105 different Hacker News readers have linked it 229 times, most often “Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C”. It is still writing: the last post was on 2025-02-10, and you can follow it by feed.
Sometimes recommended · 7 of 32 sampled comments recommend it?
Why HN links it
HN readers link Josh Haberman's blog for in-depth posts on parsing (LL/LR, why C++ parsing is undecidable), JIT compilation with DynASM, and related compiler and interpreter topics.
Summarised by Claude from a sample of 32 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Parsing, performance, and low-level programming.
Most-linked posts?
- Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C17 people · 30 mentions · first linked 2021-04-21
- Parsing C++ is literally undecidable (2013)10 people · 10 mentions · first linked 2013-08-28
- Hello JIT World: The Joy of Simple JITs (2012)8 people · 17 mentions · first linked 2013-01-01
- LL and LR in Context: Why Parsing Tools Are Hard (2013)8 people · 11 mentions · first linked 2013-09-06
- LL and LR Parsing Demystified (2013)6 people · 6 mentions · first linked 2013-07-22
- LL and LR Parsing Demystified (2013)5 people · 5 mentions · first linked 2023-08-29
- A tail calling interpreter for Python (already landed in CPython)5 people · 5 mentions · first linked 2025-02-17
- Bloaty McBloatface: a size profiler for binaries4 people · 6 mentions · first linked 2016-11-07
- /2013/08/parsing-c-is-literally-undecidable.html4 people · 4 mentions · first linked 2020-07-15
- No-Panic Rust: A Nice Technique for Systems Programming3 people · 5 mentions · first linked 2025-02-03
What Hacker News says?
The article describes that the new JIT is a "copy-and-patch JIT" (I've previously heard this called a "splat JIT"). This is a relatively simple JIT architecture where you have essentially pre-compiled blobs of machine code for each interpreter instruction that you patch immediate arguments into by copying over them. I once wrote an article about very simple JITs, and the first example in my article uses this style:…
Comment linking /2012/12/hello-jit-world-joy-of-simple-jits.html
on “Python 3.13 Gets a JIT”Submitted Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C as a story · 586 points
HN discussionhttps://blog.reverberate.org/2020/05/29/hoares-rebuttal-bubb...
Comment linking /2020/05/29/hoares-rebuttal-bubble-sorts-comeback.html
on “Back in 1993, I was taking a number theory class”Submitted Parsing protobuf at 2+GB/s: how I learned to love tail calls in C (2021) as a story · 366 points
HN discussionSee perhaps various "What every programmer / CSist should know about floating-point arithmetic" papers and articles: * David Goldberg, 1991: https://dl.acm.org/doi/10.1145/103162.103163 * 2014, "Floating Point Demystified, Part 1": https://blog.reverberate.org/2014/09/what-every-computer-pro... ; https://news.ycombinator.com/item?id=8321940 * 2015: https://www.phys.uconn.edu/~rozman/Courses/P2200_15F/downloa...
Comment linking /2014/09/what-every-computer-programmer-should.html
on “987654321 / 123456789”Submitted What every computer programmer should know about floating point, part 1 as a story · 323 points
HN discussionI wrote an article about my motivation for it: https://blog.reverberate.org/2021/04/21/musttail-efficient-i...
Comment linking /2021/04/21/musttail-efficient-interpreters.html
on “Tell HN: We are trying to get tail calls into the WebAssembly standard”Submitted LL and LR in Context: Why Parsing Tools Are Hard (2013) as a story · 222 points
HN discussionI think it's important to note that a primary motivation of the tail call interpreter design is to be less vulnerable to the whims of the optimizer. From my original blog article about this technique ( https://blog.reverberate.org/2021/04/21/musttail-efficient-i... ): > Theoretically, this control flow graph paired with a profile should give the compiler all of the information it needs to generate the most optimal c…
Comment linking /2021/04/21/musttail-efficient-interpreters.html
on “Performance of the Python 3.14 tail-call interpreter”Submitted No-Panic Rust: A Nice Technique for Systems Programming as a story · 204 points
HN discussionRelated discussions: https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-... --> https://news.ycombinator.com/item?id=42999672 (66 points | 25 days ago | 22 comments) https://blog.reverberate.org/2025/02/10/tail-call-updates.ht... --> https://news.ycombinator.com/item?id=43076088 (124 points | 18 days ago | 92 comments)
Comment linking /2025/02/10/tail-call-updates.html
on “Performance of the Python 3.14 tail-call interpreter”Submitted Bloaty McBloatface: a size profiler for binaries as a story · 202 points
HN discussionThis. The AT&T syntax for x86 thing is a huge mistake. All the official docs are Intel syntax. Intel syntax is easier to read and write. Half the gotchas in this article are problems that don't exist in Intel syntax, like the instruction suffixes. The instruction suffixes get even weirder when you get to the sign extending instructions. I wrote an article about this here: http://blog.reverberate.org/2009/07/giving-u…
Comment linking /2009/07/giving-up-on-at-style-assembler-syntax.html
on “Learning to Read X86 Assembly Language”Submitted LL and LR Parsing Demystified (2013) as a story · 155 points
HN discussionThat is true, but there is always https://rr-project.org for easy reverse debugging if you're having trouble figuring out where you came from. If the alternative is to drop to assembly, a C-based approach seems quite easy to debug. You can just add printf() statements! Previously when I had been using assembly language or a JIT, I had to resort to techniques like this: https://blog.reverberate.org/2013/06/printf-deb…
Comment linking /2013/06/printf-debugging-in-assembly-language.html
on “Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C”Submitted Thread Safety in C++ and Rust as a story · 147 points
HN discussionhttps://blog.reverberate.org/2021/04/21/musttail-efficient-i...
Comment linking /2021/04/21/musttail-efficient-interpreters.html
on “Building the fastest Lua interpreter automatically”Submitted Hoare’s Rebuttal and Bubble Sort’s Comeback as a story · 147 points
HN discussionIn similar vein: parsing C++ is literally undecidable: https://blog.reverberate.org/2013/08/parsing-c-is-literally-... You can't even decide if a particular "*" is multiplication or a pointer dereference until you resolve templates, which is Turing-complete.
Comment linking /2013/08/parsing-c-is-literally-undecidable.html
on “Perl code that is syntactically correct only on Fridays”Submitted A tail calling interpreter for Python (already landed in CPython) as a story · 124 points
HN discussionI like the "window/offset" concept. I wrote an extended blog article with yet different visual aids: http://blog.reverberate.org/2014/09/what-every-computer-prog...
Comment linking /2014/09/what-every-computer-programmer-should.html
on “Floating Point Visually Explained”Submitted Parsing C++ is literally undecidable (2013) as a story · 111 points
HN discussion> C++ templates have a similar issue TIL! I went and dug up a citation: https://blog.reverberate.org/2013/08/parsing-c-is-literally-...
Comment linking /2013/08/parsing-c-is-literally-undecidable.html
on “Weird Lexical Syntax”Submitted Hoare’s Rebuttal and Bubble Sort’s Comeback as a story · 103 points
HN discussionSeveral people found my blog entry on this enlightening: http://blog.reverberate.org/2015/08/monads-demystified.html
Comment linking /2015/08/monads-demystified.html
on “Async and Await in Rust: a full proposal”Submitted Hello JIT World: The Joy of Simple JITs (2012) as a story · 96 points
HN discussionI struggled with a similar question for my low-level protobuf library UPB ( https://github.com/haberman/upb ). Here are some blog posts describing my dilemma about this: http://blog.reverberate.org/2009/11/porting-upb-to-c.html http://blog.reverberate.org/2009/12/torn-over-c-question.htm... I ultimately chose to stick with C, and I'm happy with my decision. When people ask me why I stuck with C, it's difficult to gi…
Comment linking /2009/12/torn-over-c-question.html
on “Why should I have written ZeroMQ in C, not C++”Submitted On "The Future of JavaScript MVC Frameworks" as a story · 73 points
HN discussionExactly. The React paradigm is to never mutate the DOM directly, but instead let React mutate it. I wrote a friendly intro here: http://blog.reverberate.org/2014/02/react-demystified.html
Comment linking /2014/02/react-demystified.html
on “Epoch – A real-time charting library”Submitted Hello, JIT World: The Joy of Simple JITs (2012) as a story · 66 points
HN discussion