Back to Docs

|

Every settled decision behind Voyage, recorded before the compiler existed.

Spec-First, Always

Before writing a compiler, the Voyage team wrote the language down: ten Architecture Decision Records (ADR-0001 through ADR-0010), plus grammar.md, type-system.md, and memory-model.md. The full spec phase is complete and lives on the main branch of voyage-org/voyage-lang (23 commits).

Settled Decisions

  • Syntax: Swift-inspired — func/struct/enum/protocol/extension, \(...) interpolation
  • Concurrency: fully reentrant actors via lock-free Channel<T>-backed mailbox loops on the CLR ThreadPool
  • Safety: atomic{'{}'} blocks with zero-runtime-cost compile-time rules — no await inside, transitive-await detection across the whole compilation unit
  • Errors: both typed and untyped throws are supported
  • Returns: implicit return for single-expression function bodies only
  • Modules: resolve directly against CLR assembly metadata — bidirectional C# interop by construction
  • Memory: struct is a CLR value type; class and actor are CLR reference types under a tracing GC, not ARC
  • Keywords: defer adopted, weak repurposed, unowned dropped

Parser Strategy

ADR-0010 settles on a hand-written recursive-descent parser, matching Swift's own approach rather than a parser-generator toolchain.

Design Lineage

Voyage's single-runtime, no-FFI stance is a direct response to lessons learned building Nova AI Lang — where bridging two runtimes added friction the language couldn't design its way out of. Voyage avoids that by targeting the CLR alone.