Work in progress: 82,651 of 181,233 sites checked so far, more every week · updated 2 Nov 2026Missing a blog? Tell us

Top all-time · #564

J

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.

Visit the blog
229mentions?
2recommend?
105HN people?
2008–2026first – last linked?
Links on Hacker News per year · peak 29 in 2016

Rarely recommended · 2 of 40 sampled comments recommend it?

Why HN links it

HN readers link this blog for in-depth technical explainers on JIT compilers, tail-call interpreters, floating point, parsing and C++ grammar, usually as background for their own points.

Recommended for · 2 comments
one commenter finds the monads post enlightening; another says the JIT post is useful reading

Summarised by Claude from a sample of 40 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?

  1. Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C
    17 people · 30 mentions · first linked 2021-04-21
  2. Parsing C++ is literally undecidable (2013)
    10 people · 10 mentions · first linked 2013-08-28
  3. Hello JIT World: The Joy of Simple JITs (2012)
    8 people · 17 mentions · first linked 2013-01-01
  4. LL and LR in Context: Why Parsing Tools Are Hard (2013)
    8 people · 11 mentions · first linked 2013-09-06
  5. LL and LR Parsing Demystified (2013)
    6 people · 6 mentions · first linked 2013-07-22
  6. LL and LR Parsing Demystified (2013)
    5 people · 5 mentions · first linked 2023-08-29
  7. A tail calling interpreter for Python (already landed in CPython)
    5 people · 5 mentions · first linked 2025-02-17
  8. Bloaty McBloatface: a size profiler for binaries
    4 people · 6 mentions · first linked 2016-11-07
  9. /2013/08/parsing-c-is-literally-undecidable.html
    4 people · 4 mentions · first linked 2020-07-15
  10. Deep Wizardry: Stack Unwinding
    3 people · 5 mentions · first linked 2013-05-14

What Hacker News says?

  1. 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”
  2. Submitted Parsing Protobuf at 2+GB/S: How I Learned to Love Tail Calls in C as a story · 586 points

    HN discussion
  3. https://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”
  4. Submitted Parsing protobuf at 2+GB/s: how I learned to love tail calls in C (2021) as a story · 366 points

    HN discussion
  5. See 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”
  6. Submitted What every computer programmer should know about floating point, part 1 as a story · 323 points

    HN discussion
  7. I 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”
  8. Submitted LL and LR in Context: Why Parsing Tools Are Hard (2013) as a story · 222 points

    HN discussion
  9. I 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”
  10. Submitted No-Panic Rust: A Nice Technique for Systems Programming as a story · 204 points

    HN discussion
  11. Related 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”
  12. Submitted Bloaty McBloatface: a size profiler for binaries as a story · 202 points

    HN discussion
  13. This. 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”
  14. Submitted LL and LR Parsing Demystified (2013) as a story · 155 points

    HN discussion
  15. That 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”
  16. Submitted Thread Safety in C++ and Rust as a story · 147 points

    HN discussion
  17. https://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”
  18. Submitted Hoare’s Rebuttal and Bubble Sort’s Comeback as a story · 147 points

    HN discussion
  19. In 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”
  20. Submitted A tail calling interpreter for Python (already landed in CPython) as a story · 124 points

    HN discussion
  21. I 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”
  22. Submitted Parsing C++ is literally undecidable (2013) as a story · 111 points

    HN discussion
  23. > 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”
  24. Submitted Hoare’s Rebuttal and Bubble Sort’s Comeback as a story · 103 points

    HN discussion
  25. haberman · 2018-07-16Recommends
    Several 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”
  26. Submitted Hello JIT World: The Joy of Simple JITs (2012) as a story · 96 points

    HN discussion
  27. I 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++”
  28. Submitted On "The Future of JavaScript MVC Frameworks" as a story · 73 points

    HN discussion
  29. Exactly. 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”
  30. Submitted Hello, JIT World: The Joy of Simple JITs (2012) as a story · 66 points

    HN discussion

Search all of HN for blog.reverberate.org

Linked by the same people?