было бы посмотреть как он устроен изнутри.
На хабре была статья. Там как раз этот оператор рассматривался
в компиляторе в смысле какой код он генерит ?
match Try::branch(x) { ControlFlow::Continue(v) => v, ControlFlow::Break(r) => return FromResidual::from_residual(r), }
можно написать на плейграунде кусок кода и нажать show HIR https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=96dd94e9826aff360ffa0de24cc95cf6
и его рассахарит fn bar() -> Option<i32> { match #[lang = "branch"](foo()) { #[lang = "Break"] { 0: residual } => #[allow(unreachable_code)] return #[lang = "from_residual"](residual), #[lang = "Continue"] { 0: val } => #[allow(unreachable_code)] val, }; Some(42) }
дальше остаётся только грепнуть по стдлибе #[lang = "branch"] и так далее, чтобы найти, что под этим подразумевается
https://github.com/rust-lang/rust/blob/e4f7ad8e68206fa54372535b5c04d7ddbaea43be/library/core/src/ops/try_trait.rs#L215
и получишь в точности то, что написал Кольский
Обсуждают сегодня