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,letandvar, 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 know | Read | The biggest changes |
|---|---|---|
| Rust | Nova for Rust programmers | no lifetime syntax on plain borrows; allocators per allocation; checks in every build; no macros or traits-as-types |
| Zig | Nova for Zig programmers | use-after-free and dangling references are compile errors; checks never turn off; generics instead of comptime |
| C or C++ | Nova for C and C++ programmers | the compiler tracks ownership and borrows; no undefined behaviour; no preprocessor |
| C#, Java or TypeScript | Nova for C#, Java and TypeScript programmers | no garbage collector, no classes or inheritance, no exceptions, no null references |
| Go | Nova for Go programmers | no 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.