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

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • rr

    Record and Replay Framework

    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-debugging-in-ass...

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • zig

    General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

  • barebone-c

    Eliminating the need for hand-crafted assembly in high-performance interpreters

    I’ve opened an issue in LLVM bugzilla concerning jump not being folded with address computation on x86 with a proposed fix. Would love if it gets some attention. https://bugs.llvm.org/show_bug.cgi?id=50042

    Also been working on a C language extension to enable guaranteed tail calls along with explicit control over registers used for argument passing. Provided that callee-save registers are used for arguments, calling fallback functions incurs no overhead.

    https://github.com/rapidlua/barebone-c

  • SBE

    Simple Binary Encoding (SBE) - High Performance Message Codec

    Consider a valid protobuf message with such a field. If you can locate the field value bytes, you can write a new value to the same location without breaking the message. It's obviously possible to the same with the varint type too, as long as you don't change the number of bytes - not so practical, but useful for enum field which has a limited set of useful values (usually less than 128).

    Pregenerating protobuf messages you want to send and then modifying the bytes in-place before sending is going to give you a nice performance boost over "normal" protobuf serialization. It can be useful if you need to be protobuf compatible, but it's obviously better to use something like SBE - https://github.com/real-logic/simple-binary-encoding

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Ante: A low-level functional language with algebraic effects and safe shared mut

    1 project | news.ycombinator.com | 30 Sep 2024
  • Nuitka: Optimizing Python compiler compatible with CPython

    2 projects | news.ycombinator.com | 18 Sep 2024
  • Deterministic Replay of QEMU Emulation

    7 projects | news.ycombinator.com | 29 Aug 2024
  • How does it feel to test a compiler?

    2 projects | news.ycombinator.com | 16 Aug 2024
  • Waiting for... a Debugger

    1 project | dev.to | 1 Aug 2024