Elm Game of Life
A functional baseline: immutable state, explicit updates, and a grid small enough to make the rules teachable.
I rebuild Conway's Game of Life when trying a new language or UI library, then compare what each stack makes awkward or easy.
Elm, ClojureScript, Redux, and LiveScript: same grid, different ways to hold and update state.
A functional baseline: immutable state, explicit updates, and a grid small enough to make the rules teachable.
ClojureScript and re-frame: cells as data, updates as events.
React and Redux with Conway implemented as a reducer: easy to step through in devtools.
LiveScript, compressed hard to see how terse syntax shapes the automaton.
ReasonReact, ReScript, Svelte, and Solid: each makes you decide how a cell gets from one generation to the next.
ReasonReact, an early typed React-family take, board and transitions in algebraic types.
A ReScript follow-up to the ReasonML version, carrying the typed model into a newer toolchain.
Svelte's reactivity keeps board state and UI updates close together.
Solid's fine-grained reactivity, later adapted here into the interactive canvas preview.
Go, Rust, Gleam, Civet, and RippleJS: small enough to show syntax and runtime differences quickly.
A tiny syntax experiment around the Game of Life idea, represented as a one-commit CSS-primary repo.
Go: explicit loops, no framework, a baseline to compare against the UI-heavy versions.
Rust, where ownership and mutation choices drive how cells update.
Gleam's typed functional model, kept small enough to compare with the other versions.
RippleJS, a newer framework; Conway here is a quick read on its reactive model.
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.