127 pointsby Retro_Dev5 hours ago2 comments
  • h4ch14 hours ago
    I would really like to hear from people using Zig in production/semi-serious applications; where software stability is important.

    How's your experience with the constantly changing language? How're your update/rewrite cycles looking like? Are there cases where packages you may use fall behind the language?

    I know Bun's using zig to a degree of success, was wondering how the rest were doing.

    • rtfeldman2 hours ago
      I maintain a ~250K LoC Zig compiler code base [0]. We've been through several breaking Zig releases (although the code base was much smaller for most of that time; Writergate is the main one we've had to deal with since the code base crossed the 100K LoC mark).

      The language and stdlib changing hasn't been a major pain point in at least a year or two. There was some upgrade a couple of years ago that took us awhile to land (I think it might have been 0.12 -> 0.13 but I could be misremembering the exact version) but it's been smooth sailing for a long time now.

      These days I'd put breaking releases in the "minor nuisance" category, and when people ask what I've liked and disliked about using Zig I rarely even remember to bring it up.

      [0]: https://github.com/roc-lang/roc

    • nickysielicki34 minutes ago
      The forever backwards compatible promise of C++ was a tremendous design mistake that has resulted in mindshare death as of 2026. It might suck to have to modify your code to continue to get it to work, but it’s the right long term approach.
      • fouronnes329 minutes ago
        Mindshare death is a very large overstatement given the massive amount of legacy C++ out there that will be maintained by poor souls for year to come. But you are right, there used to be a great language hiding within C++ if the committee ever dared to break backwards compat. But even if they did it now it would be too late and they'd just end up with a worse Rust or Zig.
    • latch3 hours ago
      Zig 0.15 is pretty stable. The biggest issue I face daily are silent compiler errors (SIGBUS) for trivial things, e.g. a typo in an import path. I've yet to find exactly why this [only sometimes] causes such a crash, but they're a real pain to figure out over a large changeset. `zig ast-check` sometimes catches the error, else Claude's pretty good at spotting where I accidentally re-used a variable name (again, 90% of the time I do that, it's an easy error, but the other 10%, I get a message-less compiler crash). It sounds like the changes in the OP might be specifically addressing these types of issues.

      Also, my .zig-cache is currently at 173GB, which causes some issues on the small Linux ARM VPS I test with.

      As for upgrades. I upgraded lightpanda to 0.14 then 0.15 and it was fine. I think for lightpanda, the 0.16 changes might not be too bad, with the only potential issue coming from our use of libcurl and our small websocket server (for CDP connections). Those layers are relatively isolated / abstracted, so I'm hopeful.

      As a library developer, I've given up following / tracking 0.16. For one, the change don't resonate with me, and for another, it's changing far too fast. I don't think anyone expects 0.16 support in a library right now. I've gotten PRs for my "dev" branches from a few brave souls and everyone seems happy with that arrangement.

      • sidkshatriya17 minutes ago
        > The biggest issue I face daily are silent compiler errors (SIGBUS) for trivial things, e.g. a typo in an import path.

        I don't use zig. My experience has been that caches themselves are sources of bugs (not talking about zig only, but in general). Clearing all relevant caches occasionally is useful when you're experiencing weird bugs.

      • quag3 hours ago
        That .zig-cache seems massive to me. I keep mine on a tmpfs and remove it every time the tmpfs is full.

        Do you see any major problems when you remove your .zig-cache and start over?

        • latch3 hours ago
          Just a slower build. From ~20 seconds to ~65 seconds the first time after I nuke it.
          • h4ch1an hour ago
            But why is it so big in the first place?

            I was searching around for causes and came across the following issues: https://github.com/ziglang/zig/issues/15358 which was moved to https://codeberg.org/ziglang/zig/issues/30193

            The following quotes stand out

            > zig's caching system is designed explicitly so that garbage collection could happen in one process simultaneously while the cache is being used by another process.

            > I just ran WizTree to find out why my disk was full, and the zig cache for one project alone was like 140 GB.

            > not only the .zig-cache directory in my projects, but the global zig cache directory which is caching various dependencies: I'm finding each week I have to clear both caches to prevent run-away disk space

            Like what's going on? This doesn't seem normal at all. I also read somewhere that zig stores every version of your binary as well? Can you shed some light on why it works like this in zigland?

            • Cloudefan hour ago
              AFAIK garbage collection is basically not implemented yet. I myself do `ZIG_LOCAL_CACHE_DIR=~/.cache/zig` so I only have to nuke single directory whenever I feel like it.
          • sgtan hour ago
            Does Zig have incremental builds yet? Or is it 20 secs each time for your build.
            • latchan hour ago
              20 seconds each time. Last time I tried to enable incremental build, it wasn't working for us. It was a while ago, but I think it had to do with something in our v8 bridge.
              • sgt35 minutes ago
                I have heard that from other Zig devs too. Must get a bit annoying as the project grows. But I guess it will be supported sooner or later.
    • boomlinde2 hours ago
      I stopped updating the compiler at 0.14 for three projects. Getting the correct toolchain is part of my (incremental) build process. I don't use any external Zig packages.

      I think one of the more PITA changes necessary to get these projects to 0.15 is removing `usingnamespace`, which I've used to implement a kind of mixin. The projects are all a few thousand LOC and it shouldn't be that much trouble, but enough trouble that none of what I gain from upgrading currently justify doing it. I think that's fine.

    • Cloudef4 hours ago
      The language itself does not change much, but the std does. It depends on individuals, but some people rely less on the std, some copy the old code that they still need.

      > Are there cases where packages you may use fall behind the language?

      Using third party packages is quite problematic yes. I don't recommend using them too much personally, unless you want to make more work for yourself.

    • throwaway274482 hours ago
      For those like me who have never heard of this software: Bun, some sort of package management service for javascript. https://en.wikipedia.org/wiki/Bun_(software)
      • beoberha2 hours ago
        Bun is a full fledged JavaScript runtime! Think node.js but fast
        • throwaway27448an hour ago
          > Think node.js but fast

          Color me extremely sceptical. Surely if you could make javascript fast google would have tried a decade ago....

          • leonflexo43 minutes ago
            Bun uses JSC (JavaScriptCore) instead of V8. From what I understand, whereas Node/V8 has a higher tier 4 "top speed", JSC is more optimized for memory and is faster to tier up early/less overhead. Good for serverless. Great for agents -> Anthropic purchase.
            • throwaway2744826 minutes ago
              > Good for serverless. Great for agents -> Anthropic purchase.

              Surely nobody would use javascript for either yea? The weaknesses of the language are amplified in constrained environments: low certainty, high memory pressure, high startup costs.

              • messea minute ago
                > Surely nobody would use javascript for either yea?

                It's probably the most popular language for serverless.

          • undeveloper23 minutes ago
            they have, v8 is a pretty fast engine and an engineering marvel. bun is faster at cost of having worse jit and less correctness
    • scuff3d36 minutes ago
      Mitchell Hashimoto (developer of Ghostty) talks about Zig a lot. Ghostty is written in it, and he seems to love it. The churn doesn't seem to bother him at all.

      I asked him about in a thread a while back: https://news.ycombinator.com/item?id=47206009#47209313

      The makers of TigerBeatle also rave about how good Zig is.

    • Escapade51603 hours ago
      I recently tried to learn it and found it frustrating. A lot of docs are for 0.15 but the latest is (or was) 0.16 which changed a lot of std so none of the existing write ups were valid anymore. I plan to revisit once it gets more stable because I do like it when I get it to work.
      • Cloudef3 hours ago
        0.16 is the development version. 0.15.2 is latest release.
  • throwaway17_173 hours ago
    Congratulations to the dev, a 30,000 line PR for a language compiler (and a very much non-trivial compiler) is a feat to be proud of. But a change of this magnitude is a serious bit of development and gave me pause.

    I understand both of the following:

    1. Language development is a tricky subject, in general, but especially for those languages looking for wide adoption or hoping for ‘generational’ (program life span being measured in multiple decades) usage in infrastructure, etc.

    2) Zig is a young-ish language, not at 1.0, and explicitly evolving as of the posting of TFA

    With those points as caveats, I find the casualness of the following (from the codeburg post linked on the devlog) surprising:

    ‘’’This branch changes the semantics of "uninstantiable" types (things like noreturn, that is, types which contain no values). I wasn't originally planning to do this here, but matching the semantics of master was pretty difficult because the existing semantics don't make much sense.’’’

    I don’t know Zig’s particular strategy and terminology for language and compiler development, but I would assume the usage of ‘branch’ here implies this is not a change fully/formally adopted by the language but more a fully implemented proposal. Even if it is just a proposal for change, the large scale of the rewrite and clear implication that the author expects it to be well received strikes me as uncommon confidence. Changing the semantics of a language with any production use is nearly definitionally MAJOR, to just blithely state your PR changes semantics and proceed with no deep discussion (which could have previously happened, IDK) or serious justification or statements concerning the limited effect of those changes is not something I have experienced watching the evolution (or de-evolution) of other less ‘serious’ languages.

    Is this a “this dev” thing, a Zig thing, or am just out of touch with modern language (or even larger scale development) projects?

    Also, not particularly important or really significant to the overall thrust of TFA, but the author uses the phrase “modern Zig”, which given Zig’s age and seeming rate of change currently struck me as a very funny turn of phrase.

    • smj-edison3 hours ago
      mlugg is one of the core contributors of Zig, and is a member of the Zig foundation iirc. They've been wanting to work on dependency resolution for a while now, so I'm really glad they're cleaning this up (I've been bitten before by unclear circular dependency errors). There's not a formal language spec yet, since it's moving pretty fast, but tbh I don't see the need for a standard, since that's not one of their goals currently.
    • AndyKelley3 hours ago
      Originally, Zig's type system was less disciplined in terms of the "zero" type (also known as "noreturn").

      This was proposed, discussed, and accepted here: https://github.com/ziglang/zig/issues/3257

      Later, Matthew Lugg made a follow-up proposal, which was discussed both publicly and in ZSF core team meetings. https://github.com/ziglang/zig/issues/15909

      He writes:

      > A (fairly uncontroversial) subset of this behavior was implemented in [the changeset we are discussing]. I'll close this for now, though I'll probably end up revisiting these semantics more precisely at some point, in which case I'll open a new issue on Codeberg.

      I don't know how evident this is to the casual HN reader, but to me this changeset very obviously moves Zig the language from experimental territory a large degree towards being formally specified, because it makes type resolution a Directed Acyclic Graph. Just look at how many bugs it resolved to get a feel for it. This changeset alone will make the next release of the compiler significantly more robust.

      Now, I like talking about its design and development, but all that being said, Zig project does not aim for full transparency. It says right there in the README:

      > Zig is Free and Open Source Software. We welcome bug reports and patches from everyone. However, keep in mind that Zig governance is BDFN (Benevolent Dictator For Now) which means that Andrew Kelley has final say on the design and implementation of everything.

      It's up to you to decide whether the language and project are in trustworthy hands. I can tell you this much: we (the dev team) have a strong vision and we care deeply about the project, both to fulfill our own dreams as well as those of our esteemed users whom we serve[1]. Furthermore, as a 501(c)(3) non-profit we have no motive to enshittify.

      [1]: https://ziglang.org/documentation/master/#Zen

      It's been incredible working with Matthew. I hope I can have the pleasure to continue to call him my colleague for many years to come.

      • hitekker25 minutes ago
        > Zig the language from experimental territory a large degree towards being formally specified

        Great to hear; I look forward to seeing the language spec one day.

    • rowanG0773 hours ago
      Just thinking out loud here, perhaps behavior like this has been more normalized because of the total shitshow that C is. Which followed all these supposedly correct rules.
    • jibal2 hours ago
      > I don’t know Zig’s particular strategy and terminology for language and compiler development

      Indeed you don't ... perhaps you should have asked.

      > I would assume

      Generally a bad idea.

      > which could have previously happened, IDK

      Indeed you don't. Perhaps you should have asked.

      Check the response from the language BDFN, Andrew Kelley.

      • saghm27 minutes ago
        They literally ended the comment by asking. I don't get why you're criticizing them for providing context that they're not an expert. You're literally distracting from the comment you're telling them has useful information on it, but in a weirdly aggressive way.
      • 8n4vidtmkvmk21 minutes ago
        This seems unnecessarily hostile. They are asking. Here.