1. 37
  1. 15

    Okay, time for a freak-out of excitement.

    0.3 includes a litany of things that seem like they were designed specifically to make me love it:

    • zig fmt - nice! One thing I will say Go has going for it is that wars over formatting are a thing of the past.
    • zig run - nice! I can totally foresee leveraging tcc-style shebangs to have Zig scripts!
    • pointer reform:
      • Zig is now in-line with some of what C’s syntax is for pointer-to and address-of which makes it less jarring and more rigorous on meaning
      • explicit separation between pointer-to-single-item and pointer-to-aggregate is awesome; more explicit intention revelation!
      • “all control flow occurs exclusively via keywords” - I love it. This ends the vast majority of syntax misgivings I have had about Zig in the past. It reads better, it’s less overloading of particular symbol meanings; it’s just universally better
    • try is reasonable for all error-handling cases now, including across async/await suspends. Having a single go-to practice for error-handling is lovely
    • @typeInfo - say hello to compile-time reflection! I do not often find myself in need of these things, but having the ability to makes Zig much more widely-usable for higher-level things
    • compatibility with valgrind and gdb - Thank you! Keeping the tools I am already familiar with for debugging is such a boon to my performance

    And last, but absolutely not least:

    • all integer sizes are primitives: arbitrarily-sized, fixed-width integers are now a reality, and their usability is vastly improved. It looks like 0.4 will involve some more huge improvements to this, making them nearly seamless. But they behave so beautifully now already. This is a feature that I want in every language ever.

    I have no words to adequately describe my excitement for this release. I am impatiently awaiting 0.3’s release to the AUR so I can start playing with all the new toys!

    1. 4

      I haven’t gotten to spend as much time playing with zig as I want to yet. But I just wanted to say that it’s really inspirational to see a project like this moving forward.

      1. 2

        Very happy to see Future as part of the async interface e. Now I wonder how Zig compares to Rust (or Pony, for that matter) in terms of managing shared state amongst concurrent agents/threads/coroutines.

        1. 4

          This is one of my fears, mixing threads and coroutines without some sort of language checks. That is basically the origin story of pony. Pony started life as a concurrent C runtime for actors/tasks very much like this, however they kept having crashes due to programmer error.

          1. 1

            I’m reading the No Starch Press Rust book at the moment and it seems to me that the borrow checker is a more primitive version of Pony’s capabilities. I’m really impressed by how powerful the application of capabilities is to concurrent programming safety. I didn’t know about this anecdote on Pony’s history, thanks!

        2. 1

          Zig is starting to look very appealing. As an active Rust user, I probably won’t give it a serious look until it reaches stability, but I’m very much looking forward to that day.

          1. 1

            I like that it has a PEP8 like formatting standard. I wish more languages had that.