News for hackers. Stuff that matters.
Re:I Quit My Job to Live on Donations to Zig by Lev1a on Thursday June 07, 2018 @12:14PM (#17257189)
Let me introduce you to the concept of ErrorKind in Rust (i.e. in the IO module of the std): https://doc.rust-lang.org/std/io/enum.ErrorKind.html

There is also the "failure" crate which has patterns for the kind of thing you mentioned:

https://boats.gitlab.io/failure/error-errorkind.html https://boats.gitlab.io/failure/custom-fail.html

Re:I Quit My Job to Live on Donations to Zig by gmfawcett on Thursday June 07, 2018 @12:28PM (#17257363)
I don't believe that either ErrorKind or 'failure' gives the same degree of automated enumeration and checking that Zig provides. I'm not a Zig apologist... I just think you should read through the Zig documentation and examine the differences for yourself.

https://ziglang.org/documentation/master/#Errors

https://ziglang.org/download/0.2.0/release-notes.html (see "Error Sets")

Re:I Quit My Job to Live on Donations to Zig by bpicolo on Thursday June 07, 2018 @03:29PM (#17259360)
If I'm understanding correctly, you can use enums in rust to recreate the same, though it would be slightly more verbose.

    enum MyErrorSet {
        NotFound(ErrorKind),
        SomethingElse(ErrorKind),
    }
If you don't care about propagating the original ErrorKind then that's just

    enum MyErrorSet {
        NotFound,
        SomethingElse
    }
Re:I Quit My Job to Live on Donations to Zig by gmfawcett on Thursday June 07, 2018 @04:15PM (#17259806)
Yes, I think you're right. But the burden for generating and maintaining the enums is on the developer; whereas in Zig, they can be automatically inferred by the compiler.

I don't think the distinction is super important in application work (for example). But for systems code I can see the benefit of having the compiler tell you, with certainty, why a given function can fail (and why it can't). E.g., a good device driver should handle all its failure modes with care, rather than with a shotgun approach.