Skip to content

Coming from another language ​

Nova borrows deliberately from several languages, and each will feel partly familiar:

  • its syntax from C# and TypeScript: braces, fn name(x: T) -> R, let and var, generics in <…>;
  • its ownership and borrowing from Rust, with less annotation and a simpler checker;
  • its explicit allocators from Zig, with use-after-free made a compile error;
  • its regions from Cyclone, and its compile-through-C design and compiler-managed memory from Goose;
  • its deterministic destruction from C++'s RAII, without the undefined behaviour.

These pages map what you know to Nova, show the same program side by side, and point out the differences that will trip you up.

If you knowReadThe biggest changes
RustNova for Rust programmersno lifetime syntax on plain borrows; allocators per allocation; checks in every build; no macros or traits-as-types
ZigNova for Zig programmersuse-after-free and dangling references are compile errors; checks never turn off; generics instead of comptime
C or C++Nova for C and C++ programmersthe compiler tracks ownership and borrows; no undefined behaviour; no preprocessor
C#, Java or TypeScriptNova for C#, Java and TypeScript programmersno garbage collector, no classes or inheritance, no exceptions, no null references
GoNova for Go programmersno garbage collector; errors propagate with ?; interfaces are explicit and static; no goroutines yet

A comparison of the languages as a whole, in one table, is on the repository's README.

Pre-1.0: the language and its tools are still changing.