Luce / engineering
Learn Luce LuciaOS

The decisions that shape Luce

Checked integers need overflow branches. Isolated workers need graph transfer. Separate structs and classes need two storage models. This section follows how each language rule shapes the compiler and runtime.

How decisions affect the system

The architecture in four arrows

apps → luce moduleproducts consume the language through its public compiler/runtime surface
specs → both pathseach program runs through native code and the MIR interpreter
both paths → runtimeARC and dynamic semantics have one body
artifact → host tablenative code reaches files, clocks, terminals, and other services through a versioned capability interface

How pre-1.0 changes are handled

Before 1.0, a changed spelling or model replaces its earlier form across source, implementation, tests, and documentation. MIR and native ABI versions make older artifacts fail validation so they can be rebuilt from source.

Compatibility and correctness are different jobs. A stale cache can recompile. Preserving two meanings for one pre-release feature would make every later stage and document carry permanent branching complexity.

Current implementation scope

The current implementation centers on native code, one shared runtime, explicit numeric conversion, ARC, final classes, isolated worker heaps, and static name and type resolution. New language mechanisms must define their source rule, representation, runtime behavior, and tests across both execution paths.

How to read the repository documents

Reference documents describe implemented behavior. Plans describe possible future syntax in plain text. Decision records explain established boundaries and the reasons behind them. The document index labels each category.