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.
I did a really tiny contribution about zig cc supporting -exported_symbols_list, which together with the hack of filtering out -liconv makes for a very viable linux -> macOS Rust cross-compiler. There's a few caveats but those have been manageable so far.
Absolutely in awe of Zig as a project.
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.
Also I thought Zig doesn't have interfaces....how does the IO one work?
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.
Which is basically how most device drivers in OSes that happen to be written in C, including UNIX flavours, work.
The "module" system is another hack.
Seems like a big one! I wonder how it will impact real code performance
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.
Are we looking at 0.20, another one and half year of baking?
An argument could be made that why it's taking so long is about the language's BDFL wanting the freedom to continually make breaking changes. As it is, they got another bewildering pass for sweeping 3,000 plus issues under the rug, with the move from GitHub to Codeberg.
No one's been giving passes bewildering or otherwise for sweeping issues under the rug, because that didn't happen. The 0.16 release notes are linking to plenty of GitHub issues. If you have additional information to post on an issue then you can copy it to Codeberg: https://codeberg.org/ziglang/zig/issues/30027
Just being ambitious isn’t necessarily good. Look at Perl6.
Or you end up like NIM which they are on 3rd or 4th version already.
And frankly speaking, a lot of people took to Wiki and said it has been 10 years, in reality Andrew only started working on it full time in 2018, and had a year off due to other personal issues, and then COVID hit. Together It is more like 6 years than 10.
If you instead look at the over 500 kloc of the Zig source compared to the 70 kloc of the Odin one, it’s a bit clearer why the delay happened: the goals of Zig kept expanding.
But not only that: ”juicy main” and Io is something that could have been in Zig from the early days and yet it isn’t. In the Io case it’s Zig pivoting from ”we have colorless async!” to no async, to Io.
In other words, Andrew is still experimenting with the language (and more is to come, like ranged integers). This is not the signs of a maturing language, it a language still very much in flux, trying to find its form.
The contrast to Odin is that for the last 2-3 years it has had minimal syntax tweaks, and is essentially in release candidate mode for the language.
Even if Zig didn’t need more changes, it would still need that stabilization period.
This tells us Zig is still rather far from 1.0.
I wonder what Andrew is thinking about all this.