Type resolution redesign, with language changes to taste
Production use and ecosystem stability
- Several users run Zig in production (e.g., databases, compilers, terminals, CLIs).
- Reported upgrade pattern: pin to a release (0.14/0.15), then batch-refactor once or twice a year.
- Core language is seen as relatively stable recently; most churn is in the standard library and build system.
- Third-party packages are fragile across versions; many larger projects avoid them or fork/pin dependencies.
- Some learners find it frustrating that tutorials target 0.15 while they’re trying 0.16/master, where std APIs have shifted.
Tooling, build cache, and incremental compilation
- Large
.zig-cachedirectories (100+ GB) are common for big projects; cleanup is mostly manual today. - Incremental builds exist but are unreliable for some setups; many see full rebuilds of ~20s+ as normal.
- Environment variables or tmpfs are used to centralize/periodically nuke caches.
Type resolution redesign & breaking changes
- The 30k-line type resolution rewrite is viewed as scary but appropriate for pre‑1.0.
- It converts type resolution into a DAG, fixes many long-standing bugs, and improves incremental compilation.
- Authors stress that the user-visible breakage is minor (e.g., small std API adjustments, a few comptime annotations), not a mass rewrite.
Governance and philosophy on breaking changes
- Zig is explicitly BDFN-governed; there’s no formal spec yet, and full transparency isn’t a primary goal.
- One camp sees aggressive breaking changes as healthy cleanup before 1.0, even if it takes many more years.
- Another camp criticizes the culture around breakage, saying deprecation paths are weak and upgrade work is pushed onto users.
- Concern is raised that after ~10 years the language still causes regular breaking changes, with 1.0 seen as distant.
Comparisons with other languages
- Rust: praised for long-term backward compatibility and “closed world” traits; seen as more complex but with stronger safety guarantees.
- Zig: described as “modern C” emphasizing simplicity, explicitness, zero-cost abstractions, and powerful compile-time metaprogramming.
- Odin/C3/D: cited as alternatives with more stable specs and faster compile times; one commenter claims Odin yields more shipped games per user.
- Go: compared as another “modern C” but with GC, making it unsuitable for some real-time/embedded contexts.
Generics, typing model, and ergonomics
anytypeand structural/“duck-typed at compile time” generics are powerful but harder for tooling, docs, and IDEs.- Some users want trait/interface-like constraints; others are skeptical this will be added.
- Discussion around the “zero/empty type” (
noreturn/ uninhabited type) notes that the redesign moves Zig closer to formal type-theoretic semantics.
Build system and namespaces
build.zigis praised for power but criticized as a high barrier to entry and opaque to IDEs.- Zig’s “types as namespaces” design (imports become structs with fields) is seen by some as elegant minimalism rather than a missing namespace feature.
Windows APIs and RNG
- The devlog’s move from higher-level Windows APIs (kernel32/advapi32) to lower-level ones (ntdll) sparks interest; parallels are drawn with
errno-style designs. - A correction notes that modern Windows RNG (
ProcessPrng) is guaranteed not to fail and that some cited usage patterns are outdated.