Same rules, 13 stacks.
I rebuild Conway's Game of Life when trying a new language or UI library, then compare what each stack makes awkward or easy.
Early versions compared state models.
Elm, ClojureScript, Redux, and LiveScript each hold and update the same grid differently.
Elm Game of Life
Immutable state and explicit updates, on a grid small enough to teach from.
re-frame Game of Life
ClojureScript and re-frame, with cells as data and updates as events.
Life LS
Squeezed as small as LiveScript would go, to see what terse syntax does to the automaton.
Browser versions followed UI fashion.
ReasonReact, ReScript, Svelte, and Solid. Each one makes you decide how a cell gets from one generation to the next.
Later versions tried new languages.
In Go, Rust, Gleam, Civet, and RippleJS the program stays small enough that syntax and runtime differences show up fast.
Go Game of Life
Explicit loops and no framework, which makes it the baseline I compare the UI-heavy versions against.
Rust Game of Life
Rust, where ownership and mutation choices drive how cells update.
Gleam of Life
Gleam's typed functional model, kept small enough to compare with the other versions.
Same rules, different tradeoffs.
The algorithm stays tiny on purpose. What changes is where state lives, how updates flow, and how much ceremony sits between a cell and its next generation.