Skip to content

Primitives

Helix has several built-in primitive types that are essential for programming. These include:

TypeSizeDescription
i81 byte8-bit signed integer
i162 bytes16-bit signed integer
i324 bytes32-bit signed integer
i648 bytes64-bit signed integer
u81 byte8-bit unsigned integer
u162 bytes16-bit unsigned integer
u324 bytes32-bit unsigned integer
u648 bytes64-bit unsigned integer
f324 bytes32-bit floating point
f648 bytes64-bit floating point
bool1 byteBoolean type (true or false)
char2-4 bytesWide Character type (Unicode)
void0 bytesRepresents the absence of a value

We also have a few container types built-in:

TypeDescription
stringA sequence of wide characters (UTF-16 encoded)
nstringA C++ style string (sequence of 8-bit chars)
array::<T, N>A fixed-size array of type T with N elements (alias to c++ std::array)
vec::<T>A dynamic array (resizable) of type T (alias to c++ std::vector)
map::<K, V>A key-value store mapping keys of type K to values of type V (alias to c++ std::unordered_map)
set::<T>A collection of unique elements of type T (alias to c++ std::unordered_set)
tuple::<T1, T2, ...>A fixed-size collection of elements of different types
T?An optional type that can have null, panic or a value of type T
*TA pointer to a value of type T
ref!(T)A reference to a value of type T
mref!(T)A mutable reference to a value of type T
std::Legacy::charA C++ style char (8-bit)
std::Legacy::array::<T>A C-style dynamic array (alias to c++ T[])
std::Memory::buffer::<T, N>A C-style fixed size buffer of type T with N elements (alias to c++ T[N])

Here is an example of using some of these primitive types:

fn main() {
var my_int: i32 = 42;
var my_float: f64 = 3.14;
var my_bool: bool = true;
var my_char: char = 'A';
var my_string: string = "Hello, Helix!";
var my_narrow_string: nstring = r"Hello, C++!";
var my_array: array::<i32, 5> = array::<i32, 5>(1, 2, 3, 4, 5);
var my_vector: vec::<f64> = [(1.1 as f64), 2.2, 3.3];
my_vector.push_back(1.1);
my_vector.push_back(2.2);
var my_map: map::<string, i32> = {"one": 1, "two": 2, "three": 3};
var my_set: set::<i32> = {1, 2, 3, 4, 5};
var my_tuple: tuple::<i32, string, bool> = (42, "Answer", true);
var my_optional: i32? = 100;
var my_pointer: *i32 = &my_int;
var my_ref: ref!(i32) = my_int;
var my_rval_ref: mref!(i32) = std::Memory::move(my_int);
}