1. Vision
Mission#
Vader is a general-purpose application language, strongly typed with type inference, and portable (Linux, macOS, Windows, WebAssembly). It is designed to stay simple to learn while allowing performant programs through a transparent compilation pipeline.
Tagline#
"Vader: applicative, simple, portable. The discipline of static typing, the ergonomics of a script."
Explicit non-goals#
- No OOP: no inheritance, no classes, no methods. UFCS (
a.f(b)isf(a, b)) gives the method-call syntax. - No visible pointers: no pointer arithmetic, and memory layout is opaque.
- No implicit
null: a nullable value has an explicit union type,T | null. - No exceptions: errors are values, returned in a union with the success type.
- No text macros and no runtime reflection: metaprogramming goes through typed
@comptime.
Philosophy#
- Simplicity over exotic features: no feature for its own sake.
- Reading over writing: code reads top to bottom. Generics use the familiar
<T>of Java and C#; a local rule tells it apart from the comparison<(§4 Generics). - Compile-time errors over run-time errors: string interpolation, for instance, is type-checked at compile time.
- Rich diagnostics: every phase reports structured diagnostics (
docs/TOOLING.mdDiagnostics), keeps going after an error when it can, and writes messages that read well in a terminal and in an editor. - Evolvability: the pipeline is easy to extend, and every intermediate representation can be dumped.
Vader 1.0, the bootstrap edition#
The 1.0 edition is the set of features the compiler needs to compile itself (docs/BOOTSTRAP.md). It has not been declared yet; until then, the language changes without deprecation. From 1.0 on:
- v1.x: backward-compatible changes (new features, optimisations);
- v2.0: breaking changes, a new edition and a new bootstrap.