Introduction

Jazz is a fast and modern systems programming language designed for game and desktop programs development. Language inspired by C++,Swift,Vala and Rust and main goals is memory safety and compile-time execution.

Why use Jazz?

Build system and package manager

Build system and package manager included into compiler, you can just use jazz new <package name> command to create new project. To import some dependency you can add it's description in build.jazz file:

var dependencies = [
(package: "Example",version: " 0.0.1",git: "https://github.com/user/Lib")
];

Compile-time execution

Jazz allows you to execute a lot of code in compile-time context. This feature allows you to detect something at compile-time instead of run time, for example bit_cast function from standard library uses compile-time assert to throw error at compile-time:

fun bit_cast<T,U>(val: T): U {
comptime {
assert(sizeof(T) == sizeof(U));
}
...
}

Compile-time reflection

You can iterate over enumeration values, get structure methods and fields and etc. You can do a lot of things with reflection in Jazz,just a simple example:

fun fields_string<T>(): Array<String> {
assert(@isStruct<T>());
var fields = @getFields<T>();
var array = Array<String>(cap: fields.size());
for (const field in fields) {
array.push(field.name);
}
return array;
}