class Buffer { static from(ptr: usize): Buffer { return changetype>(ptr); } @operator("[]") @inline get(index: i32): T { return load(changetype(this) + (index << alignof())); } @operator("[]=") @inline set(index: i32, value: T): void { store(changetype(this) + (index << alignof()), value); } slice(startIndex: i32): Buffer { return changetype>(changetype(this) + (startIndex << alignof())); } // ... } var buf = Buffer.from(0); buf[0] = 1.1; buf[1] = 1.2; assert(buf[0] == 1.1); assert(buf[1] == 1.2); assert(buf.get(0) == 1.1); assert(buf.get(1) == 1.2); assert(load(0) == 1.1); assert(load(4) == 1.2); buf.set(2, 1.3); assert(buf[2] == 1.3); assert(buf.get(2) == 1.3); assert(load(8) == 1.3); assert(buf.slice(1) === changetype>(4));