Just as an apparent minority in this thread, I’d like to voice my support of the catch keyword.
My only confusion with these blocks was never what they do, but only why one would use them. My thinking roughly was: “If catch { func()? } is the same as func(), why would I even need these blocks?” This type of confusion, i think, is best addressed by documentation.
Regarding confusion with exception-based error handling, I think the chances are rather slim for one simple reason: The syntax is different. The catch clause in languages using exceptions always require an exception type to be specified, whereas the Rust catch block needs no further annotation:
// C++
try {
// ...
} catch (std::runtime_error&) {
// ...
}
// Rust
let x = catch {
// ...
};
I also don’t share the sentiment that the meaning of catch blocks were unintuitive for people not having a background in exceptions. I interpret this block as “catch any errors that might occur in this block and continue after it”, which seems rather straight-forward to me.
In summary, I think that catch catches* the meaning of the block rather well and that fears of confusion with constructs from exception-based error handling are not unfounded, but disproportional. Most of the alternatives suggested in this thread are also okay, but their novelty might be off-putting to new learners of Rust. Among them, I think I’d prefer try, fallible, and trap the most. (resultof seems too unrelated to error handling at all.)
* pun intended