[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)