Ring++ is a dependency-free library and CLI for Ring — nothing else to install, nothing else to learn. Performant code that skips a real, measured copying cost. Static analysis that reads what Ring's own parser already accepts and quietly discards. Native builds with no C compiler, ever.
Ring++ exists because of real customer-facing work, not a lab exercise. A bank in Niger, running Ring in production, liked the language but wanted more before trusting it with critical projects. A restaurant management platform in France asked the same question from a different angle — real-time, high-volume, and unwilling to leave Ring. And Softanza, the base library I've been building in Ring alongside Ring++, has grown past 300,000 lines — a codebase where the same concerns stop being optional. Ring++ is what came out of answering all three, without ever leaving Ring.
Not three separate tools — three angles on the same idea: Ring already has the machinery for this, mostly unused. Each page below shows the Ring you already know, the small change, and the measured difference.
The exact same loop, 75× faster, by changing what you hold — not how you write the loop. One asymmetry in Ring's own design, made visible.
A checker that reads annotations Ring's own parser already accepts and quietly discards. Found two functions in Ring's shipped standard library that had never worked — both fixed upstream the day after they were reported.
Ring can already write a program with no compiler involved — the
mechanism just sat unused. One command, five desktop platforms
cross-built from whichever one you're on, plus a signed Android
.apk.
That's the one idea behind all three — not three separate tricks, but the same habit applied three times: read Ring's own design closely enough to notice what it already lets you do. The full design story, and the contract that keeps it working as Ring evolves.
Every figure below is a real gate result or a real corpus run, not a round number picked to look good. The programs that produced them are in the repository.
And when the gates are green, that proves only what they thought to ask. Twenty-six of them were green here while a four-line sequence killed the process outright — the test that found it, and what it cost to fix.
Ring++'s own library is not a default-yes: three of its eight worked examples conclude plain Ring is the right answer for their shape, and say so before printing a single speed number. A packaged program is a small pair of files, not one self-contained executable. Bare-metal microcontrollers are out of scope entirely — a Ring VM does not fit one, and no packaging tool changes that. And Ring++ will not package a program that reaches Ring's Qt bridge — why, with the reasoning and the numbers.
Ring++ vendors nothing at a user's install time, but two
dependencies are compiled into the CLI itself and their authors deserve their
names here: Mahmoud Fayed and the Ring team's
Ring
language — the design this whole project is built on, not around —
and Youssef Saeed's
tree-sitter-ring
grammar, which every ringpp check runs on. Adopted because it
independently reached the same reading of Ring's type annotations these
measurements did. Built with Andrew Kelley and the Zig team's
Zig, which
compiles the whole CLI into one binary per platform.
Ring++ is one of several Ring foundations from the same author, each standing alone and each dependency-free except for what it names and vendors itself. What running Ring++ against them actually found — real code, and two mistakes in Ring++'s own published claims, caught along the way.