Completing the Language
design-not-supported

What Zig features do we deliberately NOT support?

Array iteration (for (array) |item|): our arrays don't carry length. Use for (0..count) |i| { arr[i] ... }.

@intCast / @as: type casting. Not needed -- everything is i64.

Pointers: restructure shared code to pass values, not addresses.

Complex initializers ([_]i64{0} ** 256): our arrays zero-initialize via the heap. Accept = undefined.

The rule: add a feature only when avoiding it would change the code's structure, not merely its spelling.

## Part 11: The Compiler, in Its Own Language

We've proven every piece individually. streq_mem compares strings. emit_byte, emit_s, emit_num write output. The scanner reads source bytes. Now we assemble them into a complete compiler -- written in the language we built, using every feature we added in Part 10.

Every function here compiles under both our compiler and the Zig compiler. That's the test: one source, two compilers, same result.

### I/O