Something went wrong. Try again.
A general purpose .. programming language written in zig ijadux2.tngl.sh/Rinnescript
zig language
Something went wrong. Try again.
2.7 kB
Markdown
tensor — n-dimensional arrays with SIMD kernels #
Tensors are contiguous, row-major, CPU-resident arrays with typed elements.
Construction #
@import = .{ std };
const t = @tensor(f32, [2, 3], .{ .device = .cpu, .fill = 1.5 });
- First argument: element dtype (
f32,f64,i32,i64,u8,bool). - Second: shape array (1..8 dimensions, positive).
- Optional options struct:
.device = .cpu(default)..cuda/.rocmare not available in v1 and fail at runtime with a clear degrade error..fill = value— initialize every element (coerced to the dtype).
Methods and indexing #
| Method | Returns / effect |
|---|---|
t.shape() |
array of dimension sizes |
t.numel() |
total element count |
t.dtype() |
dtype name string |
t.fill(v) |
overwrite every element with v |
t.data() |
copy-out as a plain array |
t[i], t[i] = v |
linear indexing (row-major order) |
t.deinit() |
free the tensor; idempotent, further use is an error |
@import = .{ std };
const t = @tensor(f32, [6], .{ .device = .cpu, .fill = -1.5 });
std.print("{} {} {}\n", .{t.shape(), t.numel(), t.dtype()});
Note:
defer t.deinit()does not work in v1 — deferred blocks cannot see enclosing locals. Calldeinit()explicitly before returning.
apply_simd — element-wise kernels #
Anonymous function literals are only allowed as the kernel of apply_simd.
The kernel runs once per element; the parameter annotation @vector(N, T) is
a lane-width hint for the future native backend (the VM interprets it
scalar-wise today; tails are padded automatically):
apply_simd transforms the tensor in place (the kernel's return value is
written back to each element) and returns nothing:
@import = .{ std };
t.apply_simd(fn(x: @vector(8, f32)) f32 {
if x < 0.0 { return 0.0; }
return x;
});
// t now holds the ReLU'd values
Native backend #
The C11 codegen path (rinne build) rejects tensors, method calls, kernels,
and the ai/llm builtins with explicit errors — they are VM-only features.
Runnable example #
@import = .{ std };
pub fn main() int {
const t = @tensor(f32, [6], .{ .device = .cpu, .fill = -1.5 });
t[1] = 2.0;
t[3] = 4.25;
t.apply_simd(fn(x: @vector(8, f32)) f32 {
if x < 0.0 { return 0.0; }
return x;
});
std.print("relu={}\n", .{t.data()});
t.deinit();
return 0;
}