Optimizing a ring buffer for throughput (2021)
In this article I will take a look at the classic concurrent ring buffer and how it can be optimized to increase throughput.
In this article I will take a look at the classic concurrent ring buffer and how it can be optimized to increase throughput.
Note: The focus of this article is to explain the process of reverse engineering, and it is not continually updated to reflect ongoing changes in Facebook APIs. If you are looking for updated details, consider basing your work on open-source projects like mautrix/meta , which is developed by my employer Beeper .
Have you ever wanted to write your own compiler? ... yes? ... of course you have! I've always wanted to have a go at writing a compiler, and with the recent release of WebAssembly, I had the perfect excuse to have a go.
A small Figma war story.
When you think about the Fibonacci sequence, you probably imagine a swirling vortex of oscillating points stretching outwards to infinity: Okay, no, obviously you don’t. Yet.
Tailwind CSS is the new ubiquitous frontend framework. It replaces a generation of sites built with Twitter Bootstrap. However, Tailwind CSS is not a UI framework itself but has become synonymous to some degree with t...
Today's main topic is the "freezing" of the JEP list in JDK 21. In addition to that, however, we will also talk about Nulls in Valhalla. And finally, the obligatory Release Radar.
One of the primary things that people don't understand about Objective-C is that it is a solution of the two language problem , or more prec...
C++ is late to the coroutine party, compared to other programming languages, but they are part of C++20. Prior to coroutines, a C++ programmer had two choices, roughly speaking:
Ruby's switch statement is very versatile and flexible, especially due to the dynamic nature of Ruby. This post shows how it works with examples.
Support for `FormData` and `git` dependencies, better `setTimeout()` compatibility, `bun wiptest` is now `bun test`, and better support on AWS Lambda and GitHub Actions.
On January 17th 2023, X41 and Gitlab published a report of the source code audit they performed on Git (funded by the OSTIF foundation).
I’ve been saying the upcoming 0.11.0 release of Zig would have async/await/suspend/resume for 9 months now. You can probably find 10 different places where I promised in writing or in front of a camera that this next release would have this feature.
Zig is a new, independently developed low-level programming language. It’s a modern reimagining of C that attempts to retain C’s performance while embracing improvements from the last 30 years of tooling and language design. Zig makes calling into C code easier than any other language I’ve used. Zig also treats unit…
Release blog post for the 12.0 release of the Citus extension to Postgres. Dive into new Citus 12 features such as schema-based sharding for multi-tenant SaaS applications (and microservices) as well improvements in the Citus support for the Postgres 15 MERGE feature.
Hello, Several FFFs ago we have shown you what a Space platform can look like (FFF-373), today we would like to explain how they work in a bit more detail.
Exploring the area of using Rust to write Mesa Vulkan drivers.
Here’s everything you need to know to build your first LLM app and problem spaces you can start exploring today.
Goroutines are the single feature that distinguishes Go from other languages. They look very much like threads, but they are cheap to create and manage. Go's runtime schedules goroutines onto real threads efficiently so you can easily create lots of goroutines.
I was lucky enough to grow up through the early 2000’s, during the golden age of Half-Life mods. Industry classics like Counter-Strike (CS) had just been invented, every month brought new mods to try, and files were too big to download on a dial-up connection so you’d leech them off a server at a big local LAN party…
“lex and yacc” are two terms that are used together so often that they can seem indivisible. lex takes a string as input and divides it up into lexemes (roughly speaking “words”) and yacc takes a sequence of lexemes and parses them. Since some parsing approaches such as recursive descent parsing unify these phases…
In the old days when I started programming, green programmers trying to build their skills and get experience started out doing maintenance programming. Only the old hands got to write new code. The newbies cut their teeth debugging and fixing musty old code that still worked for the business. I’ve done my share of…
In fall 2022, Trail of Bits audited cURL, a widely-used command-line utility that transfers data between a server and supports various protocols. The project coincided with a Trail of Bits maker week, which meant that we had more manpower than we usually do, allowing us to take a nonstandard approach to the […]
Knuth knows how to maintain information hygeine.
In this post, we will discuss recent results from Immunant and Galois in extending C2Rust to emit memory-safe Rust in certain cases. With this work we aim to shift a meaningful part of the translation burden from the human to the machine. Up until now, C2Rust has only been able to translate C to unsafe Rust that is no…
Research on programming tools published at CHI 2023.
CRDTs sound cool, but how are they actually used? Let's learn by building a collaborative pixel art editor.
UPDATE: Wow, this post has gotten popular! I’ve written a new post that adds new papercuts combined with concrete suggestions for how C++ could improve, if you are interested. Also, if you want to read more about C++’s deeper-than-papercut issues, I recommend specifically my post on its move semantics. Thank you for…
I'm sick of it. In the world of mobile development (though likely also elsewhere), we sink so much engineering talent into making tools that are great...