I’ve been coding in Zig for 6 months now, starting with a 20k LOC port from Rust, and I have yet to encounter a single problem. How is this possible in a language and std library under such heavy development? I have not used the new IO APIs yet, but still!
take a wild guess what the average release cycle duration is ![]()
Haha! I started on 0.14, but your point is taken.
On the contrary, I tried writing a text editor a year ago starting on 0.14 (Or maybe earlier, can’t quite remember), and writergate essentially killed that project for me. It’s been a few months since I’ve worked on it, and I could probably get it working now that there’s presumably more documentation on the new io stuff. I’ll probably rewrite it completely since it was fairly small. But that’s just been my experience, and I’m not the best programmer anyway.
Yeah, the Io changes are a big deal. But I’ve been watching things for a few years (I started another project earlier) and in general it seems to be very stable in the sense that compiler bugs are infrequent. That’s my perception anyway.
Some programs are planned and built carefully since 0.0.1; some are changed crazily and broken so much even if their number is something like 145.0. ![]()
Next time when you run the apt-get upgrade or dnf upgrade , you can see how many essential programs are pre-1.0 for decades, and will probably never reach 1.0, but they are still good…
The key to staying sane is choosing your dependencies wisely. Obviously this applies to your build.zig.zon, but can more subtly extend to the standard library, or even what OS you target, which OS you build on…
The fact is there aren’t a lot of zig projects that have reached dependency hell yet, either by the design of zig encouraging fewer dependencies, or there just not being a lot of software out there yet. There is a quote somewhere where Joran from Tiger Beetle says he picked zig over rust because there wasn’t any code out there to easily depend on, which forced the team to own more.
So in short I think your dependencies are probably few, and your biggest one (zig compiler and std library), is designed in such a way that migrations aren’t too bad (static type checking, no hidden control flow, etc etc)
You can just stick to a particular version. 0.14.1 for me is the sweet spot. The build system is figured out, everything works, no major issues. That’s Zig 1.0.0 as far as I am concerned and everything that’s going on around Io is Zig 2.0.0 ![]()