C+
Language · v0.0.13

Arrays

Arrays are fixed-size, stack-allocated, and bounds-checked.

let a: [i32; 4] = [10, 20, 30, 40];
let x: i32 = a[2];               // 30; an out-of-range index traps

let mut buf: [i32; 4] = [0, 0, 0, 0];
buf[0] = 5;

for i in 0..4 {
    println(a[i as usize]);
}

Use small [u8; N] arrays for scratch buffers in hot loops. They live on the stack (or in registers after SROA), whereas malloc is real heap allocation that dominates tight loops.

Fill-array literal [EXPR; N]

[EXPR; N] is an array of N copies of EXPR. The codegen fast-paths the [0u8; N] zero-fill to a single llvm.memset (essential for kilobyte-scale stack buffers); other shapes lower to a tight N-iteration store loop the optimizer unrolls.

let zeros: [u8; 64]    = [0u8; 64];       // memset fast path
let ones:  [i32; 4]    = [1; 4];          // (1, 1, 1, 1)
let bytes: [u8; 16384] = [0u8; 16384];    // 16 KiB zero buffer, single memset

The count is a u32 literal, or a non-negative integer const name. The same [T; N] array-type length also accepts a const name, so a fixed buffer size lives in one place and is referenced everywhere:

const CAP: usize = 1024;
let scratch: [u8; CAP] = [0u8; CAP];   // const drives both the type length and the fill

The name must resolve to a const with a non-negative integer-literal initializer in scope; anything else is E0X36.