@@ -24,20 +24,30 @@ See also the macro [`compile_error!`], for raising errors during compilation.
2424
2525# When to use ` panic! ` vs ` Result `
2626
27- The Rust model of error handling groups errors into two major categories:
28- recoverable and unrecoverable errors. For a recoverable error, such as a file
29- not found error, it’s reasonable to report the problem to the user and retry
30- the operation. Unrecoverable errors are always symptoms of bugs, like trying to
31- access a location beyond the end of an array.
27+ The Rust language provides two complementary systems for constructing /
28+ representing, reporting, propagating, reacting to, and discarding errors. These
29+ responsibilities are collectively known as "error handling." ` panic! ` and
30+ ` Result ` are similar in that they are each the primary interface of their
31+ respective error handling systems; however, the meaning these interfaces attach
32+ to their errors and the responsibilities they fulfill within their respective
33+ error handling systems differ.
3234
33- The Rust language and standard library provides ` Result ` and ` panic! ` as parts
34- of two complementary systems for representing, reporting, propagating, reacting
35- to, and discarding errors for in these two categories.
35+ The ` panic! ` macro is used to construct errors that represent a bug that has
36+ been detected in your program. With ` panic! ` you provide a message that
37+ describes the bug and the language then constructs an error with that message,
38+ reports it, and propagates it for you.
3639
37- The ` panic! ` macro is provided to represent unrecoverable errors, whereas the
38- ` Result ` enum is provided to represent recoverable errors. For more detailed
39- information about error handling check out the [ book] or the [ ` std::result ` ]
40- module docs.
40+ ` Result ` on the other hand is used to wrap other types that represent either
41+ the successful result of some computation, ` Ok(T) ` , or error types that
42+ represent an anticipated runtime failure mode of that computation, ` Err(E) ` .
43+ ` Result ` is used alongside user defined types which represent the various
44+ anticipated runtime failure modes that the associated computation could
45+ encounter. ` Result ` must be propagated manually, often with the the help of the
46+ ` ? ` operator and ` Try ` trait, and they must be reported manually, often with
47+ the help of the ` Error ` trait.
48+
49+ For more detailed information about error handling check out the [ book] or the
50+ [ ` std::result ` ] module docs.
4151
4252[ ounwrap ] : Option::unwrap
4353[ runwrap ] : Result::unwrap
0 commit comments