diff --git a/docs/blog/index.html b/docs/blog/index.html index cca54a3..d8c6af5 100644 --- a/docs/blog/index.html +++ b/docs/blog/index.html @@ -35,10 +35,10 @@

Blog

Performant Python pipelines without the Rust

18 October 2026

- rugo's Avro reader, called from Python, against Apache - Arrow's Rust reader. On one thread Python won three of - four races, by 1.2–1.6×. On its defaults rugo was - 2.3–4.5× faster than any Rust result. + Before you scope that Rust rewrite: we raced Python + against Apache Arrow's Rust Avro reader, and Python won + three of four on one thread. On its defaults rugo was + 2.3–4.5× faster than anything Rust managed.

diff --git a/docs/blog/performant-python-pipelines-without-the-rust.html b/docs/blog/performant-python-pipelines-without-the-rust.html index b13643a..1d47447 100644 --- a/docs/blog/performant-python-pipelines-without-the-rust.html +++ b/docs/blog/performant-python-pipelines-without-the-rust.html @@ -6,7 +6,7 @@ Performant Python pipelines without the Rust @@ -45,26 +45,28 @@

Performant Python pipelines without the Rust

- Called from Python, rugo reads Avro faster than - arrow-avro, Apache Arrow's own Rust reader. - On one thread it won three of four races, - by 1.2× to 1.6×. Left on its defaults, it uses every core - and was 2.3× to 4.5× faster than any Rust - result. + "Rewrite it in Rust" has become the default answer to a slow + Python pipeline. We put that to the test, and Python won. + Called from Python, rugo beat arrow-avro, + Apache Arrow's own Rust Avro reader, in + three of four races on one thread. On its + defaults it was 2.3× to 4.5× faster than + anything Rust managed.

- There's a familiar arc in data engineering. The Python - pipeline gets slow, someone benchmarks it, and the - conclusion is always the same: rewrite the hot path in Rust. - Weeks later you have a second language, a build toolchain, - FFI glue, and a team that can't all read the code. + You know how this goes. The pipeline gets slow, someone + profiles it, and a Rust rewrite gets scoped. Six weeks later + you own a second language, a second build system, a pile of + FFI glue, and a codebase half your team can't review. The + pipeline is faster. Was it the language, though, or the + engine underneath it?

- We think that trade is usually unnecessary. To test it, we - raced rugo's Avro reader, called from Python, against the - best Avro readers Rust has, called from Rust. + Usually it's the engine. To prove it, we raced rugo's Avro + reader, called from Python, against the best Avro readers + Rust has, called from Rust.

The contenders

@@ -282,49 +284,55 @@

Where we lost

files Python wins.

-

Why Python can be this fast

+

Python was never the slow part

- Python isn't doing the work. rugo is a native C++ engine with - a Python front door: you call it from Python, and the bytes - never pass through the interpreter. + Here's the bit the rewrite-it-in-Rust crowd skips: in a + well-built library, Python isn't doing the work. rugo is a + native C++ engine with a Python front door. You call it from + Python, and the bytes never touch the interpreter. What + makes it fast is the engine, and an engine can't tell which + language called it:

- The point isn't that Rust is slow. arrow-avro is excellent - work. The point is that "fast" is a property of the engine, - not of the language you call it from. + None of this means Rust is slow; arrow-avro is excellent + work. It means "fast" belongs to the engine, not to the + language you call it from. If the engine is good, you can + keep the language your team already writes.

What this leaves out