←back to thread

517 points bkolobara | 8 comments | | HN request time: 1.03s | source | bottom
Show context
aeve890 ◴[] No.45042188[source]
>The code will compile just fine. The Zig compiler will generate a new number for each unique 'error.*'

This is wild. I assume there's at least the tooling to catch this kind of errors right?

replies(3): >>45042403 #>>45042586 #>>45050319 #
1. TUSF ◴[] No.45042403[source]
There's no special tooling to catch this, because nobody catches an error with if-else—it's simply not idiomatic. Everyone uses switch statements in the catch block, and I've never seen anybody using anything other than switch, when catching an error.
replies(4): >>45042474 #>>45042605 #>>45043295 #>>45043644 #
2. veber-alex ◴[] No.45042474[source]
But why?

If I just need to check for 1 specific error and do something why do I need a switch?

In Rust you have both "match" (like switch) and "if let" which just pattern matches one variant but both are properly checked by the compiler to have only valid values.

3. arwalk ◴[] No.45042605[source]
The real problem is not about the if-else, its that he's comparing to the global error set, and not to the FileError error set he created specifically to define AccessDenied.
replies(1): >>45043300 #
4. love2read ◴[] No.45043295[source]
“There’s no specific tooling to catch this, because nobody[…]”. So? This is a standard library/language feature, which is usually the first place people go for features in the language. To say that nobody uses it is stupid.
5. love2read ◴[] No.45043300[source]
The real problem is that this compiles without error
6. dminik ◴[] No.45043644[source]
Both the Zig standard library as well as several third party projects do check errors like this.

I already commented on Zig compiler/stdlib code itself, but here's Tigerbeetle and Bun, the two biggest(?) Zig codebases:

https://github.com/search?q=repo%3Atigerbeetle%2Ftigerbeetle...

https://github.com/search?q=repo%3Aoven-sh%2Fbun%20%22%3D%3D...

replies(1): >>45045893 #
7. dminik ◴[] No.45045893[source]
Ok, while it's cool that the TigerBeetle link now shows no matches (down from two) the comment now feels wrong. Anyways, you guys left in the `!= error.` checks, so here's some snapshots that hopefully won't be invalidated :P

https://github.com/tigerbeetle/tigerbeetle/blob/b173fdc82700...

https://github.com/tigerbeetle/tigerbeetle/blob/b173fdc82700... (different file, same check.)

replies(1): >>45050215 #
8. matklad ◴[] No.45050215{3}[source]
Good catch of != thanks!