nyx is a simple, interpreted language written in C++.
/*
* Class to implement a wrapper around a tuple
*/
class Foo {
// Variable to store the tuple
public var x = {1, "2", 3.0};
public fn Foo() -> Foo { println("Constructors!"); }
public fn ~Foo() -> null { println("And destructors too!"); }
}
fn main() -> int {
const foos = [Foo(); 5] // Store 5 `Foo`s
var range = 0..size(foos)
ref range_ref = range // Make a reference to `range`
for (var i = 0; i < size(foos); ++i) {
const index = i + foos[i].x.0 - 1
println(range_ref[index])
}
return 0
}A reference of the language grammar is available in the file grammar.bnf.
- Strict, statically-typed type system
- Lexical scoping
- Deterministic object lifetimes, enabling the use of destructors
- No Garbage Collector
- Pseudo-UFCS, where methods are simply free functions scoped to the class name
- Optional semicolons, where a newline can be used as a statement terminator instead of a semicolon
- Copy, reference and move semantics
- Any C++ compiler supporting C++17
- A build system such as
makeorninja cmake3.10 or later
The following commands will place the nyx executable in the build/ directory
created at the project root
cmake -Bbuild .
cmake --build build/If a build system other than make is preferred, it can additionally be passed
to cmake using the -G flag, for example cmake -G Ninja ....
The build type can be specified as Debug or Release using the --config
flag to cmake, for example cmake --config Release ....
Note: The release build enables LTO, so if clang is being used, linkers
like gold, lld which can compile clang's ThinLTO output are needed.
The source code of nyx is licensed under GPLv3, and imported libraries have
their own licenses.