← Back to context

Comment by epolanski

8 hours ago

This sounds like great news, Zig's compilation times are already terrific and this is going to only make them better.

> Zig's compilation times are already terrific

In my experience, this (for now) is mostly aspirational. It's obviously a major goal, and there are clear milestones outlined on how to achieve it, but in practice the initial compile of an empty project or the excruciating pause when you `direnv allow` and ZLS needs to be (re)built are not what I'd describe as "terrific".

  • >(re)built are not what I'd describe as "terrific".

    It sounds like you are a strong candidate to try out the new improvements mentioned in this devlog and see what benefits you can get for yourself.

Just creating a file with dummy test like

if (2 * 2 != 5) { @panic("fail"); }

And running `zig test file.zig -OReleaseSafe` takes a couple seconds on my computer. It also keeps taking the same amount of time every time I do it when I modify that file. Using 0.16 (or master) version so my toolchain isn't old and I'm on linux.

Zig is super nice to use as a language but the compiler/stdlib isn't developed conservatively enough imo.

You may not run into an issue like this when starting out with hello world but you will want to run optimized binaries for fuzz testing or benchmarking. And then it becomes super annoying considering you might be compiling a relatively small amount of code.

Just for comparison, imo Zig is a much better language than these other languages, but if you did something like this in Rust/C++/C etc. this kind of issues basically doesn't ever happen. Assuming clang/gcc/ninja etc. usage for C/C++.

I am able to use Ninja/Python/clang for configuring/building (-O2 or -O3)/testing ~10k loc C++ project in 200ms on the same computer for example.

  • > Just creating a file with dummy test like

    > if (2 * 2 != 5) { @panic("fail"); }

    > And running `zig test file.zig -OReleaseSafe` takes a couple seconds on my computer.

    What kind of computer are you on? I just ran that test (latest master build, first run):

       ~ % time zig test file.zig -OReleaseSafe
       file.zig:1:17: error: expected type expression, found '{'
       if (2 * 2 != 5) { @panic("fail"); }
                    ^
       zig test file.zig -OReleaseSafe  0.03s user 0.44s system 505% cpu 0.094 total
    

    Granted I'm on an M4 Mac but I wouldn't expect another system to be 20x slower.

  • Also another point. I have some zig projects from couple of months back and they all have build.zig/build.zig.zon. I tried to copy that to the new dummy project I did and of course the API changed and that is broken now (just 15 lines of build.zig code).

    This kind of thing just feels unacceptable considering I don't really see ANY improvement on the issues I had from back then.

    Also had a similar baffling experience when I last tried to come back to writing Zig. The std.time.Instant or similar API that also exists in rust and most other languages was move to the new Io interface and they also completely removed that std.time.Instant code.

    Overall it feels like people developing the tool don't respect the people using the tool. C++ or even Rust are much less enjoyable languages to write compared to Zig so it is really sad that it is not possible to actually use Zig for me.

Yes, compilation speeds of the 90's are slowly making a return, thankfully.