A Meta-Language of Intent
Three sub-languages. One job each. No intermediate abstraction layer. Bija stores state. Rumus computes. Viesti routes. Everything else is a library. The source structure is the execution structure.
Fudgel is composed of exactly three sub-languages, each with a single responsibility. No sub-language can perform the role of another. This separation is enforced by syntax, not convention.
The entire heap. All state lives here — entities, properties, templates, instances. Fully resolved at load time. Every human-readable name becomes a fixed memory address. No logic, no operations, no expressions. Pure structure.
Cannot: execute logic · route data
Pure, finite functions operating exclusively in registers. Receives inputs, computes outputs, terminates. No heap allocation, no side effects, no back-edges. Every function is provably finite. Register scaffolding, not heap state.
Cannot: store state · route data
The wiring layer. Connects Bija addresses to Rumus functions and writes results back. A signal resolves when its source address has data. One tilde between two addresses is the complete syntax. No logic, no time, no conditionals.
Cannot: store state · execute logic
Language design has historically operated on an assumed spectrum: human-readable on one end, machine-efficient on the other.
Every position on that spectrum is a compromise that leans one way and pretends it doesn't.
Fudgel's claim is that this tradeoff is false. A sufficiently honest representation of intent is also a sufficient representation for direct compilation — because intent at the right level of granularity is exactly what the machine needs.
The difficulty of assembly is not conceptual complexity — it is notational friction. Fudgel removes the friction without adding an abstraction layer, because the abstraction layer is what introduces the translation cost.
A live parser and visual schema renderer running entirely in your browser. Edit Bija, Rumus, or Viesti and watch the graph update in real time. No installation. No build step.
These are not conventions. A Fudgel compiler must reject any application that violates a compiler-enforceable invariant.
All shorthand resolves at parse time.
Commas, ! multipliers, positional pipes, boolean metadata —
none survive into the PAF. The runtime sees only expanded entities.
Only Viesti writes to Bija at runtime. No other mechanism can mutate state. Every state change is a named, visible signal in the graph.
Every Rumus function is finite. No direct recursion. No cycles in the call graph. Turing-completeness requires an explicit, visible Viesti cycle — never hidden inside a function.
No compiler optimisation pass. The compiler translates honestly. Performance is a product of design quality. A slow program is a design problem, visible in the structure.
Signal order is execution order. Viesti signals resolve in the order they are written. Writing signals is simultaneously writing the execution schedule.
Viesti has no concept of time. Timing, animation, and recurring execution are exclusively Lifga library concerns. The core has no run loop, no frame tick.
No layer knows another layer exists. Bija does not know Rumus exists. Rumus does not know Viesti exists. Libraries do not know other libraries exist.
Deterministic by construction. Non-determinism can only be introduced explicitly through a library — always an explicit choice, never an accidental one.
Domain-specific semantic abstractions that compile directly to Bija entities, Rumus functions, and Viesti signals. No special compiler access. No runtime overhead beyond what their compiled output requires. Libraries are inherently open — source is the only distributable.
Structural constraint validation. Reads boolean metadata on Bija entities and validates shape. Reference implementation for the compilation pass pattern.
Memory and range validation. Provides primitive type constraints through metadata booleans. {int}, {float32}, and custom constraints.
Parallelism verification. Proves ~~ independence claims at compile time by running each pool in both orderings and comparing outputs. Optional — but every ~~ it passes is proven, not asserted.
Where and how big. Pure spatial arithmetic on CPU — resolves layout before any rendering pass begins.
What does it look like. Property resolution over the entity tree — colours, borders, effects applied as a pass over Kadro-resolved entities.
Text formatting and typography. Applies font metrics and shaping over Kadro layout entities as a dedicated pass.
What is visible and in what order. Compositing pass — produces a resolved list of rectangular regions written directly to the framebuffer. Invalidation-based: zero CPU when nothing changes.
The only library that introduces time. Writes to Bija entities on a schedule, triggering downstream signals naturally. Viesti never knows time exists.
High-performance network handling. External system interactions that may leave Bija addresses unpopulated — the graph stays inert, not hung.
File system and database I/O. Session persistence. Translates between external systems and Bija entity state.
Dynamic entity allocation at runtime. Operates in a separate memory pool outside PAF space — PAF and Nësen addresses are unambiguously distinct, no type tag needed.
Keyboard, pointer, touch, and gamepad input handling routed as Bija state updates.
Audio processing and playback. Sound state lives in Bija; Kani functions translate it to hardware output.
User access control and security. Permission state lives in Bija entities; Cead validates it during the compilation pass and at signal routing boundaries.
Encryption and cryptographic safety. Non-determinism is an explicit, declared opt-in through this library.
Compression and storage optimisation. Operates on Bija entity data as a pass — source representation unchanged, only the emitted binary is affected.
Accessibility and semantic markers. Describes meaning for assistive technologies as a separate pass over the entity tree.
Translation and localisation. String resolution from locale tables as a Bija entity pass — no special runtime machinery required.
The full architecture specification covers the PAF binary format, the IDE design, the compilation pipeline, and every invariant the compiler must enforce. v3.0 draft — live document.