Skip to content
Norveth

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
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.

Email us: hello@norveth.app