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.
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