Language tour¶
This page is a practical tour of the syntax you actually see in Novus projects.
Modules and imports¶
Variables and basic types¶
The ecosystem strongly prefers explicit integer sizes like i32 and i64.
Functions¶
Functions can return values:
Overloading¶
Novus supports function overloading when parameter types differ.
Conditionals¶
Loops¶
Strings¶
Arrays¶
Conditional compilation¶
Novus uses #if(...) for compile-time platform selection.
#if(os == "darwin") {
import platforms/darwin/arm64;
}
#if(os == "linux") {
import platforms/linux/common;
}
You will see this constantly in official libraries.
Common conditions¶
#if(os == "darwin")#if(os == "linux")#if(os == "windows")#if(arch == "arm64")#if(arch == "amd64")#if(arch == "x86")
Builtins versus libraries¶
Some things are compiler builtins:
lenarray_appendmovgetregsyscallptr
Most everyday work should still go through libraries such as std, file_io, window, net, or physics.
A complete small example¶
module example;
import lib/std std;
fn describe(value: i32) -> str {
return "number " + std.to_str(value);
}
fn describe(value: str) -> str {
return "text " + value;
}
fn main() -> i32 {
let xs: []i32 = [1, 2, 3];
std.print(describe(std.len(xs)));
std.print(describe("ready"));
std.exit(0);
return 0;
}