December 5, 2025
Errors, enums, and egos collide
Nimony (eventually Nim 3.0) Design Principles
Nimony’s bold new plan sparks error wars and import rage
TLDR: Nimony sketches a simpler, predictable path to Nim 3.0 focused on safe, embedded‑friendly code and explicit error rules. The community erupted over “errors-as-values,” import chaos, and leadership style, splitting between admiration for the vision and eye‑rolling at what some call freshman‑level error philosophy.
Nimony, the would‑be future of Nim 3.0, just dropped a manifesto: predictable performance for tiny devices, automatic memory cleanup, and a strict “tell me if you throw” rule for exceptions. Translation: they want code that runs on watches and rockets, not just laptops. But the internet latched onto the spiciest bit—making errors part of the object itself. Think “not‑a-number” (NaN) for floats and a special “bad integer” value. One commenter blasted it as “intro class energy,” while another dreamt up a new meme: NaI—“not an integer”—with CPUs that know when math blows up.
The drama didn’t stop there. Nim fans gripe that imports feel like a chaotic party where random names show up uninvited. “Why does bringing in one file spray mystery names into my code?” asked one exasperated dev. Meanwhile, governance tea spilled: a longtime observer said Nim could be bigger if the founder shared more decision‑making, calling him “Torvaldsesque”—which is nerd‑speak for brilliant, blunt, and very in charge.
Behind the shouting: Nimony sticks to destructor‑based memory management (automatic cleanup) and a single ref‑counting mode for simplicity, with special annotations for tricky cycles. The community? Split between loving the clean, embedded‑friendly vision and roasting the error strategy like it’s 101. It’s programming philosophy meets personality politics—and everyone brought popcorn.
Key Points
- •Nimony is a new compiler for a Nim variant intended to evolve into Nim 3.0, currently providing a streamlined, usable language.
- •The design targets hard real-time and embedded systems, emphasizing predictable WCET and avoiding JITs and tracing garbage collectors.
- •Primitive and composite types have predictable, inlined layouts, consistent with Nim 2’s approach for performance and predictability.
- •Nimony adopts scope-based memory management with destructors and move semantics, standardizing on mm:atomicArc; potential cycles require .cyclic with .acyclic as default.
- •Error handling supports exceptions with mandatory {.raises.} annotations and introduces a raisable ErrorCode enum; error states can also be modeled within objects or via a thread-local error variable.