zig-knowledge-patch
Zig Knowledge Patch
Claude's baseline knowledge covers Zig through 0.12.x. This skill provides breaking changes and new features in 0.13.0 and 0.14.0.
Breaking Changes Quick Reference
| Version | Change | Impact | Details |
|---|---|---|---|
| 0.13.0 | ComptimeStringMap -> StaticStringMap |
API rename + new init pattern | stdlib-changes |
| 0.13.0 | zig-cache -> .zig-cache |
Update .gitignore | stdlib-changes |
| 0.13.0 | std.Progress rework |
Pass Node by value, new init API |
stdlib-changes |
| 0.14.0 | std.builtin.Type fields lowercased |
.Int -> .int, .Struct -> .@"struct" |
language-changes |
| 0.14.0 | @setCold removed |
Use @branchHint(.cold) |
language-changes |
| 0.14.0 | @fence removed |
Use stronger atomic orderings | language-changes |
| 0.14.0 | @export takes pointer |
Add & operator |
language-changes |
| 0.14.0 | CallingConvention overhauled |
Tagged union, .C -> .c |
language-changes |
| 0.14.0 | Anonymous struct types removed | Tuples unified, structural equivalence | language-changes |
| 0.14.0 | GeneralPurposeAllocator -> DebugAllocator |
New init pattern | stdlib-changes |
| 0.14.0 | ArrayList deprecated |
Use ArrayListUnmanaged, pass allocator |
stdlib-changes |
| 0.14.0 | std.mem.page_size removed |
Use std.heap.pageSize() |
stdlib-changes |
| 0.14.0 | Build API: root_module |
addExecutable takes root_module |
build-system |
| 0.14.0 | Package hash format changed | New format includes name/version/fingerprint | build-system |
New Language Features (0.14.0)
Labeled Switch
Switch statements can be labeled and targeted by continue for state machines:
foo: switch (@as(u8, 1)) {
1 => continue :foo 2, // jump to case 2
2 => continue :foo 3,
3 => return,
else => unreachable,
}
Generates optimized branch prediction code. Also supports break from labeled switch.
Decl Literals
.foo syntax resolves to declarations on the target type (not just enum variants):
const S = struct {
x: u32,
const default: S = .{ .x = 123 };
fn init(val: u32) S {
return .{ .x = val + 1 };
}
};
const a: S = .default; // S.default
const b: S = .init(100); // S.init(100)
Key pattern: Unmanaged containers use .empty instead of .{}:
var list: std.ArrayListUnmanaged(u32) = .empty;
foo: std.ArrayListUnmanaged(u32) = .empty, // as struct field default
Fields and declarations in the same container cannot share names.
@branchHint
Replaces @setCold. Must be first statement in block:
@branchHint(.unlikely); // .none, .likely, .unlikely, .cold, .unpredictable
@FieldType Builtin
comptime assert(@FieldType(MyStruct, "field_name") == u32);
@splat for Arrays
var pixels: [W][H]Rgba = @splat(@splat(.black));
See references/language-changes.md for full details.
Standard Library (0.14.0)
Allocator Changes
// DebugAllocator (replaces GeneralPurposeAllocator)
var debug_allocator: std.heap.DebugAllocator(.{}) = .init;
const gpa = debug_allocator.allocator();
defer _ = debug_allocator.deinit();
// SmpAllocator (for ReleaseFast, competitive with glibc)
const allocator = std.heap.smp_allocator;
New remap on Allocator.VTable enables relocation during resize (uses mremap on Linux).
Unmanaged Containers (managed versions deprecated)
var list: std.ArrayListUnmanaged(i32) = .empty;
defer list.deinit(gpa);
try list.append(gpa, 1234); // allocator passed to methods
Same for ArrayHashMapUnmanaged. popOrNull renamed to pop.
ZON Support
Runtime: std.zon.parse.fromSlice(T, allocator, zon_bytes, .{}).
Compile-time: const cfg: Config = @import("config.zon");.
Runtime Page Size
std.heap.pageSize() (runtime, memoized). Comptime bounds: page_size_min, page_size_max.
See references/stdlib-changes.md for full details.
Build System (0.14.0)
File System Watching
zig build --watch # rebuilds on source changes
zig build --watch --debounce 100 # custom debounce (default 50ms)
Module-First API
const mod = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
const exe = b.addExecutable(.{ .name = "hello", .root_module = mod });
// Reuse same module for tests:
const tests = b.addTest(.{ .name = "hello-test", .root_module = mod });
Incremental Compilation (opt-in)
zig build -Dno-bin -fincremental --watch # fast error-checking loop
x86 Backend
98% behavior test pass rate. Select with -fno-llvm. Expected default for debug mode in 0.15.0.
See references/build-system.md for full details.
Major Deprecation Removals (0.14.0)
Now compile errors: std.mem.tokenize (use tokenizeAny/tokenizeSequence/tokenizeScalar), std.mem.split (use splitSequence/splitAny/splitScalar), std.rand (use std.Random), std.TailQueue (use std.DoublyLinkedList), std.zig.CrossTarget (use std.Target.Query), std.fs.MAX_PATH_BYTES (use max_path_bytes).
Reference Files
| File | Contents |
|---|---|
| language-changes.md | Labeled switch, decl literals, @branchHint, @fence removal, CallingConvention, type field renames, packed struct changes, tuple unification |
| stdlib-changes.md | DebugAllocator, SmpAllocator, remap API, unmanaged containers, ZON, runtime page size, StaticStringMap, Progress rework, deprecations |
| build-system.md | --watch, root_module API, addLibrary, package hash format, incremental compilation, fuzzer, WriteFile/RemoveDir changes |
More from nevaberry/nevaberry-plugins
dioxus-knowledge-patch
Dioxus changes since training cutoff (latest: 0.7.4) — Signals replacing use_state, RSX macro overhaul, server functions, asset!() system, dx CLI, Element-as-Result. Load before working with Dioxus.
46rust-knowledge-patch
Rust changes since training cutoff (latest: 1.94.0) \u2014 Rust 2024 Edition, async closures, trait upcasting, new std APIs, cargo resolver v3. Load before working with Rust.
20postgresql-knowledge-patch
PostgreSQL changes since training cutoff (latest: 18.1) — JSON_TABLE, SQL/JSON functions, MERGE RETURNING, virtual generated columns, UUIDv7, temporal PRIMARY KEY. Load before working with PostgreSQL.
16bun-knowledge-patch
Bun changes since training cutoff (latest: 1.3.10) \u2014 S3 client, built-in SQL/Redis, route-based HTTP server, CSS bundler, V8 compatibility. Load before working with Bun.
14nextjs-knowledge-patch
Next.js changes since training cutoff (latest: 16.1) — proxy.ts, \"use cache\", Cache Components, navigation hooks, typed routes, auto PageProps, React 19.2. Load before working with Next.js.
14postgis-knowledge-patch
PostGIS changes since training cutoff (latest: 3.6.1) — SFCGAL CG_* rename, ST_CoverageClean, ST_AsRasterAgg, topology bigint IDs, viewport simplification, 3D SFCGAL ops. Load before working with PostGIS.
13