Dangerous Dave in Brainfuck, a sorting manifesto
2026/6/21 · 20:20

Dangerous Dave in Brainfuck, a sorting manifesto

Issue #6 (June 15–22, 2026): Week six of the Brainfuck Mono-Republic. Three spotlights. Most Show-off — davefuck, the 1988 DOS game Dangerous Dave reimplemented as a ~60KB Brainfuck ROM: JavaScript hosts only the BF virtual machine and canvas renderer, every game-logic decision is encoded in tape cells. Most Absurd — dropsort-brainfuck, a Brainfuck implementation of the joke Dropsort algorithm whose README arrives on Institute letterhead and certifies that silently deleting non-monotonic input values is "an expression of methodological rigour." Most Practical (APL, back-to-back) — reactor-diffuser, Gray-Scott reaction-diffusion Turing patterns in ~30 lines of Dyalog APL. Also worth noting: AArch64-Brainfuck-jit, a 41-commit ARM64 JIT compiler. Coda: Malbolge, Whitespace, Befunge, J, and K/Q — zero repos for the sixth consecutive week.

GitHub, June 15–22, 2026. Week six of the Brainfuck Mono-Republic. Nine Brainfuck repos, two APL repos, zero from Malbolge, Whitespace, Befunge, J, or K/Q — the structural drought now old enough to order a drink. The Brainfuck haul is legitimately strong this week: a browser-playable DOS game encoded as a 60KB BF ROM, an AArch64 JIT compiler with 41 commits of C++, and a satirical sorting essay that out-commits on absurdism. APL shows up with the week's most visually arresting project. Three spotlights, no padding.

Most show-off: Dangerous Dave, reborn as 60,000 bytes of + and >

ujjwalvivek/davefuck is a full implementation of the 1988 DOS game Dangerous Dave — platformer, enemies, jetpack and all — as a ~60KB Brainfuck ROM. 1
The architecture is deliberately minimal on the host side. JavaScript provides a Brainfuck VM and a canvas renderer; every decision about where the player stands, whether a bullet connects, when the jetpack drains — lives entirely inside rom/dave.bf. As the README puts it:
"Dangerous Dave re-imagined in pure Brainfuck. JS only runs the Brainfuck VM and renders the resulting tape state. Anything happening in game is because rom/dave.bf changes cells on a Brainfuck tape." 1
The language breakdown reflects the split honestly: Brainfuck 97.0%, JavaScript 2.9%, HTML 0.1%. 1 Controls are Arrow keys (move/jump), Space (shoot), Left Alt (toggle jetpack), and R (restart). The game is playable in a browser at davefuck.ujjwalvivek.com; the repo's npm run size script reports the gzip payload at the advertised 60KB badge. Six commits, 1 star, MIT license. 1
What earns this the show-off slot is the sheer load-bearing requirement on the BF tape. Dangerous Dave has a full game loop: collision detection, sprite state, score tracking, multi-level progression. Encoding that game loop as Brainfuck memory cells — with no variables, no functions, no conditional logic except [ and ] — and producing a 60KB file that is also syntactically valid Brainfuck is not an implementation detail. It is, more or less, the entire project.
コンテンツカードを読み込んでいます…

Most absurd: the Institute certifies that losing your data is methodologically correct

BSfrS/dropsort-brainfuck implements Dropsort in pure Brainfuck. Dropsort is a "sorting" algorithm that makes a single left-to-right pass through the input, keeps the first element, then retains each subsequent element only if it is at least as large as the previous kept value. Everything else is dropped. 2
The algorithm is a well-known programming joke — it produces a monotonically non-decreasing subsequence while silently deleting anything that gets in the way. Input 64 8 128 16 255 200 yields 64 128 255. The numbers 8, 16, and 200 are simply gone. 2
The Brainfuck file handles decimal integers 0–255 (space- or newline-separated), implementing division via repeated subtraction because BF has no division instruction. Memory layout is documented: dedicated cells for the current value, running maximum, comparison, decimal output, and input buffers. Technically competent, as these things go.
What lifts this above a standard BF exercise is the README. It arrives on letterhead from the BSfrS Institute (bsfrs.de), offering what it calls "rautavistic methodological certification." The write-up does not apologize for the data loss. It embraces it:
"The fact that some input data is lost in the process is not a drawback but an expression of methodological rigour." 2
The pairing is described as a "methodological ideal" — Dropsort's unconditional discard principle, the README argues, matches Brainfuck's architectural philosophy of doing the minimum possible with maximum friction. The Institute "therefore recommends Brainfuck for any project where process quality and development efficiency take priority." 2 The implementation has been "archived as reference implementation in the Runtime Environments and Consequences collection in Q3." 2
The word "Consequences" in that collection title is doing a lot of work.
コンテンツカードを読み込んでいます…

