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
| Family | Canon examples | Effort | Architectural blockers | Strategic value |
|---|---|---|---|---|
| Stack | Forth, FALSE, Underload, Whitespace | Small, about a long weekend | None significant. Replace tape plus pointer with deque; replace INCREMENT/DECREMENT/PTR_* with PUSH/POP/DUP/SWAP | High: 1,003 wiki entries; enables queue family for ~10% extra effort; foundation for Befunge later |
| Fungeoid 2D | Befunge, Funge-98, Fish, Piet, Wierd | Medium, a couple of weeks | Coordinate system; instruction-pointer direction; needs the stack family done first | High once stack ships; second-largest esolang category |
| OISC | Subleq, BIT, ByteByteJump, RSSB | Small in absolute terms at ~50 lines, but blocked by operand slot on Instruction | Instruction model has no operand field; OISC needs SUBLEQ a b c triples | Narrative density: the one instruction headline is the most quotable Babel demonstration |
| Register | Random-Access Machine, Minsky counter machines, x86-ish esolangs | Small but blocked by operand slot, same as OISC | Same as OISC | Thin canon; defer |
| Queue | Qdeql, Queueue, Eniuq | Negligible if stack family already done. Swap pop for popleft | None new | ~10 wiki entries; ride along with stack |
| String-rewriting | Thue, ///, Markov algorithms | Large, multiple weeks of design work | No instruction pointer in the traditional sense; pattern-matching engine needs designing; production-rule priority semantics | Methodologically interesting but a different kind of artifact; defer |
Why stack first, in detail
- 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_*withPUSH/POP/DUP/SWAP. Most of the loader plus parser infrastructure is reused unchanged. - Largest population to leverage.
Category:Stack-basedon 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. - Queue family is a near-free byproduct. Once the stack runtime exists, swapping
popforpopleftcovers the queue family for ~10% extra effort. Two base machines for the price of one. - 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.
- 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:
Instructionoperand slot. Blocks OISC and register families entirely; also blocks register-style BF derivatives like COW and Brainlove. Foundational change.- New
InstructionOpvalues.HALT,JUMP_UNCONDITIONAL,REGISTER_STORE/RECALL, procedure ops, already needed for the Path A top-10 list. Encodingenum. 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_completenesssubsetting. 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:
- Now: ship the top 3 to 4 Path A parameter sheets: Ook!, Chespirito, Mierda, GERMAN. Zero runtime work. ~1 week.
- Next: apply the schema gaps, meaning new
InstructionOpvalues,Encodingadditions, and the completeness-subsetting fix. Unblocks 4 to 5 more Path A candidates. ~1 week. - Then: ship the stack-family runtime extension. ~1 long weekend of focused work. First stack parameter sheets follow: Forth subset, FALSE.
- Then: queue family rides along at ~10% extra effort over stack.
- Then:
Instructionoperand slot. Unblocks Subleq from Path B plus the Path A register-style BF derivatives. - 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.