[HN Gopher] Zig 0.16.0 Release Notes
___________________________________________________________________
Zig 0.16.0 Release Notes
Author : ska80
Score : 108 points
Date : 2026-04-14 15:46 UTC (7 hours ago)
(HTM) web link (ziglang.org)
(TXT) w3m dump (ziglang.org)
| sionisrecur wrote:
| The "Juicy Main" looks like a very nice QoL feature. Gets rid of
| all the boilerplate for allocators and argv.
| mihaelm wrote:
| It's the dark horse of this release as CLI parsing can also be
| more easily built on top of it. There's a couple of proposals
| floating around now, so I hope we get something soon-ish (maybe
| in 0.18 since a short cyle is planned for 0.17).
| fredyr wrote:
| This sounds interesting to me - could you elaborate a little
| on what things are in those proposals?
| mihaelm wrote:
| Sure, this is the issue tracking the work:
| https://codeberg.org/ziglang/zig/issues/30677
|
| The idea is to offer some kind of CLI parsing in the std.
| It says minimal, but the discussion also veers into some
| more advanced options.
|
| The discussion resulted in two PRs (that I know of):
|
| - _Type-driven_ :
| https://codeberg.org/ziglang/zig/issues/30677
|
| @dotcarmen extracted it into a package
| (https://codeberg.org/dotcarmen/clip) so people could more
| easily try it out.
|
| - _Composition-based_ :
| https://codeberg.org/ziglang/zig/pulls/31620
|
| If you're familiar with Rust's clap, it's a bit like derive
| vs builder API.
|
| You can also see how each approach would look in practice
| if you inspect the diff for the "tools" directory on the
| PRs.
| fredyr wrote:
| Thanks!
| portly wrote:
| Do I get it right that this is everything you need for a
| typical CLI tool?
| nesarkvechnep wrote:
| You got that right.
| portly wrote:
| That's clean.
| _bohm wrote:
| I've been waiting eagerly for this release ever since the new Io
| interface was announced. Pumped to start working on some new
| projects with this!
|
| Love this line from the release notes:
|
| > Lo! Lest one learn a lone release lesson, let proclaim:
| "cancelation" should seriously only be spelt thusly (single "l").
| Let not evil, godless liars lead afoul.
| xeubie wrote:
| What a banger of a release. The new `Io` interface was a huge
| breaking change for my project, but I made the transition. Zig
| seems to be pulling the same trick it pulled with allocators:
| just make it an explicit value that you pass around. Explicit
| allocators felt obviously right in retrospect, and so far this
| feels obviously right too.
| mihaelm wrote:
| The approach feels like a natural extension of Zig's philosophy
| about explicitness around low-level operations (no hidden
| control flow, no hidden memory allocations, etc.). Your
| function can be blocking? Communicate that through the function
| signature! Very in style for the language.
| mihaelm wrote:
| Obviously, I/O as an interface is the headliner here, but there
| are lots of other goodies to pay attention to, such as the "juicy
| main".
|
| Small integers auto coercing into floats is a nice gift to game
| devs. It's nice that game dev is acknowledged as one of the
| niches Zig can target as I believe it could really thrive there
| due to how easily it can integrate with C & C++. Or, rather, more
| easily than the alternatives.
| slopinthebag wrote:
| Have they said how many breaking changes requiring a rewrite Zig
| will be going through before it stabilises?
|
| Also I thought Zig doesn't have interfaces....how does the IO one
| work?
| pjmlp wrote:
| It has C style interfaces, meaning structs with function
| pointers.
|
| Which is basically how most device drivers in OSes that happen
| to be written in C, including UNIX flavours, work.
| badtuple wrote:
| Interfaces can still be expressed using vtables. You just have
| to write the vtable yourself rather than have the language do
| it for you.
|
| Also, Zig's tagged unions (enums with payloads in Rust) are
| really ergonomic and often what you want instead of interfaces.
| Alot of languages that use interfaces simply don't expose a
| good way of doing it so everyone reaches for interfaces by
| default. But if you don't need an actual interface then this
| way you don't even have to pay the cost of runtime dynamic
| dispatch.
| nesarkvechnep wrote:
| Nice! I'm sad to see SegmentedList go. Also, I'm wondering if
| it's possible to use `recvmsg` and `sendmsg` backed by the new
| `Io` interface.
| ksec wrote:
| I/O, Linked, Incremental Compilation. Apart from 0.17 being a
| short release cycle. I wonder how many more releases before 1.0?
|
| Are we looking at 0.20, another one and half year of baking?
___________________________________________________________________
(page generated 2026-04-14 23:01 UTC)