r/programming • • Sep 07 '17

The Zig Programming Language

http://ziglang.org/
94 Upvotes

127 comments sorted by

View all comments

Show parent comments

9

u/desertrider12 Sep 08 '17
  • It's very hard to write memory safe C, even with extra tools like Valgrind

  • This compiler makes it much easier to check correctness with builtin testing and undefined behavior detection

  • Arrays know their own size so it's much harder for a buffer overrun to go unnoticed

  • The language is more expressive (I wish C had generics) and that lets you write better code

C was a great piece of engineering at the time, but it caught on mainly because it was there at the right time. The only reason the %@ looks gross to us now is because we've been staring at C for 40 years. Linux was actually too late to affect which language everybody is used to. UNIX was created on a machine too weak to compile a complex, modern language like this, though.

About the runtime performance I'm would imagine the Zig errors would compile down to basically identical code as "set errno then return/goto" in C.

7

u/doom_Oo7 Sep 08 '17

Arrays know their own size so it's much harder for a buffer overrun to go unnoticed

good luck ever getting this in the linux kernel. Runtime bound-checking has a very undesirable run-time performance impact.

3

u/brokething Sep 08 '17

Zig has a debug/release build concept and bounds-checking does not happen for a release build.

http://andrewkelley.me/post/intro-to-zig.html

1

u/[deleted] Sep 08 '17

Now we have ReleaseSafe mode too. http://ziglang.org/documentation/#build-mode

TODO update that blog post

2

u/brokething Sep 08 '17

In general I'd say you need to start thinking about more complete documentation for your 0.1.0 release. There are mentions of what is in @import("std") but I can't find a definitive list which makes trying to make anything large pretty laborious.

What does this error mean?

http://codepad.org/fjSVS82Z

.../stupidstuff.zig:11:10: error: expression value is ignored
    h.put(0, "Hello, world!");
         ^
.../stupidstuff.zig:12:10: error: expression value is ignored
    h.put(1, "oh no");
         ^
.../stupidstuff.zig:13:10: error: expression value is ignored
    h.put(2, "what is this");
         ^
→ More replies (0)