-
Ludic v0.2.0 — the types-and-systems release
Pre-releasereleased this
2026-09-01 02:39:56 +02:00 | 1047 commits to main since this releaseLudic v0.2.0 — the types-and-systems release
v0.1.0 stood the toolchain up: a self-hosted, C-free compiler, a deterministic
2D engine, and a namespaced standard library. v0.2.0 makes it a language you
can build a real game in. Ludic gets a type system, an engine that runs
animation and lighting for you, a complete input stack, and the out-of-band
libraries — audio, networking, concurrency — a game reaches for once the core
loop works.The through-line is unchanged: every feature is gated and additive. A
program that never mentions a new namespace or type compiles byte-for-byte
identically to before, andx bootstrap-cfreestill proves the compiler
rebuilds itself bit-exact from the checked-in seed. You pay for what you use and
nothing else.Highlights
- A real type system. Tagged-union
enums with payloads and exhaustive
match;optionandresultwithtry/elserecovery;panic/assert
withfile:linemessages instead of segfaults; exactBigInt/Decimaland
display-scaleHugefor game economies;Dict/Setcontainers; and packed,
allocation-freeIVec2/Rectvalue types. - An engine that does the work. Declare a
SpriteAnim,Motion,Light2D,
OccluderorAmbientcomponent and the engine animates, tweens and lights it
every frame — no handler wired. Lighting reaches render-quality tiers: spot
cones, soft shadows, colour gels, normal maps and a day/night ramp. - A full input stack. Rebindable action maps, a device layer for held keys,
analog sticks, mouse, gamepads and touch, native macOS hardware bindings, and
deterministic record/replay of the whole per-frame device state — the seed of
lockstep netcode. - Out-of-band libraries.
Audio.*(AVAudioPlayer),Http.*(non-blocking
HTTP/HTTPS with system TLS), and a layeredJob/Promise/Syncconcurrency
library — all frame-driven and replay-safe, none of them ever feeding the
deterministic simulation. - Testing you can trust. A built-in
test { … }framework with
expect/expect_eq/expect_near, now with--coverageline reporting.
Determinism, still guaranteed
Everything gameplay-facing is integer / Q16.16 fixed-point and reproduces
bit-for-bit across runs and platforms. The genuinely real-time surfaces — audio
output, HTTP, wall-clock — are explicitly out-of-band and never touch the
lockstep world, so recorded and replayed runs stay exact.Jobresults are
collected on the main thread at a point you choose; aJobnever mutates the
ECS world directly.Install / upgrade
git fetch --tags git checkout v0.2.0 bin/x build-cli # rebuild ludicc / ludic from the seed (clang only) bin/x test # 86 checks, all greenludicc --versionreads theVERSIONfile at runtime and now reports0.2.0.Artifacts
ludic-0.2.0-src.tar.gz— reproducible source + LLVM-IR seed.ludic-0.2.0-<platform>-<arch>.tar.gz— the prebuilt macOS toolchain (bin/,
the seed,VERSION).
Compatibility
Additive and backward-compatible with v0.1.0 — no removals, no breaking changes
to existing programs. Native audio, HTTP and gamepad backends are macOS-only for
now; every one of those APIs is present and dead-stripped to a no-op on headless
targets, so the same game code compiles and runs under the test harness
everywhere.See
CHANGELOG.mdfor the full, itemized list.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
ludic-0.2.0-darwin-arm64.tar.gz
0 downloads · 1.1 MiB
-
ludic-0.2.0-src.tar.gz
0 downloads · 1.4 MiB
- A real type system. Tagged-union