Download

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) is f(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.md Diagnostics), 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.