RCIRODERICK CONSULTINGTalk to an engineer
← All Research Notes

Beyond Brainfuck-Tape: Runtime-Extension Feasibility for Babel

Research note. Drafted 2026-05-17 from the same survey as the parameter-sheet candidates note. Working draft. The per-family effort estimates are based on schema plus canonical-language read-throughs, not on prototype implementation.

TL;DR

Babel's schema validates seven base machines: brainfuck_tape, stack, oisc, fungeoid_2d, register, queue, string_rewriting. The runtime executes one, brainfuck_tape. This note scopes the effort to extend the runtime to each of the other six and recommends the order of investment. Top recommendation: ship the stack family first. It is the smallest runtime delta, with the largest population to leverage at 1,003 wiki entries, with the queue family near-free as a byproduct, and Befunge reachable after. Runner-up: Subleq from the OISC family, about 50 lines of interpreter, with high narrative density. Defer: fungeoid-2D, which depends on stack; string-rewriting, an alien model with the biggest schema rework; and register, which has a small canon.

Per-family feasibility

FamilyCanon examplesEffortArchitectural blockersStrategic value
StackForth, FALSE, Underload, WhitespaceSmall, about a long weekendNone significant. Replace tape plus pointer with deque; replace INCREMENT/DECREMENT/PTR_* with PUSH/POP/DUP/SWAPHigh: 1,003 wiki entries; enables queue family for ~10% extra effort; foundation for Befunge later
Fungeoid 2DBefunge, Funge-98, Fish, Piet, WierdMedium, a couple of weeksCoordinate system; instruction-pointer direction; needs the stack family done firstHigh once stack ships; second-largest esolang category
OISCSubleq, BIT, ByteByteJump, RSSBSmall in absolute terms at ~50 lines, but blocked by operand slot on InstructionInstruction model has no operand field; OISC needs SUBLEQ a b c triplesNarrative density: the one instruction headline is the most quotable Babel demonstration
RegisterRandom-Access Machine, Minsky counter machines, x86-ish esolangsSmall but blocked by operand slot, same as OISCSame as OISCThin canon; defer
QueueQdeql, Queueue, EniuqNegligible if stack family already done. Swap pop for popleftNone new~10 wiki entries; ride along with stack
String-rewritingThue, ///, Markov algorithmsLarge, multiple weeks of design workNo instruction pointer in the traditional sense; pattern-matching engine needs designing; production-rule priority semanticsMethodologically interesting but a different kind of artifact; defer

Why stack first, in detail

  1. Cheapest runtime delta. A stack interpreter is the smallest structural change from the tape interpreter. Replace tape plus pointer with deque; replace INCREMENT / DECREMENT / PTR_* with PUSH / POP / DUP / SWAP. Most of the loader plus parser infrastructure is reused unchanged.
  2. Largest population to leverage. Category:Stack-based on the esolangs.org wiki has 1,003 entries. Stack-machine canon includes Forth, FALSE, Underload, Whitespace, all well-specified, all with stable references to validate against.
  3. Queue family is a near-free byproduct. Once the stack runtime exists, swapping pop for popleft covers the queue family for ~10% extra effort. Two base machines for the price of one.
  4. Unlocks Befunge later. Befunge is fungeoid-2D plus a stack. Building the stack machinery first makes the eventual fungeoid extension cheaper, since the fungeoid runtime is 2D-IP plus stack ops, and the stack ops will already exist.
  5. Strongest methodological claim. With BF-tape plus stack covered, Babel can credibly say we describe and execute two of the three classical Turing-complete models from a single parameter format. That's a publication-worthy moment.

Why Subleq is the runner-up

Cheapest in absolute terms at ~50 lines of interpreter, highest narrative density per line through the one instruction headline, and small enough that it could ship as a follow-up appendix to a stack-machine installment without earning its own white paper. The catch: blocked until the Instruction model grows an operand slot. That same operand-slot work is also a precondition for the register family, so the operand-slot work has payoff across multiple families.

Why the others defer

  • Fungeoid-2D. Medium effort, depends on stack. Schedule after stack ships and is stable.
  • String-rewriting. Alien programming model, with Thue's nondeterministic production rules and Markov-algorithm priority sequencing, requiring the biggest schema rework. Worth doing eventually as a third Turing-complete model claim, but not the right next move.
  • Register. Small canon, thin strategic value. Could ride along on the OISC operand-slot work but doesn't earn dedicated attention.

Schema preconditions shared with the parameter-sheet candidates note

A small set of schema additions unblocks several Path B families and several Path A candidates at the same time:

  • Instruction operand slot. Blocks OISC and register families entirely; also blocks register-style BF derivatives like COW and Brainlove. Foundational change.
  • New InstructionOp values. HALT, JUMP_UNCONDITIONAL, REGISTER_STORE/RECALL, procedure ops, already needed for the Path A top-10 list.
  • Encoding enum. Variable-length binary, word-length dispatch, needed for Path A languages like Spoon and Wordfuck, and would also help if string-rewriting eventually gets prioritised.
  • _check_brainfuck_tape_completeness subsetting. Allows partial canonical sets, unblocking Path A's Boolfuck and Smallfuck.

The first three are small Pydantic changes; the fourth is a validator tweak. None block the stack-family runtime extension specifically, but doing them as a bundle keeps the schema clean for downstream parameter-sheet authors.

End-to-end sequencing recommendation

Treating both notes as a single roadmap:

  1. Now: ship the top 3 to 4 Path A parameter sheets: Ook!, Chespirito, Mierda, GERMAN. Zero runtime work. ~1 week.
  2. Next: apply the schema gaps, meaning new InstructionOp values, Encoding additions, and the completeness-subsetting fix. Unblocks 4 to 5 more Path A candidates. ~1 week.
  3. Then: ship the stack-family runtime extension. ~1 long weekend of focused work. First stack parameter sheets follow: Forth subset, FALSE.
  4. Then: queue family rides along at ~10% extra effort over stack.
  5. Then: Instruction operand slot. Unblocks Subleq from Path B plus the Path A register-style BF derivatives.
  6. Eventually: fungeoid-2D after stack is stable; string-rewriting if a methodologically strong reason surfaces.

That's a ~4 to 6 week roadmap from today's state to Babel covers BF-tape plus stack plus queue plus OISC across roughly 15 to 20 parameter sheets, with a publication-worthy methodological position.