←back to thread

22 points atomlib | 10 comments | | HN request time: 1.37s | source | bottom
1. up2isomorphism ◴[] No.41916250[source]
What is the benefit of changing

int main(void) {

to:

pub fn main() !void {

Except making it looks like a "new" language and requires other people spends 15min to get to used to it?

replies(5): >>41916321 #>>41916432 #>>41916718 #>>41916842 #>>41917078 #
2. tmtvl ◴[] No.41916321[source]
There are tradeoffs:

Use of the pub keyword means you can tell whether a function is public in the module without needing to look at a separate place for listing exports (like, say, a header file). Though that itself has tradeoffs, so it's hard to say whether one or the other is better.

Use of the fn keyword makes it easy to find function definitions by grepping for it, whereas finding functions in regular C syntax needs semantic awareness.

What I don't understand is the !void at the end of the declaration, if we're meant to be returning an int, surely !int would be the expected syntax (although I would prefer returns int instead).

replies(4): >>41916414 #>>41916845 #>>41916951 #>>41917615 #
3. skavi ◴[] No.41916414[source]
https://ziglang.org/documentation/0.13.0/#Hello-World
4. jonathrg ◴[] No.41916432[source]
C's function declaration syntax is pretty weird and makes the language harder to parse. Most languages have a function keyword.
5. elteto ◴[] No.41916718[source]
15 minutes… the horror.
6. d_tr ◴[] No.41916842[source]
Probably not much, but this is not the only change the language brings.
7. jiripospisil ◴[] No.41916845[source]
> What I don't understand is the !void at the end of the declaration, if we're meant to be returning an int, surely !int would be the expected syntax (although I would prefer returns int instead).

`!void` means the function can return an error (e.g. return error.BadArgument) but doesn't produce any value itself. In the case of an error in the main function, the process will exit with 1, otherwise 0. The main function can also return a value directly (return type u8 / !u8).

8. TUSF ◴[] No.41916951[source]
In Zig, the main function can return either a u8 or void (which always returns 0) or it can return an error union !void, where if you allow an error to bubble up to main, it'll print an error trace and return 1.
9. c2xlZXB5Cg1 ◴[] No.41917078[source]
I'd go with for loop syntax:

    for (string, 0..) |character, index| {
        _ = character;
        _ = index;
    }
10. znpy ◴[] No.41917615[source]
> Use of the fn keyword makes it easy to find function definitions by grepping for it, whereas finding functions in regular C syntax needs semantic awareness.

does it matter though, in 2024 and beyond?

we've got clangd and lsp, grepping for functions is dumb, whether you're grepping C or grepping Zig.