EINHORN_INDUSTRIAL today gave a full status update on PARENA, its from-scratch systems language, covering the compiler, the standard library, the build system migration to Bazel, and the mod-surface API work now underway.
**The pitch, in the founder's own words:** "PARENA is a language to make your software more programmable via fluid and composable plugin APIs." The adoption mechanism is just as directly stated: "we bolt on the plugin interface on to software and then PARENA slowly eats the codebase from the outside in." Not a rewrite-everything language — a strangler-fig one. Expose a plugin/FFI boundary on an existing codebase first, let PARENA code live on that boundary, and only later does more of the host's own internals get rewritten in PARENA, incrementally, as real need justifies it.
**What PARENA actually is:** S-expression syntax, compile-time region-based memory safety — no garbage collector, no manual free, just a checked invariant (`Region(Source) ⪰ Region(Destination)`) that catches an escaping short-lived allocation at compile time instead of a runtime crash — and multiple compilation targets, C first, then JVM, TypeScript, and WebAssembly. The editor/plugin API (`parena/plugin`, `parena/buffer`, `parena/events`, `parena/ui`) is a first-class part of the design from day one, not bolted on after the fact.
**What's real today (VS0, the `parena-c` compiler):**
- A full lexer and parser (domain 1) and region analyzer (domain 2) — both built, tested, and CI-verified. - A real C99 emitter (domain 3) that now understands arithmetic, comparisons, `if`, general function calls, `loop`/`recur` with genuine simultaneous-assignment semantics (the kind that makes a variable swap inside a loop actually work instead of silently corrupting), and `match` on `Result`/`Option` tagged unions — real pattern matching compiled down to a tag-checked `if`/`else if` chain, not interpreted. - Real memory verification (domain 4): every emitted program is checked clean under ASan/UBSan, and the check has teeth — a deliberately broken fixture with a real use-after-free is confirmed caught, not just assumed. - A brand-new FFI escape hatch, `#target {:c (inline-c "...")}`, which is the concrete first piece of the mod-surface story: it lets a PARENA function declare that its real implementation lives host-side — inside PITVIPER's Go core, for now — instead of trying to force everything through the compiler's own semantics. This is what makes the plugin-surface stdlib files (`editor/plugin.prn`, `editor/buffer.prn`, `editor/events.prn`, `editor/ui.prn`, `pitviper/protocol.prn`) real, compilable source instead of aspirational design notes. - Nine real standard library packages so far: `compress`, `crypto`, `editor`, `firefly`, `gfd`, `mapbuilder`, `net`, `pitviper`, and `regex` — plus a growing `tests/` suite alongside them. - The build itself moved to Bazel as its primary, CI-verified path (`bazel test //tests:test_lexer_parser`, with an `--config=asan` sanitizer build available), resolved via `bazelisk` pinned to the exact version in `.bazelversion`. A plain `Makefile` stays alongside for fast local iteration — Bazel is the rigor, Make is the speed.
**What's still honestly unfinished:** VS0 doesn't have a real type-checking pass or a function-signature table yet, which is exactly what's blocking the full mod-surface stdlib files from compiling end to end right now — several of their functions take genuinely typed parameters (a callback, a plain `I32`) that VS0's emitter doesn't understand yet, only the `Arena @ :region/x` shape it already supports. `cond`, `defstruct`/`defenum`, collection operations, and macros aren't built. Domain 5 (CLI runner polish) hasn't started. None of this is glossed over — it's the literal next queue.
**What's next:** finish the mod-surface/plugin API — entirely in PARENA, by explicit direction, not hand-rolled in Go first and ported later — so PITVIPER can host real PARENA-authored plugins. The first candidate mod once that surface exists: a real fix for PITVIPER's terminal-rendering rough edges (tmux, ncurses-heavy programs like vim and htop), built as a toggleable mod, validated, and only then made the mainline default. After that: the actual vim-like editor PITVIPER is meant to host, with a NERDTree-style file tree, a preview/edit split, and native LZ4-compressed SSH file sync — PARENA eating that corner of the codebase from the outside in, exactly as designed.
*FATBABY_NEWSWIRE — EINHORN_INDUSTRIAL*
STINKIES COMMISSAIRE — the first physical thing EINHORN_INDUSTRIAL has made. Join the waiting list for the hoodie →
← All posts