DeepSoft · Read the full story
01/10
Case study
DeepSoft · software development
Building Raku++
A compiler for one of the largest programming languages in existence — written from scratch, measured against the language's own specification, and shipped in under a month.
27 days from empty directory90% of the official test suite~2 ms startupmacOS · Linux · Windows · the browser
02/10
The brief
why we set ourselves this

The hardest demo we could give ourselves.

Nobody paid us for this one. We wanted a single project that would show — better than any list of services can — what our engineers do on an ordinary working day. So we picked a problem with nowhere to hide.

From an empty directory

No fork, no borrowed code. A hand-written lexer, parser, evaluator, regex engine, arbitrary-precision arithmetic, and full Unicode tables.

Nothing to lean on

C++17 and the standard library. Zero third-party dependencies, so it builds anywhere a compiler runs.

Judged from outside

Graded against the language's own executable specification — not against our own opinion of what "working" means.

03/10
What shipped
one source, many surfaces

Not one project — a constellation.

A compiler on its own is a curiosity. To be useful it needs a way to install it, a way to try it, a way to look things up, and a way to prove it is right.

the engine

Interpreter and compiler

One binary runs your program, or turns it into a standalone native executable.

the browser

The same code as WebAssembly

Not a rewrite — the identical source, running client-side with no server behind it.

the surfaces

Playground, spec, tour, drills

A live editor, a ~700-page behavioural spec, eighteen lessons, 150 graded exercises — all running the engine in your tab.

the plumbing

Packaging & tooling

Homebrew, Guix, Nix, release archives for three systems, a CI action — and test and benchmark harnesses that run on the compiler.

04/10
Measured
four independent yardsticks

Measured, not claimed.

90%
196,395 of 217,060 individual tests in the language's official suite pass.
625/ 1,462
files pass on the all-or-nothing bar — one failing assertion disqualifies the whole file.
944
of 1,451 examples in the official documentation now produce byte-identical output. It was 596.
833× 121
expressions across operators, diffed pair by pair. Tracked divergences: 202 → 152 in one release.

Each yardstick is blind to what the others catch. Running all of them — and trusting whichever is currently pointing at a problem — is what kept the work honest.

05/10
Real code
what a specification never tests

Then we ran other people's programs.

Specifications test features in isolation. Real software does not. So we pointed the compiler at code nobody wrote for our benefit.

1,500pages
A production site generator — itself written in the language — regenerates its whole site byte-for-byte identically.
148 → 14
genuine disagreements found across 3,068 teaching snippets, then driven down and closed.
10,428
community solutions from years of a public programming challenge, swept through the same compare-and-diff.

A feature can be "done" by the specification's lights and still be quietly wrong in a way only real code reveals. That is why this front exists.

06/10
Startup
the number you feel first

Two milliseconds to the first line.

A small native binary with no virtual machine to boot: ~2 ms cold, best of a 200-launch loop 1.8 ms. On one run that is invisible. On the two-hundredth run of an edit-and-regenerate loop — or inside a shell script that calls it repeatedly — it is the difference between a tool that interrupts your thinking and one that doesn't.

Startup as a feature

Engines that carry a runtime with them typically spend a good fraction of a second before your first line executes. We treated that cost as a bug.

110 ms → 13 ms

We replaced the site's syntax highlighter with our own. It is both faster and more correct: it parses the code instead of pattern-matching words, so a method named role is no longer painted as a keyword.

07/10
Speed
compiled to a native binary · × faster than the mature reference engine

And the programs are fast.

Nine benchmark kernels, best of six runs, process startup included — and the harness refuses to time anything until every engine has produced byte-identical output. Even interpreted, before any compilation, we lead on seven of the nine.
08/10
Discipline
what makes a number worth trusting

We publish the unflattering figure.

The strictest of three

There are three defensible ways to compute the pass rate. We headline the harshest, quote both key figures together, and write the method down.

A target that moves away

The better it gets, the further broken files run — so they declare more tests and the denominator grows. We documented that instead of picking a friendlier baseline.

Fixes that lower the score

More than once a correctness fix exposed a test that had been passing by accident. Keep the fix, re-baseline, say so.

149 regression tests

Every closed defect becomes one. No release ships without passing all of them.

Speed is a gate

A release literally cannot contain a performance regression: a recorded baseline is re-measured automatically and fails the build.

Write down the failures

Optimisations we measured and rejected are documented beside the ones that landed — so nobody burns a week retrying them.

09/10
Shipping
delivery as a feature, not an afterthought

One binary. Four platforms. No runtime.

macOS

One universal binary covering Apple Silicon and Intel, installed with a single Homebrew command.

Linux

Statically linked, no runtime dependencies — plus a Guix channel and a Nix flake for distributions that build from source.

Windows

A static build that needs no redistributable packages installed alongside it.

The browser

The same engine as WebAssembly, running client-side with nothing sent to a server.

Every push is built and smoke-tested on all three desktop systems automatically. Outside contributors have started sending packaging of their own — which is its own kind of proof that the codebase is clean enough for strangers to work in.

10/10
Work with us
what this demonstrates

The same engineers, on your project.

Raku++ is open source and free, and it was never billed to anyone. It exists because it is the most complete demonstration we could build of how we work.

  • Greenfield systems engineering in modern C++, with no shortcuts
  • Performance work driven by profiling, and documented either way
  • Correctness held to an external standard, published honestly
  • Cross-platform delivery that actually reaches users
  • WebAssembly: one core, native and in the browser
  • A dozen releases in four weeks, without an unguarded regression