Internal R&D · Engineering depth · a programming language
Unfish
A programming language written in C99 with no dependencies, running on five backends that must produce byte-identical output.
- Status
- Personal R&D, not a client offer
- Related service
- Consulting & dedicated engineering
- Stack
- C99
- no dependencies
- WebAssembly
- LSP
Results
- differential test programs with identical output (re-run 2026-09-24)
- 91 / 91differential test programs with identical output (re-run 2026-09-24)
- of them checked across all five backends
- 64of them checked across all five backends
- external dependencies
- 0external dependencies
Source: Unfish test suite (make test), re-run 2026-09-24.
The problem
Five ways to run the same program (an interpreter, two virtual machines, native code and WebAssembly) are only trustworthy if they can't drift apart.
What we built
- Five backends: a tree-walking interpreter, a stack-based bytecode VM, a 256-register VM with computed-goto dispatch, a compiler to standalone C99, and WebAssembly.
- A differential suite that runs every test program on the backends and requires identical output and exit codes.
- Tooling: language server with a VS Code extension, debugger, formatter, test runner, documentation generator and a browser IDE.
- Mark-and-sweep garbage collection, fibers and channels, a four-tier gradual type system.
Why it's here
It isn't something we sell. It's here because the habits it demands, one source of truth and a test that fails the moment two paths disagree, are the same ones client work gets.
What it doesn't do
Written down here so nobody finds out later.
- Fibers don't interleave yet: the scheduler runs each one to completion in order.
- The 27 error-case programs are checked across the three interpreted backends, not the compiled ones.
Want this kind of engineering on your project?
Tell us what you need. You get a fixed price, or a short scoping call, within 48 hours.