As I see it, the Rust (etc) approach avoids two problems:
1. The C problem of forgetting to check error returns. Yes, exceptions (checked or not) also avoid this.
2. The C++/Java/C# problem of exceptions being more expensive than you'd like for common error situations. .NET has sprouted alternatives like `bool tryParse(String, out int)` as a workaround, but on balance I prefer the unified mechanism.
What I don't like is how innocuous `unwrap` looks, or how often it appears in example code.
1. The C problem of forgetting to check error returns. Yes, exceptions (checked or not) also avoid this.
2. The C++/Java/C# problem of exceptions being more expensive than you'd like for common error situations. .NET has sprouted alternatives like `bool tryParse(String, out int)` as a workaround, but on balance I prefer the unified mechanism.
What I don't like is how innocuous `unwrap` looks, or how often it appears in example code.