Most practical (APL, back-to-back): Turing patterns from two scalar dials

markpernotto/reactor-diffuser simulates the Gray-Scott reaction-diffusion model in roughly 30 lines of Dyalog APL, producing Turing patterns — coral, maze, mitosis, waves, solitons — as images, with zero library dependencies beyond APL itself. 3
This is the same author as last week's pitch-class-set (music theory in APL). Two consecutive weeks, two projects that make the argument for APL on merit rather than novelty. The fit here is structural: the Gray-Scott model updates every grid cell based on its neighbors' values, and APL's whole-array operations eliminate the per-cell loop entirely.
The author explains the design:
"Reaction-diffusion is the purest demonstration of array programming's core strength. Neighbour access isn't index arithmetic — it's shifting the entire grid one cell with a rotate, so the toroidal boundary is free. Every update term operates on the whole field at once, so there is no loop over cells. And thousands of timesteps collapse to a single application of the power operator ⍣." 3
The core engine is four functions: lap (9-point Laplacian), step (one Euler timestep), run (iterate via ), init (seed the grid). Two scalar dials — feed rate and kill rate — move you through the full family of Turing patterns. The repo ships with 8 named presets (coral at f=0.0545 k=0.062, maze at f=0.029 k=0.057, mitosis at f=0.0367 k=0.0649, etc.), 7 colour palettes (gray, fire, ice, algae, glow, ember, electric), and 3 animation modes: rd.Frames (watch one pattern grow), rd.Morph (knobs drift on a fixed loop), rd.Movie (custom waypoint journeys). 3 Output is netpbm (.pgm/.ppm) — no dependencies — with optional ffmpeg assembly into MP4 or GIF. Three headless shell scripts render and assemble animations without opening an APL session.
There is also a spatial composite mode that varies feed and kill continuously across the grid, showing the entire pattern zoo in a single still image:
Parameter-space sweep across feed/kill axes showing the full family of Turing patterns in one image
Spatial gradient mode: feed varies left-to-right, kill top-to-bottom — every recognisable pattern regime visible simultaneously. 3
The self-description is accurate: "Glyphs in, picture out. In spirit it's a demoscene piece — maximum visual payoff from minimal, elegant code — only the 'assembly language' here is array notation." 3 Inspired by Pearson's 1993 Science paper on complex patterns from simple reaction-diffusion systems and Karl Sims' tutorial. MIT license, 1 commit, 0 stars.
コンテンツカードを読み込んでいます…

Also worth noting

GccKking/AArch64-Brainfuck-jit — an AArch64 JIT compiler for Brainfuck, adapted from an existing AMD64 implementation. Dual-mode: interpreter (-i) and JIT (-j), the latter converting Brainfuck byte streams to AArch64 machine code, writing it into executable memory, and running it directly. As the README puts it: "I came across an existing implementation for AMD64 and adapted its framework to build this AArch64 version." 4 Written in C++ (40.1% of the codebase, with Brainfuck test scripts making up the rest), 41 commits, GDB debugging with -g, a test/ suite that passes, and a note that it will SIGILL on non-AArch64 Linux. Compiles with a single g++ command. 0 stars — probably because the audience for AArch64-native BF JITs is small, not because the engineering is lacking.

The silence continues — six weeks and counting

Malbolge: 0 new repos for the sixth consecutive week. 5 Whitespace: 0 across two search paths. 6 Befunge: 0 across three paths, including language:Befunge and topic:befunge. 7 8 J: 0. 9 K/Q/kdb+: 0 genuine repos; the keyword search for kdb+ OR kona OR shakti returned 82 results, all false positives — Indian personal names and unrelated business projects. 10
Six weeks is a trend. These five languages have collectively produced zero new GitHub repositories since mid-May. That is the data.

Cover: parameter-space contact sheet from markpernotto/reactor-diffuser, MIT license 3

関連コンテンツ

このコンテンツについて、さらに観点や背景を補足しましょう。

  • ログインするとコメントできます。