Rust: `рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛?` рдСрдкрд░реЗрдЯрд░ рдФрд░ `рдХреЛрд╢рд┐рд╢` рдмреНрд▓реЙрдХ (RFC 243,` question_mark` рдФрд░ `try_blocks`)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдлрд╝рд░ре░ 2016  ┬╖  340рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 243 рдФрд░ рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 1859 рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЪрд┐рдВрддрд╛:

  • [x] ? рдСрдкрд░реЗрдЯрд░ рдЬреЛ try! - # 31954 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
  • [x] try { ... } рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ - https://github.com/rust-lang/rust/issues/39849

    • [x] do catch { ... } рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╢реНрди рд╣рд▓ рдХрд░реЗрдВ


    • [x] рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдХреЛ "рд▓рдкреЗрдЯрдирд╛" рдкрд░рд┐рдгрд╛рдо рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкрд╣рд▓реЗ https://github.com/rust-lang/rust/issues/41414 рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм https://github.com/rust- рдореЗрдВ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд▓реИрдВрдЧ / рдЬрдВрдЧ / рдореБрджреНрджреЛрдВ / 70,941)

    • [] рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрддреЗ рдХреЗ рдореБрджреНрджреЗ ( try { expr? }? рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

  • [x] Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди (https://github.com/rust-lang/rfcs/pull/1859)

    • [x] рдХреЛ рд▓рд╛рдЧреВ рдирдИ Try рд╡рд┐рд╢реЗрд╖рддрд╛ (рдХреЗ рд╕реНрдерд╛рди рдкрд░ Carrier ) рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд ? рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ (https://github.com/rust-lang/rust/pull / 42,275)

    • [x] Option рдФрд░ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкрд░рд┐рд╡рд╛рд░ (https://github.com/rust-lang/rust/pull/42526) рдХреЗ рд▓рд┐рдП рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЬреЛрдбрд╝реЗрдВ

    • [x] RFC рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ (https://github.com/rust-lang/rust/issues/35946)

  • [x] рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ try рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ
  • [x] рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реНрдерд╛рди рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП try{}catch (рдпрд╛ рдЕрдиреНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдИрдбреА), рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ match рд╕рд╛рде рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
A-error-handling B-RFC-approved B-RFC-implemented B-unstable C-tracking-issue F-try_blocks Libs-Tracked T-lang T-libs

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ mark-im рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдмрд╛рдж рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЛ рдмреБрд░рд╛ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЕрд╕рдВрдЧрдд рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдЬреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред

рд╕рднреА 340 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╕рд╛рде рдореЗрдВ рдЖрд░рдПрдлрд╕реА рд▓реЗрдмрд▓ рд░рд┐рдЯрд░реНрди / рдмреНрд░реЗрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрд╡рд░реЛрд╣ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ рд╣рдо рднреА рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдмрд╕ ? рдФрд░ catch рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╣реЛрдЧрд╛?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдмрд▓ рд░рд┐рдЯрд░реНрди / рдмреНрд░реЗрдХ ? рдФрд░ catch рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ RFC рдЦреЛрд▓реВрдВрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░рд┐рдЯрд░реНрди / рдмреНрд░реЗрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╣реИред

рд╢реБрдХреНрд░, 5 рдлрд░рд╡рд░реА, 2016 рдХреЛ рдЕрдкрд░рд╛рд╣реНрди 3:56 рдмрдЬреЗ, рдЬреЛрдирд╛рдерди рд░реАрдо рд╕реВрдЪрдирд╛рдПрдБ @ithub.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╕рд╛рде рдореЗрдВ рдЖрд░рдПрдлрд╕реА рд▓реЗрдмрд▓ рд░рд┐рдЯрд░реНрди / рдмреНрд░реЗрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрд╡рд░реЛрд╣ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ,
рдХреНрдпрд╛ рд╣рдо рднреА рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рд╕рд┐рд░реНрдл рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рд╣реЛрдЧрд╛? рддрдерд╛
рд╕рдВрдХрд▓рдХ рдореЗрдВ рдкрдХрдбрд╝?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/31436#issuecomment -180551605ред

рдПрдХ рдФрд░ рдЕрдирд╕реБрд▓рдЭреЗ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреМрди рд╕рд╛ рдЕрдиреБрдмрдВрдз рд╣реИ рдЬреЛ impl s Into рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╛ Into рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рднреА рд╣реИ рдпрд╣рд╛рдБ рддреНрд░реБрдЯрд┐-рдЕрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред (рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдФрд░ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдЖрдЗрдЯрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?)

@reem

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдмрд▓ рд╡рд╛рдкрд╕реА / рдмреНрд░реЗрдХ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИ ... рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЖрд░рдПрдлрд╕реА рдЦреЛрд▓реВрдВрдЧрд╛ред

рдХреГрдкрдпрд╛ рдХреАрдЬрд┐рдП!

Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╡рд┐рд╖рдп рдкрд░, рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд▓рдХреНрд╖рдг рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬрд▓реНрджреА рд▓рд┐рдЦрд╛ рдерд╛ред
https://gist.github.com/thepowersgang/f0de63db1746114266d3

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

struct catch {
    a: u8
}

fn main() {

    let b = 10;
    catch { a: b } // struct literal or catch expression with type ascription inside?

}

@petrochenkov рдЦреИрд░, рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рд▓реБрдХрд╣реЗрдб рдирд┐рдпрдо рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ { , : рдмрд╛рдж рджреВрд╕рд░реЗ рдЯреЛрдХрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рднреА

let c1 = catch { a: 10 };
let c2 = catch { ..c1 }; // <--

struct catch {}
let c3 = catch {}; // <--

+ https://github.com/rust-lang/rfcs/issues/306 if (рдЬрдм!) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реИред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди (рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣) рдХреЗ рд▓рд┐рдП рд╣реВрдВ - рд╣рдореЗрд╢рд╛ catch { рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрджреЛрдВ рдореЗрдВ catch рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рдХреЛрдИ рднреА рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ catch рд╡реИрд╕реЗ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред

рдпрджрд┐ catch рдмрдЬрд╛рдп рдХрд┐рд╕реА рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдпрд╣ рдХреАрд╡рд░реНрдб рд╕реВрдЪреА рд╣реИ: http://doc.rust-lang.org/nightly/grammar.html#keywords

@bluss рд╣рд╛рдБ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ ... override рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИ рдЬреЛ рдХрд░реАрдм рд╣реИред рдпрд╛ рд╣рдо do рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реЗрд╣ред рдпрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╣рд╛рди рд▓реЛрдЧреЛрдВ рдХреЛ рддреБрд░рдВрдд рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред do catch ?

do рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИ рдЬреЛ IMO рдХреЗ рдХрд░реАрдм рд▓рдЧрддрд╛ рд╣реИред рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ do рдПрдХ рдХреАрд╡рд░реНрдб рд╕реВрдк рдереЛрдбрд╝рд╛ рдЕрдирд┐рдпрдорд┐рдд рд╣реИ, рдЬреЛ рднрд╛рд╖рд╛ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рдЧ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ? рдХреНрдпрд╛ while let рдПрдХ рдХреАрд╡рд░реНрдб рд╕реВрдк рднреА рд╣реИ? рдЙрд╕ рдПрдХ рдХреЛ рдЕрдм рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рдЬрдм рдЖрдкрдХреЛ рдЙрд╕рдХреА рдЖрджрдд рд╣реЛрддреА рд╣реИред

рдкреЛрд░реНрдЯ try! рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ?

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП try! рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрд╣рд╛рдБ рдЖрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп Result рд╡рд╛рдкрд╕реА рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред try! рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ lib / main.rs рдореЗрдВ):

macro_rules! try {
    ($expr:expr) => (match $expr {
        Result::Ok(val) => val,
        Result::Err(err) => {
            panic!("Error occured: {:?}", err)
        }
    })
}

рдЖрдкрдХреЛ try! Result рд╡рд╛рдкрд╕реА рдкрде рдХреА рдкрд╣рд▓реА рдШрдЯрдирд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдкреИрдирд┐рдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдорд┐рд▓реЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк try!(Err(sth)) рдмрдЬрд╛рдп рдПрдХ рддреНрд░реБрдЯрд┐ рдЦреЛрдЬрдиреЗ рдкрд░ return Err(sth) , рддреЛ рдЖрдкрдХреЛ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рднреА рдорд┐рд▓рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЬрдм рд▓реЛрдЧреЛрдВ рдиреЗ рдЙрд╕ рдЪрд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреЛрдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ try! рдЙрдкрдпреЛрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдм, рдпрджрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде ? рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдорд┐рд▓рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЧрд░ try! рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддреЛ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдмрд╛рдж рдореЗрдВ рдЬрдм рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓рддреА рд╣реИрдВ рддреЛ рдЖрдк рдШрдмрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ! рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдПред

рдпрджрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ ? рдХреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрдЬрд╛рдп try! рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗред рддрдм рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдХреИрд░рд┐рдпрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рд╕реВрд░реНрдп рдкрд░, 7 рдлрд░рд╡рд░реА, 2016 рдХреЛ 4:14 рдмрдЬреЗ, рд░рд╕реЗрд▓ рдЬреЙрдиреНрд╕рдЯрди рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ? рдмрд╕ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╕рдорд░реНрдерди рд╕реАрдзреЗ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ,
рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЛрд╢рд┐рд╢ рдХрд░реЛ!ред рддрдм рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛
рд╣рд░ рдЬрдЧрд╣ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/31436#issuecomment -181118499ред

рдЕрдЯрдХрд▓рдмрд╛рдЬреА рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рдеред

рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреБрдЫ Result<V,E> рдореВрд▓реНрдп рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реЛред рдЕрдм рд╣рдореЗрдВ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред E0119 рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╕рдВрднрд╡рддрдГ рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ), рдФрд░ рдЬрдм ? рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рдпрд╣ рд╣рд░ рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреЛ рд▓реЛрдЧ рдбрд┐рдмрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреЗ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╕рдВрднрд╡рддрдГ E0117 рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ Carrier Result<V,E> Carrier рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ (рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдФрд░ panic! рдЖрдИрдПрдирдЬреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╢рд╛рдпрдж рдЕрдзрд┐рдХ) рдХреЗ рд╕рд╛рде Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ред

рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдиреЗ рд╕реЗ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдЭ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдмрдбрд╝рд╛ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ (рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рдХрднреА рд╕реНрдереВрд▓ рдЖрдзрд╛рд░рд┐рдд рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рдерд╛, рдФрд░ рдпрд╣ рдХрд┐ ? рдХреЛ рд╕реНрдереВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ catch { ... } рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛ рдЖрдЗрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ ( return_to_catch , throw , break рдХреЛ RFC 243 рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред

рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдЬреЛ рдПрдХ Err Result 3.75% рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдХреЛрдб рдХреА рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рдорд╛рдзрд╛рди рдХреЛ рдпрд╣ рднреА рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ Err рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд╕ рдмрд┐рдХрдиреЗ рдореЗрдВ рдЭрдВрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: catch in { ... } рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрд╣рддреА рд╣реИред

catch! { ... } рдПрдХ рдФрд░ рдмреИрдХрдХреЙрдореНрдк рдкрд╕рдВрдж рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдорд▓реНрдЯреА-рдЖрд░реНрдо рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬреЛ $i:ident ? рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗ, рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рдПрд╕реЗрд╕рдореЗрдВрдЯ рдиреЗ $i:ident : $t:ty рддреЛрдбрд╝ рджрд┐рдПред

рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рдЬрд╝реНрдпрд╛рджрд╛ рдордд рдХрд░реЛ, рдмрд╕ catch рдХреЛ рдПрдХ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЛ рдЬрдм { (рд╕рдВрднрд╡рддрдГ рдХреЗрд╡рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рддрд╛ рдмрджрд▓рддрд╛ рд╣реИ)ред

рдореИрдВ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рднреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рд╕рдВрдмрдВрдзреА рд╢рд╛рдмреНрджрд┐рдХ (рдЬреИрд╕реЗ let catch = true; if catch {} ) рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ; рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдмрджрд╕реВрд░рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдПрдХ рдорд╛рдореВрд▓реА рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдП рдЦреЛрдЬрд╢рдмреНрдж, рд╡реИрд╕реЗ рднреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ? рд╣рдо рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ from __future__ рдСрдкреНрдЯ-рдЗрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдпрд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди / Cargo.toml рдкрд░ рдПрдХ рдЬрдВрдЧ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреАрд╡рд░реНрдб рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд░реНрде рд╣реЛрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред рдпрд╣ рдкрд╣рд▓рд╛ RFC рднреА рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рдЖрдпрд╛ рд╣реИ (https://github.com/rust-lang/rfcs/pull/1444 рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ)ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ default https://github.com/rust-lang/rfcs/pull/1210 рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ RFC рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред) рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░-рд╕реЗ-рджреЗрд╡ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдирдП рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдХрд░рдг рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

1.0 рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рдХреАрд╡рд░реНрдбреНрд╕ рди рдЬрдорд╛ рдХрд░рдиреЗ рдХрд╛ рдкреВрд░рд╛ рддрд░реНрдХ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирдП рдХреАрд╡рд░реНрдбреНрд╕ рдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдВрднрд╡рддрдГ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛), рддреЛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛? рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордп рд╣реЛрдЧрд╛ред

@ рдЬрд╛рдкрд░рд┐рдХ рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдкреАрдЖрд░ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдкрд░ рд▓реЗрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

@ рдиреНрдпреВрдЯрди рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ foo? рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ try!(foo) рд░реВрдк рдореЗрдВ рдЙрддрд╛рд░рд╛ред рдпрд╣ рднреА рдХреЗрд╡рд▓ рдореЗрдердб рдФрд░ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд foo.bar()? рдФрд░ baz()? рдХрд╛рд░реНрдп рд▓реЗрдХрд┐рди quux? рдФрд░ (quux)? рдирд╣реАрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реЛрдЧрд╛?

@japaric рдЗрд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рддрдХ рд╕реАрдорд┐рдд

рдЗрд╕реЗ рддрд░реАрдХреЛрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рдерд╛?

? рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ (рдореЗрд░реЗ рд▓рд┐рдП)

рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рд╢рд╛рдпрдж

@japaric рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрдг рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП (рдЬреИрд╕рд╛ рдХрд┐ ? рд╕рд░рд▓ рдбрд┐рд╕реБрдЧрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИ рдФрд░ рдлрд┐рд░ catch рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

@ рдиреНрдпреВрдЯрди рдареАрдХ рд╣реИ, рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рддрдХ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ

# 31954 :-) рдореЗрдВ рдореЗрд░реЗ рдкреАрдЖрд░ рдХреЛ рдмрдЧрд╛рд╡рдд / рдЕрджреНрдпрддрди

рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреНрдпрд╛ рд╡рд╣ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИ?

рдореБрдЭреЗ +1 рдЖрджрдореА рд╣реЛрдиреЗ рд╕реЗ рдирдлрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдиреЗ рдЕрддреАрдд рдореЗрдВ рдореЗрд░реЗ рд╕рдордп рдХреЗ рдЕрдЪреНрдЫреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрдЪрд╛ рд▓рд┐рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдбрд┐рдмрдЧ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддреНрд░реБрдЯрд┐ рдкрде рдорд╛рд░,? рдСрдкрд░реЗрдЯрд░ рдлрд╝рд╛рдЗрд▓ / рд▓рд╛рдЗрди рдХреЛ рд╡реАрдИрд╕реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Vec рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдФрд░ рд╡рд╣ рдпрд╛ рддреЛ рдЙрдЬрд╛рдЧрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ ...

рдореИрдВ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднрд╛рдЧрддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ try! / ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ Option<Result<T, E>> рд▓реМрдЯ рд░рд╣реЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд╛рд╣рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп From рдЬрд╛рдПрдЧрд╛?

@hexsel рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Result<> рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдмрдЧ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╡реАрд╕реА рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛ ? рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд▓рдЧреНрди рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ DWARF рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдардиреАрдп рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@mitsuhiko рд▓реЗрдХрд┐рди рдЖрдк рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреИрдЯрд░реНрди-рдореИрдЪ Result ? рдпрд╣ _just_ a enum atm рд╣реИред

Option рд░реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк Some(catch {...}) ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд░реА рдЖрджрдд рдЕрднреА рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ try!(Err(bla)) рдХреЗ рдмрдЬрд╛рдп return Err() , рддрд╛рдХрд┐ рдореИрдВ рдПрдХ рдХреЗ рд╕рд╛рде рдкрд░ рдмрд╛рдж рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдореИрдХреНрд░реЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдШрдмрд░рд╛, рдЖрджреЗрд╢ рдореЗрдВ рдПрдХ рдирд╛рдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рдХреЛрдб рд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реВрдВ рд╡рд╣ рдмрд╣реБрдд рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рд╣реИ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ ? рдЕрдЧрд░ рдореИрдВ рдмрд╛рд╣реНрдп рдХреЛрдб рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ Result ред

@ рдПрдбреАрдм рдХреЛ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЫрд┐рдкреЗ рд╣реБрдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдХреИрд╕реЗред рдПрдХрдорд╛рддреНрд░ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдПрдХ рдорд╛рдирдХреАрдХреГрдд рддреНрд░реБрдЯрд┐ рдмреЙрдХреНрд╕ рд╣реЛрддрд╛ рдЬреЛ рдЙрд╕ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЙрдХреНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@mitsuhiko рдореИрдВ Error рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ TLS рдкрд░ рдПрдХ рдирдИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВред
рдмрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрднреА-рдХрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@eddyb рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдкрд░рд┐рдгрд╛рдо рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрд╛ рдпрд╣ рдореЗрдореЛрд░реА рдореЗрдВ рдШреВрдо рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред

@mitsuhiko TLS? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдкреНрд░рдХрд╛рд░ ( From рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде), рдЖрдк рдХрд┐рддрдиреА рд╕рдорд╡рд░реНрддреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рд╕реНрдЯреИрдХрдЯреНрд░реИрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХрднреА рднреА рдПрдХ рд╕рд╛рде рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

рдЬрдм рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ Result -рд╕рдВрдХрд▓рдХ рд╣реИрдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВред

@eddyb рддреНрд░реБрдЯрд┐ рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рд╣рд░ рд╕реНрдЯреИрдХ рд╕реНрддрд░ рдкрд░ рдИрдЖрдИрдкреА рд╣реИ, рди рдХрд┐ рдпрд╣ рдЬрд╣рд╛рдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ a) рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреБрд▓рдиреАрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ b) рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╡реЗ рдмрд░рд╛рдмрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИрдВред

рдХрд┐рддрдиреА рд╕рдорд╡рд░реНрддреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреИрдХрдЯреНрд░реИрдХ рдХреЛ рдХрднреА рднреА рдПрдХ рд╕рд╛рде рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП

рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореИрдВ рдкрд░рд┐рдгрд╛рдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИрдХреНрд╕ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ, рдЬрдм рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рд╡рд╣рд╛рдВ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЖрдк рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ ? рдкрд░ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рдВрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
"рдХреЛрдИ рднреА рддреНрд░реБрдЯрд┐ рдкрдХрдбрд╝реА рдЧрдИ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рдкреНрд░рдХрдЯ рд╣реБрдИред" рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Result рдореЗрдВ рдЫрд┐рдкреЗ рд╣реЛрдВ рддреЛ рдЖрдк рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ?

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░рд┐рдЬрд▓реНрдЯ рдореЗрдВ рдЫрд┐рдкреЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ?

рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдореВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░ рд╕рдХреЗрдВред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рднрдВрдбрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреЙрдЗрдВрдЯрд░ рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЯреАрдПрд▓рдПрд╕ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдкрд░ failure_id(&self) рдПрдХ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдПрдХ i64 / uuid рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреА рдЙрддреНрдкрддреНрддрд┐ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЗ рд╕рдорд░реНрдерди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЬрд┐рд╕ рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреИрдХ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рд╡рд╛рдкрд╕реА рдЕрд▓рдЧ рджрд┐рдЦреЗрдЧреАред

"рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИ" - рд▓реЗрдХрд┐рди ? рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддрд░рд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЖрдкрдХреЛ _only_ ? рдЗрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ?

рд╡реИрд╕реЗ рднреА, рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ Err рдореЗрдВ рд╡рд╛рдкрд╕ рд░рдЦ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рдЖрдИрдбреА рдХреЛ рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛?

"рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рднрдВрдбрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"
рдЗрд╕ рдкрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ: Error рдЧреБрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреВрд░реНрдгрд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рдПрдХ рдЖрдИрдбреА рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА, рдФрд░ рдХреЙрдкреА / рдбреНрд░реЙрдк рдХрд░реЗрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ / рдЧрд┐рд░рд╛рд╡рдЯ (рдФрд░ рдЕрдВрддрддрдГ рдЗрд╕реЗ TLS рд╕реЗ "рдЗрди-рдлрд╝реНрд▓рд╛рдЗрдЯ рдПрд░рд░ рд╕реЗрдЯ" рдпрджрд┐ Result::unwrap рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рд▓реЗрдХрд┐рди рд╡рд╣ Copy рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдпреЛрдЬрдирд╛, Result рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдХрд░ _not_ ? рдпрд╛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрдЧреА, Copy рдЕрдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреА рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдПрдХ Rc<ErrorTrace> рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
EDIT2 : рдореИрдВ рдХреНрдпрд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдк catch рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рдЯреНрд░реЗрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
EDIT3 : рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбреНрд░реЙрдк рдкрд░, рдмреЗрд╣рддрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдиреАрдЪреЗ рджреЗрдЦреЗрдВред

"рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИ" - рд▓реЗрдХрд┐рди? рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рдЕрдкрд╡рд╛рдж рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдЧреБрдЬрд░ рдЧрдпрд╛?

рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлреНрд░реЗрдо рд╣реИрдВ рдЬреЛ рдЖрдк рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ? рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЕрдХреЗрд▓реЗ рдЬрд╛рдиреЗ рджреЗрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ ? рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рдПрд░ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рдЖрдИрдбреА рдХреЛ рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛?

рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ рдФрд░ рд░рд┐-рд░реИрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдЖрдИрдбреА рдХреЛ рдЖрдЧреЗ рдХреА рдУрд░ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЬрд╛рджреБрдИ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдмрд╕реЗрдЯ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлреНрд░реЗрдо рд╣реИрдВ рдЬреЛ рдЖрдк рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ? рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЕрдХреЗрд▓реЗ рдЬрд╛рдиреЗ рджреЗрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ ? рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред

рдареАрдХ рд╣реИ, рдореИрдВ рдХрдИ рд░рд┐рдЯрд░реНрди рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реАрдзреЗ Result рд╡рд╛рдкрд╕ рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реВрдВ (рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ ? рд╕реЗ рд╢реБрд░реБрдЖрддреА рд░рд┐рдЯрд░реНрди рд╣реЛрдЧрд╛)ред

рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЬрд╛рджреБрдИ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдмрд╕реЗрдЯ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд░- ? рд░реА-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╣реЛрдВрдЧреЗ?

@eddyb рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдореИрдиреБрдЕрд▓ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рдПрдХ IoError рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рд╕рдмрд╕реЗрдЯ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

loop {
  match establish_connection() {
    Ok(conn) => { ... },
    Err(err) => {
      if err.kind() == io::ErrorKind::ConnectionRefused {
        continue;
      } else {
        return Err(err);
      }
    }
  }
}

@mitsuhiko рддрдм io::Error рдЕрдВрджрд░ рдЖрдИрдбреА рд░рдЦрдиреЗ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рдкреБрдирд░реНрдкреВрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Vec<Option<Trace>> "рд╡рд┐рд░рд▓ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рдирдХреНрд╢рд╛" TLS рдореЗрдВ, struct ErrorId(usize) рдФрд░ 3 рд▓реИрдВрдЧ рдЖрдЗрдЯрдореНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛:

  • fn trace_new(Location) -> ErrorId , рдЬрдм рдПрдХ рдЧреИрд░- const рддреНрд░реБрдЯрд┐ рдореВрд▓реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ
  • fn trace_return(ErrorId, Location) , рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ _declared_ рдХреЗ рд░реВрдк рдореЗрдВ -> Result<...> (рдпрд╛рдиреА рд╡рд╛рдкрд╕реА рдкрд░ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ _happens_ рдХрд╛ рдЙрдкрдпреЛрдЧ Result рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП)
  • fn trace_destroy(ErrorId) , рдЬрдм рдПрдХ рддреНрд░реБрдЯрд┐ рдореВрд▓реНрдп рдбреНрд░реЙрдк

рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди MIR рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Location рдЧрдгрдирд╛ Span рдирд┐рд░реНрджреЗрд╢ рдХреЗ Lvalue::Return рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ IMO (рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рд╡реИрд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди asm рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред

@eddyb

рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдмреНрд▓реЛрдЯ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ?

@ arielb1 рдЖрдк рдЗрд╕реЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╣реА рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ

@ рд╣реЗрдбреНрдбреА рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рдХреНрдпрд╛ рд╣реИ? рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдЖрдИрдкреА рдкрдврд╝рдиреЗ рдореЗрдВ рдХреНрдпрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо JS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм рдХрдард┐рди рдирд╣реАрдВ рд╣реИред

@mitsuhiko рдпрд╣ рд╡рд╣реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдУрд╡рд░рдлреНрд▓реЛ рдЬрд╛рдБрдЪ рдФрд░ рдЕрдиреНрдп рд╕рдВрдХрд▓рдХ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдкреИрдирд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред core::panicking::panic ред

рдПрдХ рдвреЗрд░ Error рд╕реНрдЯреИрдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ Result рдХреНрдпреЛрдВ рдкреИрдХ рдХрд░реЗрдВ рдЬрдмрдХрд┐ рд╕реНрдЯреИрдХ рдЕрдирд╡рд╛рдЙрдВрдб рд╣реИ? рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрд╕ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рд╕реНрдЯреИрдХ рдЕрднреА рднреА рд╣реИ? рдЙрджрд╛ рдпрджрд┐ рд╕реНрдЯреИрдХ рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рдмрд╕ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╕реНрдЯрдо рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдЬрдм рдПрдХ Err рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдбрд┐рдмрдЧрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ try! рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ (рдЕрддрд┐-рдкреНрд░рд╢рдВрд╕рдиреАрдп) рдореИрдХреНрд░реЛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ Err рдХреЗрд╕ рдкрд░ рдШрдмрд░рд╛рдирд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ рдмрд╢рд░реНрддреЗ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╣реА рдкреИрд░рд╛рдореЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред

try рдЖрдк рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдк Err рдХреЗрд╕ рдкрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдореИрдХреНрд░реЛ рдХреНрд░реЗрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рди рдЫреВрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдбрд░рд╛ рд╣реБрдЖ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреА рдПрдХ рдмрд╣реБрдд рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рдХреГрддреНрд░рд┐рдо рд╕реНрдЯреИрдХ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдПрдХ рдЕрдВрд╢ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╖реНрдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рд╕рднреА рдореИрдХреНрд░реЛ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • ? рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЕрддрд┐рджреЗрдп рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ ? try! рд▓рд┐рдП рдЪреАрдиреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╣реЛрдЧрд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреЛрдХрд░рд╛ рд╕реАрдорд╛ рдкрд░ рдЧреИрд░-рдЙрддреНрдкрддреНрддрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рддред
  • рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд╣рд╛рдВ, рдХреЛрдИ рдЗрд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдВрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ

@ est31 рдПрдХ рдЖрддрдВрдХ рдХреА рддрд░рд╣ рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реИ _automatically_ "рдЕрдирдмрд╛рдЙрдВрдб", рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреАрдиреА рд╣реИред
рдФрд░ рд╣рд╛рдБ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЦрд╛рд▓реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдВрдХрд▓рдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХреЙрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╛рдо рд╣реИрдВ рдЬрд┐рди рдкрд░ рдЖрдк рд╡рд┐рд░рд╛рдо рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ (рдФрд░ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ call dump(data) - рдЬрд╣рд╛рдБ dump рдФрд░ data рддрд░реНрдХ рдбреАрдмрдЧрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред

@eddyb рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦрд╛рд▓реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдбрд╝реА рддреИрдирд╛рддреА рдкрд░ рдХреБрдЫ "рдХреИрдирд░реА" рдбрд┐рдмрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рдХрд░реЗрдВред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдЪреАрдЬ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ

@hexsel рд╣рд╛рдБ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВ Result::unwrap рдпрд╛ рдХреБрдЫ рдирдпрд╛ ignore рдкрджреНрдзрддрд┐ (рдпрд╛ рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐ рдЫреЛрдбрд╝рдиреЗ рдкрд░ рднреА?) stderr рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рддрд╛ рд╣реИред

@ рд╣реЗрдбреНрдбреА рдЕрдЧрд░ рдЖрдк рдЯреАрдПрд▓рдПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬреИрд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдпрд╛ рдХреБрдЫ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╕реНрдЯреИрдХ рдХреЗ рдЕрдкрдиреЗ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╡рд╛рдкрд╕реА рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рд╕реНрдЯреИрдХ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд▓реМрдЯрддреЗ рд╕рдордп _unwind_ рд╕реНрдЯреИрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рдЬрдмрдХрд┐ рд░реИрдо рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдЗрд╕рдХрд╛ рд╕реАрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж "рдХрд╛рдиреВрдиреА" рд░рд┐рдЯрд░реНрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╢рдмреНрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рднреА рдХреЛрдб ? рдпрд╛ try! рдФрд░ рдЕрдВрдд рдореЗрдВ рдЖрдк рдЕрдВрдд рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИред рдЗрд╕рдХрд╛ рдорд╣рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЬрдВрдЧ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдЬрд╛рд╡рд╛ рдХреЛ throws рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрдВрдЧ рдЙрд╕ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реБрдзрд╛рд░ рд╣реИред

@ рд╣реЗрдХреНрд╕рд╕реЗрд▓ рдПрдХ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм try! рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ) рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ - рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ "рдбреБрдкреНрд╕" рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬрдм рдХрдИ try рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдЯреИрдХ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред

@ est31 try! рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рд╕рдЪрдореБрдЪ рдореИрдХреНрд░реЛ рдЗрдореНрдкреЛрд░реНрдЯ рд╢реИрдбреЛрдЗрдВрдЧ рд╣реИ), рдпрд╣ рд╣рдорд╛рд░реЗ "рдХрдордЬреЛрд░ рд▓реИрдВрдЧ рдЖрдЗрдЯрдо" рдХреА рддрд░рд╣ рдХреБрдЫ рдЕрд▓рдЧ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред

@ est31 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ (рддрдирд╛рд╡ рдореБрдХреНрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ), рдирд┐рд╢рд╛рди рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдвреЗрд░ рдЬрд░реВрд░реА, рдХрд┐рд╕реА рднреА рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЪрд▓рддреА Result рдореВрд▓ рдкрд╢реНрд╡-рдЕрдиреБрд░реЗрдЦрди рдореЗрдВ рдКрдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдЪрд╛рд░реЛрдВ рдУрд░, рдпрд╣ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдмрдЧрд╝рд▓ рдореЗрдВ рднреАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдмрд╛рдЗрдирд░реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреИрдХрдЯреНрд░реЗрд╕ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рддреЛ Location рд╕рдЦреНрддреА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рддреБрдо рднреА рдПрдХ obfuscating рдкреНрд▓рдЧрдЗрди рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реНрд░реЛрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреБрдЫ рдмрдВрдж рд╕реНрд░реЛрдд рдЙрддреНрдкрд╛рдж рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рдмрдЧрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ (рдФрд░ рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ lldb рдХреНрд▓реАрдирд░ рдмреИрдХрдЯреНрд░реЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рд╡реЗ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреИрдирд┐рдХ рдкрд░ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рд╕реБрд░рд╛рдЧ рдорд┐рд▓ рд╕рдХреЗрдВред рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо-рд╕реНрддрд░реАрдп рдЯреНрд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдЬрд╣рд╛рдВ {Option,Result}::unwrap рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕ рд╕реНрдерд╛рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреИрдирд┐рдХ рд╕реЗ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕реНрдерд╛рди рдХреА рдЬрд╛рдирдХрд╛рд░реАред

рд╡реИрд▓реНрдпреВ рдкреИрд░рд╛рдбреНрд░рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ Result рдирд┐рд╢рд╛рди рдХреЛ рд╕реАрдзреЗ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдПрдХ рдореЙрдбрд▓ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ _implementable_ рд╣реИред

try! рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдЯреЛрдХрд░реЗ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЕрдиреБрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдХрд┐ рдореМрдЬреВрджрд╛ try! рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢

@eddyb рддреЛ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рд╡реЗрдХреНрдЯрд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдлрд╝рдВрдХреНрд╢рди-рдирд╛рдо, рд▓рд╛рдЗрди рдирдВрдмрд░ рдФрд░ рдХреЙрд▓рдо рдирдВрдмрд░ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╣реА рдмреЗрдХрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА DWARF рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ DWARF рд╣рдореЗрдВ рдЙрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рд╕реНрддреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд╛рди рдЬрд╛рдирдХрд╛рд░реА рдЗрддрдиреА рдмреЗрдХрд╛рд░ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдХрднреА рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд┐рд▓реАрдЬрд╝ рдмрд╛рдЗрдирд░реА рдирд╣реАрдВ рдЪрд▓рд╛рдПрдЧрд╛ред

рдпрд╣ DWARF рдЬрд╛рдирдХрд╛рд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдмреЗрдХрд╛рд░ рдХреИрд╕реЗ рд╣реЛрдЧрд╛? рдлрд╝рд╛рдЗрд▓рдирд╛рдореЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ x64 рдкрд░ рдкреВрд░реА рдЪреАрдЬрд╝ 3 рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

@mitsuhiko рдореВрд▓ рд░реВрдк рд╕реЗ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдХрдиреАрдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ?

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЬрдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП DWARF рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ?

@eddyb рдХреНрдпреЛрдВрдХрд┐ DWARF рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рд┐рд▓реАрдЬрд╝ рдмрд╛рдЗрдирд░реА рдХреЗ рднреАрддрд░ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИред рддреЛ рдореИрдВ рдкреНрд░рддреАрдХреЛрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдбреАрдмрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреАрди рдмрд╛рдЗрдирд░реА рдЬрд╣рд╛рдЬред

@mitsuhiko рдУрд╣, рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдореИрдВ рдорд╛рди рд░рд╣рд╛ рдерд╛ред рдЬрдВрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд╕ рдПрдПрдлрдПрдЖрдИрдХреЗ рдХреЛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдмрд┐рдВрджреБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдВ рдЬреЛ рдмреЗрдирд░ рд░рд┐рд▓реАрдЬрд┐рдВрдЧ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ?

рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдЖрддреНрдо / рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдмрд╣реБрдд рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХрд┐рд╕реА рднреА рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдбрд┐рдмрдЧрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рди рд╕рдордп рд╣реЛрддрд╛ рд╣реИред

рд╣рд╛рдБ, try! рдЖрдкрдХреЗ рдЯреЛрдХрд░реЗ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рдкреНрд░рдпрд╛рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдПрдХ рдЯреЛрдХрд░реЗ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдмрдЧ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЕрдЧрд░ рд▓реМрдЯрд╛ Err рдЬрд╛рдирдХрд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рддреЛ рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдХреЗрд╡рд▓ рд╕рд╣рд╛рдпрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрдВрдж рд╕реНрд░реЛрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдЖрдк рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерди рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рджреЛрдиреЛрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреЗрдВ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдЯреАрдПрд▓рдПрд╕ рдЖрдзрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИред

рдкреНрд░рдпрд╛рд╕ рдореЙрдбрд▓ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ ? try , рдХреЗрд╡рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд╖рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрджрд┐ catch рдЖрддрд╛ рд╣реИ (рдЖрдкрдиреЗ рд╣рд╛рд░реНрдбрдХреЛрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдВрджрд░ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛) ? рд╡реИрд╕реЗ рднреА)

@eddyb "рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдмреЗрдирд░ рд░рд┐рд▓реАрдЬрд┐рдВрдЧ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ?"

рдпрд╣ рдХреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рдореЛрдВ рдореЗрдВ рджреЗрд╢реА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╣реИред рд╣рдо (рд╕рдВрддрд░реА) рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ iOS рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рдХреНрд░реИрд╢ рдбрдВрдк рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП llvm-symbolizer рд╡рд╛рд▓реЗ рдкрддреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

libbacktrace рдорд┐рддреНрд╕реБрд╣рд┐рдХреЛ рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА libbacktrace рдПрдореНрдмреЗрдб рдХрд░рддреЗ рд╣реИрдВ,

@ рд╣реЗрдбреНрдбреА рд╣рд╛рдБред рд╕рд┐рд░реНрдл рдкреИрдирд┐рдХ рдХреЛрдб рдХреЛ рджреЗрдЦрд╛ред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдерд╛ рдЬрд┐рд╕реЗ рд░рд╕реНрдЯ рдХреЛрдб рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдФрд░ рдЬрдЧрд╣реЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрд╛рдЗрдк-рд▓реЗрд╡рд▓ рдЯреНрд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдереЗ, рдЬрд╣рд╛рдБ {Option, Result} :: undrap рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛, рдЬрд┐рд╕ рд╕реНрдерд╛рди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдирд┐рд░реНрднрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЬреИрд╕реЗ рдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреИрдирд┐рдХред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╕реНрдерд╛рди рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

рдмрд╛рддреЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдХрд┐...

@glaebhoerl рд╣реИрд╣ , рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрдЫрд╛ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛ? рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЕрд╕реНрдерд┐рд░ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВред

@eddyb рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╕рдВрднрд╡рдд: рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдХреБрдЫ GHCers рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ рдФрд░ рдЕрднреА рдПрдХ рд▓рд┐рдВрдХ рдХреЛ рдЧреБрдЧрд▓рд╛ рджрд┐рдпрд╛ рд╣реИред рдФрд░ Rust рдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ GHC рдХрд░рддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИ (рд╢рд╛рдпрдж рдПрдХ рдЬреЛ рдЖрдкрдиреЗ I рд╕реЗ рдЕрдзрд┐рдХ рд╕реЛрдЪрд╛ рд╣реИ)ред

рдмрд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░: рдпрд╣ рдПрдХ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ rustc рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕ рдореЗрдВ Err рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрд▓реЛрдб рдХреЗ рд╕рд╛рде fn(TypeId, *mut ()) рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ ред рдпрджрд┐ рдкреЗрд▓реЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛, рдбрд┐рдмрдЧрд░ рдореЗрдВ рдлрдВрд╕рдирд╛, рдЕрдЧрд░ рдпрд╣ рдмреНрдпрд╛рдЬ рдХреА рддреНрд░реБрдЯрд┐ рджреЗрдЦрддрд╛ рд╣реИ, рдпрд╛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмреИрдХрдЯреНрд░реИрдХ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдЬреИрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд╛рдорд╛рди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

PR 33389 Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рдпрд╣ рдореВрд▓ RFC рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рд╛ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рдХрд░реАрдм рдХрд╛ рд╕рдордп рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо FCP (рдЬреЛ рд╢рд╛рдпрдж рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП FCP рдмрд╛рдХреА ? рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП)ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪрд░реНрдЪрд╛ рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦреЗрдВред

рдореИрдВ ? рд╕реЗ Option s рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдзреА рд╣реВрдВред

RFC рдХрд╛ рд╢рдмреНрджрд╛рдВрдХрди рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ ? рдСрдкрд░реЗрдЯрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ / "рдЕрдкрд╡рд╛рджреЛрдВ" рдХреЛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Option рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЧрд▓рдд рдЙрдкрдХрд░рдг рд╣реИред None рдПрдХ рд╕рдлрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрдмрдХрд┐ Err рд╣рдореЗрд╢рд╛ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рдХрднреА рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рд╢рд╛рди рдЬреЛрдбрд╝рдХрд░), ? рдХреЛ Option рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ ? рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред ред

@tomaka рдХреНрдпрд╛ рд╣рдо рдЪрд░реНрдЪрд╛ рдХреЗ рд╕реВрддреНрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ? (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрдкрдХреА рдЖрдкрддреНрддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░

@eddyb рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЙрд▓рд╕реНрдЯреИрдХреНрд╕ GHC рдлреАрдЪрд░ рдХреЗ рд░рд┐рд▓реАрдЬрд╝-рд╕рдВрд╕реНрдХрд░рдг рдбреЙрдХреНрд╕ рд╣реИрдВред

рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдУрдкреА рдореЗрдВ рд╢реЗрд╖ рдХрд╛рд░реНрдп рдЕрднреА рднреА рд╕рдЯреАрдХ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдИ-рд╣реЗрд▓реНрдк-рд╡реЙрдиреНрдЯреЗрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЦреЗрд▓рд╛ рдЕрдЧрд░ рдпрд╣ рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрддрд░реА рдЧреНрд░рд╛рд╣рдХ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдкреИрдирд┐рдХ рдХреЗ рдмрдЬрд╛рдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ crates.io рдХреЛрдбрдмреЗрд╕ рдкрд░ рдЧрдпрд╛ред рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ RFC рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рд╕реВрдЪрдХ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯреИрдХрдЯреНрд░реИрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рджрд░реНрдж рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдЖрдЬрдХрд▓ рдкреИрдирд┐рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╕реЗ рддреНрд░реБрдЯрд┐ рдЖрдИ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреИрд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рдЖрдИрдкреА рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛ рд╣реИ?

рд╣рдо рдЗрд╕ рдкрд░ @ рдЬрдВрдЧ-рд▓рдВрдЧ / рд▓рдВрдЧ рдореАрдЯрд┐рдВрдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдХреБрдЫ рдмрд╛рддреЗрдВ рдЬреЛ рд╕рд╛рдордиреЗ рдЖрдИрдВ:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, ? рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ ? Option рдкрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдФрд░ рди рдХреЗрд╡рд▓ Result (рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐, bool , рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Result рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рддреЛ рдпрд╣ рдмрд╛рдж рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЦреБрдж рдХреБрдЫ рдирд┐рдпрдорд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:

let v: Vec<_> = try!(foo.iter().map(|x| x.to_result()).collect());

рдореИрдВ рдХрд╣рд╛рдБ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ try! рдкреНрд░рдХрд╛рд░ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрдореНрдореАрдж collect рдПрдХ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Result<Vec<_>, _> ред рдпрджрд┐ ? , рддреЛ рдпрд╣ рдЕрдиреБрдорд╛рди _might_ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рд╣рдордиреЗ рдпрд╣ рднреА рддрдп рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ "рд╡рд╛рд╣рдХ" рдЧреБрдг рдХреЗ рдорд╣реАрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрди RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ RFC рдХреЛ ASAP рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕ рдЪрд░реНрдЪрд╛ рдкрд░ ? рдкреНрд░рдЧрддрд┐ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рдпрджрд┐ рд╣рдордиреЗ @nrc рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдпрд╛ рдФрд░ рд╣рдордиреЗ рд▓рдХреНрд╖рдг рдХреЛ рдЕрд╕реНрдерд┐рд░ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ Result рдФрд░ рдХреБрдЫ рдирд┐рдЬреА рдбрдореА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ ? рдмрдирд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд░реЛрдз рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд Result рд╕рд╛рде ? рдЙрдкрдпреЛрдЧреАред

рдПрдХ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдпрд╣ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрджрд┐ рдЖрдк ? рдХрд╛ рдЙрдкрдпреЛрдЧ Option рдореВрд▓реНрдп рдкрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рднреА Option рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ) Result<T,()> )ред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдШреЛрд╖рд┐рдд рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдВрддрд░-рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдЪрд╛рд╣рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реА рд▓реЙрдЬрд┐рдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд▓рдЧрддреА рд╣реИ, рд╕реА рдХреЗ рд╕рдорд╛рди рдХреИрд╕реЗ if x рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА x рдХрд╛ рдЕрднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рд╣реЛред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ Option<T> рдПрдХ рдореВрд▓реНрдп рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ None рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рдбреЛрдореЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ Result<> рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░) рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд┐рдлрд▓рддрд╛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рддрдм рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ None рдорддрд▓рдм рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрджреЗрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдПрдХ рддрд░рд╣ рдХрд╛ рдордирдорд╛рдирд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк)ред рд▓реЗрдХрд┐рди рд╡рд╣ рдЪрд░реНрдЪрд╛ RFC рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдЕрдВрддрд░-рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдЪрд╛рд╣рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реА рд▓реЙрдЬрд┐рдХ, рд╕реА if x рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм x рдХрд╛ рдЕрднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ Option<T> рдПрдХ рдореВрд▓реНрдп рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ None рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рдбреЛрдореЗрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ Result<> рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░) рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд┐рдлрд▓рддрд╛ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рддрдм рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ None рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрджреЗрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдПрдХ рддрд░рд╣ рдХрд╛ рдордирдорд╛рдирд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдк)ред рд▓реЗрдХрд┐рди рд╡рд╣ рдЪрд░реНрдЪрд╛ RFC рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рджрд┐рд▓ рд╕реЗ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЧреЗрдЯ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реБрдП рдереЗ, рд╡рд╣ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ impl s From рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдЬреЛ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣рдо Err -upcasting рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) )ред

@glaebhoerl

рдЧреЗрдЯ рд╕реНрдЯреИрдмрд▓рд╛рдЗрдЬреЗрд╢рди рдкрд░ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕ рдкрд░ рд╣рдордиреЗ рд╕рд╣рдорддрд┐ рдЬрддрд╛рдИ рдереА рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд╕реЗ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдлреНрд░реЗрдЯ рдЯреНрд░реИрдХреНрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рдПрд░рд░-рдЕрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо рдЬреЛ рднреА рдкрд╡рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ)ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдХреНрдпрд╛ рдЖрдк рдореЗрд░реА рдпрд╛рджрджрд╛рд╢реНрдд рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖рд┐рджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рдХрд╛рдиреВрди рдЖрдкрдХреЗ рдорди рдореЗрдВ рд╣реИрдВ? рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдХрд╛рдиреВрдиреЛрдВ" рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд╣реВрдВред рдПрдХ рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ - рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рд╣реЛред рддрд╛рдХрд┐ рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рд╣реЛ: рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдиреВрди рдереЗ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗ? рдЕрдиреБрдХреВрд▓рди? (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред)

рд╡реИрд╕реЗ, catch рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╡реЗ рд▓рд╛рдЧреВ рд╣реИрдВ?

рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдирд╣реАрдВ :(

Tue, Jul 26, 2016 рдХреЛ 06:41:44 рдкреВрд░реНрд╡рд╛рд╣реНрди -0700 рдкрд░, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдмреБрд▓рд╛рд╡рд╛ рдиреЗ рд▓рд┐рдЦрд╛:

рд╡реИрд╕реЗ, catch рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╡реЗ рд▓рд╛рдЧреВ рд╣реИрдВ?


рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдереНрд░реЗрдб рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ:
https://github.com/rust-lang/rust/issues/31436#issuecomment -235270663

рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП? рд╕реНрд╡реАрдХреГрдд рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд RFC рдирд╣реАрдВ рд╣реИ ...

cc # 35056

FYI рдХрд░реЗрдВ, https://github.com/rust-lang/rfcs/pull/1450 (enum рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░) Carrier рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЗ рдЦреЛрд▓реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

trait Carrier {
    type Success: CarrierSuccess;
    type Error: CarrierError;
}

trait CarrierSuccess {
    type Value;
    fn into_value(self) -> Self::Value;
}

// (could really use some HKT...)
trait CarrierError<Equivalent: CarrierError> {
    fn convert_error(self) -> Equivalent;
}

impl<T, E> Carrier for Result<T, E>
{
    type Success = Result::Ok<T, E>;
    type Error = Result::Err<T, E>;
}

impl<T, E> CarrierSuccess for Result::Ok<T, E> {
    type Value = T;
    fn into_value(self) -> Self::Value {
        self.0
    }
}

impl<T, E1, E2> CarrierError<Result::Err<T, E2>> for Result::Err<T, E1>
    where E2: From<E1>,
{
    fn convert_error(self) -> Result::Err<T, E2> {
        Err(self.into())
    }
}

impl<T> Carrier for Option<T>
{
    type Success = Option::Some<T>;
    type Error = None;
}

impl<T> CarrierSuccess for Option::Some<T> {
    type Value = T;
    fn into_value(self) -> Self::Value {
        self.0
    }
}

impl<T> CarrierError<Option::None> for Option::None {
    fn convert_error(self) -> Option::None {
        self
    }
}

fn main() {
    let value = match might_be_err() {
        ok @ Carrier::Success => ok.into_value(),
        err @ Carrier::Error => return err.convert_error(),
    }
}

рдореИрдВ рд╕рд┐рд░реНрдл https://github.com/rust-lang/rust/pull/35056#issuecomment -240129923 рд╕реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдкрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╡рд╣ PR рдбрдореА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЗрд░рд╛рджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдерд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд╡рд░реЛрдз рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдмрд╛рддрдЪреАрдд рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдП рдмрд┐рдирд╛ ? рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд▓рд╕ рдбрдореА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдпрд╣ рд╕рдВрдпреЛрдЬрди рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдЧрд╛ред

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдерд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдХрд┐ рд╣рдо рддрдм Carrier рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ RFC рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ, рдХреЗрд╡рд▓ рддрдм рдЬрдм рд╣рдо рд╕рдордЧреНрд░ рдЖрдХрд╛рд░ рд╕реЗ рдЦреБрд╢ рдереЗ (рдпрд╛ рд╕рдВрднрд╡рддрдГ Carrier рдХреЛ рд╣рдЯрд╛рдХрд░ред

рдЕрдм, рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдЯреНрдЯрд╛ рдмреЛрд▓рддреЗ рд╣реБрдП, I _anticipate_, рдЕрдЧрд░ рд╣рдо Carrier рдЧреБрдг рдЕрдкрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╡рд┐рд░реЛрдз рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рдЬрдмрдХрд┐ рдпрд╣ рдЧреБрдг рдореВрд▓ рд░реВрдк рд╕реЗ Result рд╕реЗ / рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ) ? Option , рддреЛ рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ fn Option рд▓реМрдЯрд╛рддрд╛ рд╣реИ; рдФрд░ рдпрджрд┐ рдЖрдк ? Result<T,E> , рддреЛ рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ fn Result<U,F> рдЬрд╣рд╛рдВ E: Into<F> ; рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк ? рдХреЛ Option рдФрд░ fn Result<..> , рддреЛ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рдпрдо рдЖрдЬ рдХреА рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдПрдЪрдХреЗрдЯреА рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реЛрдЧрд╛ (рдмреЗрд╢рдХ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕реЗ рдЕрднреА рддрдХ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереЗ, рддреЛ рдХреЛрдИ рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ Self рдкреИрд░рд╛рдореАрдЯрд░ Carrier рдкрд╛рд╕ type -> type -> type , рдХреНрдпреЛрдВрдХрд┐ Result Carrier рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣ рд╣рдореЗрдВ Self<T,E> -> Self<U,F> рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ _not_ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ Option рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ type -> type (рдпрд╣ рд╕рдм рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдЪрдХреЗрдЯреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╣рдордиреЗ рдЕрдкрдирд╛рдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо ' рд╕рднреА рддрд░рд╣ рд╕реЗ "рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реИрдВрдмрдбрд╛рд╕" рдкрд░ рдЬрд╛рдПрдВрдЧреЗ)ред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЪрд░рдо bool рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдмреВрд▓ рдХреЗ рд▓рд┐рдП Carrier рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ Carrier рдПрдХ рдиреНрдпреВрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ) 'd рдмреВрд▓)ред

рдореИрдВрдиреЗ рдЬреЛ рдорд╛рдирд╛ рдерд╛ рдХрд┐ ? рд▓рд┐рдП рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд┐рдпрдо рд╕реНрд╡рдпрдВ рд╡рд┐рд╢реЗрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ? рдХреЗрд╡рд▓ рдирд╛рдордорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ Foo<..> _some_ рджрдпрд╛рд▓реБ, рдФрд░ рдпрд╣ рдХрд┐ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдВрд▓рдЧреНрди fn рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рднреА Foo<..> ред рддреЛ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рддрд╛рдЬреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде Foo рдХреЛ рддреБрд░рдВрдд рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рди рддреЛ ? рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рди рд╣реА рд╕рдВрд▓рдЧреНрдирдХ fn рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреНрдЮрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рдХреБрдЫ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рджрд╛рдпрд┐рддреНрд╡ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рднреА рддрджрд░реНрде рд╣реИред :) рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рд╣рдо Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдЪрд╛рд░ Expr: Carrier<Return> рдЬрд╣рд╛рдВ Expr ? рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ Return рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:

trait Carrier<Target> {
    type Ok;
    fn is_ok(&self) -> bool; // if true, represents the "ok-like" variant
    fn unwrap_into_ok(self) -> Self::Ok; // may panic if not ok
    fn unwrap_into_error(self) -> Target; // may panic if not error
}

рдлрд┐рд░ expr? рдбрд┐рдЧрдЧрд░ рдХреЛ:

let val = expr;
if Carrier::is_ok(&val) {
    val.unwrap_into_ok()
} else {
    return val.unwrap_into_error();
}

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Target _error_ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдПрдХ рдирдпрд╛ Result рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

impl<T,U,E,F> Carrier<Result<U,F>> for Result<T,E>
    where E: Into<F>
{
    type Ok = T;
    fn is_ok(&self) -> bool { self.is_ok() }
    fn unwrap_into_ok(self) -> Self::Ok { self.unwrap() }
    fn unwrap_into_error(self) -> { Err(F::from(self.unwrap_err())) }
}

рдФрд░ рдлрд┐рд░ рд╣рдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

impl<T> Carrier<Option<T>> for Option<T> {
    type Ok = T;
    fn is_ok(&self) -> bool { self.is_some() }
    fn unwrap_into_ok(self) -> Self::Ok { self.unwrap() }
    fn unwrap_into_error(self) -> { debug_assert!(self.is_none()); None }
}

рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо рдмреВрд▓ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

struct MyBool(bool);
impl<T> Carrier<MyBool> for MyBool {
    type Ok = ();
    fn is_ok(&self) -> bool { self.0 }
    fn unwrap_into_ok(self) -> Self::Ok { debug_assert!(self.0); () }
    fn unwrap_into_error(self) -> { debug_assert!(!self.0); self }
}

рдЕрдм рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗ рдмреАрдЪ interconversion рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ _could_ Option рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ Result рдЬреЛрдбрд╝рдХрд░ рдПрдХ impl рдХреА рддрд░рд╣:

impl<T> Carrier<Result<T,()>> for Option<T> { ... }

рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ (рдФрд░ рд╣рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред

@Stebalien

FYI рдХрд░реЗрдВ, рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 1450 (рдПрдирдо рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░) рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЗ рдЦреЛрд▓реЗрдВрдЧреЗ рд╡рд╛рд╣рдХ рд▓рд╛рдЧреВ

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рд▓рд┐рдЦрд╛ рдерд╛, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдПрдирдо рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рдд рдореИрдВрдиреЗ рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдЧреМрд░ рдХрд┐рдпрд╛, рдЬреЛ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ "рдереНрд░реЛ" рдХреАрд╡рд░реНрдб рдХреЛ рд▓реЗрдХрд░ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдк Err(foo)? рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╣реАрдВ рдЖрддрд╛ ' t _know_ рдХрд┐ рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ return Err(foo) рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдЖрдкрдХреЛ into() рд░реВрдкрд╛рдВрддрд░рдг рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦреЗ рдирд╣реАрдВ рдорд┐рд▓рддреЗред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ:

let value = if something_or_other() { foo } else { return Err(bar) };

рдУрд╣, рдореБрдЭреЗ рдПрдХ рдФрд░ рдмрд╛рдд рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ _should_ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ foo.iter().map().collect()? , рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрд╣рд╛рдВ fn Result<..> рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╡рд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ fn рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ Result , рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд┐рд╣рд┐рдд рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ, рдХрдо рд╕реЗ рдХрдо)ред

рдУрд╣, рдФрд░, рдореЗрд░реЗ Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕рдВрд╕реНрдХрд░рдг рд╢рд╛рдпрдж рд╣реЛрдЧрд╛:

trait Carrier<Target> {
    type Ok;
    fn into_carrier(self) -> Result<Self::Ok, Target>;
}

рдЬрд╣рд╛рдБ рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:

impl<T,U,E,F> Carrier<Result<U,F>> for Result<T,E>
    where E: Into<F>
{
    type Ok = T;
    fn into_carrier(self) -> Result<T, Result<U,F>> {
        match self { Ok(v) => Ok(v), Err(e) => Err(e.into()) }
    }
}

рдФрд░ expr? рдЬреИрд╕реЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛрдВрдЧреЗ:

match Carrier::into_carrier(expr) {
    Ok(v) => v,
    Err(e) => return e,
}

рдЗрд╕ рдХреЗ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ (рдпрд╛ рдЙрд▓реНрдЯрд╛ ...) рдпрд╣ рд╣реИ рдХрд┐ Into рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрдм рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@nikomatsakis IMO, рдЧреБрдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп IntoCarrier рдФрд░ IntoCarrier::into_carrier рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, Carrier (рдПрдХ рдирдпрд╛ рдИрдирд╛рдо)ред рдЕрд░реНрдерд╛рддреН:

enum Carrier<C, R> {
    Continue(C),
    Return(R),
}
trait IntoCarrier<Return> {
    type Continue;
    fn into_carrier(self) -> Carrier<Self::Continue, Return>;
}

@Stebalien рдпрдХреАрди рд╣реИ, рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рд▓реИрдВрдЧ рдЯреАрдо рдХреА рдмреИрдардХ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрди (рдФрд░ рд╕рдВрднрд╡ ? рдЕрдХреЗрд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдХреИрд░рд┐рдпрд░ рдЧреБрдг рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЙрддрд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ FCPред

рдореИрдВрдиреЗ рдХреИрд░рд┐рдпрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 1718 рдЦреЛрд▓рд╛ред

рд╕реБрдиреЛ рд╕реБрдиреЛ, рд╕реБрдиреЛ! ? рдСрдкрд░реЗрдЯрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдм рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЪрд░реНрдЪрд╛ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд░рд╣рддреА рд╣реИ рдЬреЛ 18 рдЕрдЧрд╕реНрдд рд╕реЗ рд╢реБрд░реВ рд╣реБрдИ рдереАред рдЭреБрдХрд╛рд╡ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╣реИред

рдорд╛рд▓рд╡рд╛рд╣рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдВрд╕реНрдХрд░рдг # 35777 рдореЗрдВ рдЙрддрд░рд╛, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдЕрд╡рд╛рдВрдЫрд┐рдд рдмрд╛рддрдЪреАрдд рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред

@ рд░рд╕реНрдЯ-рд▓реИрдВрдЧ / рд▓реИрдВрдЧ рдХреЗ рд╕рджрд╕реНрдп, рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдирд╛рдо рд╕рд┐рдЧреНрдирд▓ рд╕рдордЭреМрддреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВред рдЪрд┐рдВрддрд╛рдУрдВ рдпрд╛ рдЖрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝ рджреЗрдВред рдЕрдиреНрдп, рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

  • [x] @ рдореБрдиреЛрдордХреЛрддреНрд╕рдХрд┐рд╕
  • [x] @nrc
  • [x] @ рдиреНрдпреВрдЯрди
  • [x] @ рд╣реЗрдбреНрдбреА
  • [] @pnkfelix (рдЫреБрдЯреНрдЯреА рдкрд░)

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЯреЛрдХрд┐рдпреЛ рдЖрдзрд╛рд░рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп and_then рдмрд╣реБрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ foo().?bar() foo().and_then(move |v| v.bar()) рд▓рд┐рдП рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╡рд╛рдпрджрд╛ рдПрдХ рд╣реА рдЕрдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛, рдЗрд╕ FCP question_mark рд╕реБрд╡рд┐рдзрд╛, рдирд╣реАрдВ рдкрдХрдбрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд╕рд╣реА рд╣реИ? рдЗрд╕ рдЕрдВрдХ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЗрд╕ рдПрдХ рдЕрдВрдХ рдореЗрдВ рдЙрди рджреЛрдиреЛрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рд╕реЗ рд╣реИред

@seanmonstar рдмрд╛рдж рдХреЛ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рд╛рдБред рд╢рд╛рдпрдж рдЕрдЧрд░ FCP рд╕реНрд╡реАрдХреГрддрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдпрд╣ catch рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рдмрд╕ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ FCP рд╕рд╡рд╛рд▓_рдорд╛рд░реНрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдкрдХрдбрд╝ рдирд╣реАрдВ, рд╕рд╣реА? рдЗрд╕ рдЕрдВрдХ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЗрд╕ рдПрдХ рдЕрдВрдХ рдореЗрдВ рдЙрди рджреЛрдиреЛрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рд╕реЗ рд╣реИред

рд╣рд╛рдВ, рдмрд╕ question_mark рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

Https://github.com/rust-lang/rfcs/issues/1718#issuecomment -241764523 рдкрд░ рдлрд╝реЙрд▓реЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ ? рдХреЛ "рдмрд╛рдЗрдВрдб рдХрд░рдВрдЯ рдХрдВрдЯрд┐рдиреНрдпреВ" рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди map_err(From::from) ? рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдмрд╛рдЗрдВрдб рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдмрдирд╛рддрд╛ рд╣реИ: /ред рдпрджрд┐ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП From рдЙрджрд╛рд╣рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрджрд╛рд░реНрде v? => from(v.bind(current-continuation)) ред

рдЗрд╕ рдЖрдВрддрд░рд┐рдХ рд╕реВрддреНрд░ рдореЗрдВ ? рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ:

https://internals.rust-lang.org/t/the-operator-will-be-harmful-to-rust/3882/

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдЧрд╣рд░рд╛ рд╕рд╛рд░рд╛рдВрд╢ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рд╕реНрдорд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рд╕рд╡рд╛рд▓ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ ? рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╢рд╛рдпрдж рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдкрд╛рд╕ рд╕рд╛рд░рд╛рдВрд╢ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдЗрд╕реЗ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @hauleth рдиреЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ @ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рд╣реИ @ nikomatsakisред

try! , рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдХрд╣реАрдВ рдПрдХ рд╡рд╛рдкрд╕реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдореИрдХреНрд░реЛ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред ? рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП return , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ 3 рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ:

  • рдирд┐рд╣рд┐рддрд╛рд░реНрде
  • рд╕реНрдкрд╖реНрдЯ рд╡рд╛рдкрд╕реА
  • ?

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ @CryZe рдиреЗ рдХрд╣рд╛:

рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдВрдд рддрдХ рдкрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

let a = try! (x? .y .z .z);

рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рд┐рдЯрд░реНрди рдХреЛ рдЫрд┐рдкрд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдЬреИрд╕реЗ coffeescript рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рд╕реНрддрд░ рдХреЗ рдмрдЬрд╛рдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрддрд░ рдкрд░ ? рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рдпрджрд╛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдЧрд╛? рдЕрдиреНрдп рд╕рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ @CryZe рдиреЗ рдХрд╣рд╛:

рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдВрдд рддрдХ рдкрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рдирд╣реАрдВ рд╣реИред рддреЛ рдпрд╣ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

let a = try! (x? .y .z .z);

рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде!, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдХрд╣реАрдВ рдПрдХ рд╡рд╛рдкрд╕реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдореИрдХреНрд░реЛ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рдПрдХ рдмрд╛рд░ ? рдПрдХ рдмрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рд╡реНрдпрд╛рдкрдХ рд╣реИ рдФрд░ Rust рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдЪрдп рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

@conradkleinespel

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдХреЗ 3 рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ:

  • рдирд┐рд╣рд┐рддрд╛рд░реНрде

рдЬрдВрдЧ рдХреЗ рдкрд╛рд╕ "рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди" рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдРрд╕реЗ рднрд╛рд╡ рд╣реИрдВ рдЬреЛ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред

if foo {
    5
}

7

рдпрджрд┐ рд░рд╕реНрдЯ рдХрд╛ "рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓" рд╣реЛрддрд╛, рддреЛ рдпрд╣ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ return 5 ред

рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╣реА рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? Rust рдореЗрдВ рд╣рд░ рдЗрдВрдЯреНрд░реЛ рдореЗрдВ рд╕реНрдерд┐рд░, рд╡реНрдпрд╛рдкрдХ рдФрд░ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, https://github.com/rust-lang/book/pull/134

рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде!, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдХрд╣реАрдВ рдПрдХ рд╡рд╛рдкрд╕реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдореИрдХреНрд░реЛ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╣реА рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? Rust рдореЗрдВ рд╣рд░ рдЗрдВрдЯреНрд░реЛ рдореЗрдВ рд╕реНрдерд┐рд░, рд╡реНрдпрд╛рдкрдХ рдФрд░ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдЬрд┐рд╕реЗ рдореИрдВ "рдореИрдХреНрд░реЛрдЬрд╝" рд╕реЗ рдЕрд╡рдЧрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ "рдпрд╣рд╛рдВ рдбреНрд░реЗрдЧрди рд╣реЛ" рдФрд░ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореИрдХреНрд░реЛрдЬрд╝ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ" рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ, "рдмрд┐рдирд╛ рдЬрдВрдЧ" рднрд╛рдЧ рдореЗрдВред

@hauleth

let a = try! (x? .y .z .z);

рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред

рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдБред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдЬрд╛рджреВ рдХрд╛ рдкреНрд░рддреАрдХ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ try! рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╛рд╣рд░ рдирд╣реАрдВред

@hauleth

let a = try! (x? .y .z .z);
рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред
рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдБред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдПрдХ рдЬрд╛рджреВ рдХрд╛ рдкреНрд░рддреАрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдФрд░ рдмрд╛рд╣рд░ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рд╣реИ рдХрд┐ ? рдХреЛ рдХреЗрд╡рд▓ try! рдореЗрдВ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рдореИрдВ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ ? рдХреЛ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдЧрд╛ рдФрд░ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ try! рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЙрд╕реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@steveklabnik рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдХреЗ рдХрд╛рд░рдг рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 5 рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдиреЗ рджреЗрддрд╛ рд╣реИ:

fn test() -> i32 {
    5
}

рдпрд╣рд╛рдБ, 5 рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИ, рд╣реИ рдирд╛? рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ return 5; рд╡рд┐рд░реЛрдз рд╣реЛрдЧрд╛ред рдпрд╣ рдорд╛рди рд▓реМрдЯрд╛рдиреЗ рдХреЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред рдЬреЛ рдореБрдЭреЗ рд░рд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИред рддреАрд╕рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдИрдПрдордУ рдХреЛ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред

рдпрд╣ рдирд╣реАрдВред рдпрд╣ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреАред "рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓" рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдХрд╣реАрдВ рд╕реЗ рднреА рд╡рд╛рдкрд╕реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдЕрдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рдЗрд╕реЗ "рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓" рдирд╣реАрдВ рдХрд╣рддреА, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдореЗрд░реЗ рдХреЛрдб рдирдореВрдиреЗ рдореЗрдВ рд╣реЛрдЧрд╛ред

@steveklabnik рдареАрдХ рд╣реИ, рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: +1:

рдпрд╣ рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИ! рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ "рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓" рдЧреНрд░рд╣рдг рдХрд░рддреЗ рджреЗрдЦрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдореЗрдВ рдХрд╣реАрдВ рднреА ; рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ .... рдХрд┐ _would_ рдмрд╣реБрдд рдмреБрд░рд╛: рдореБрд╕реНрдХреБрд░рд╛рдПрдВ:

@ рдЙрд▓реЗрде ? рдСрдкрд░реЗрдЯрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ and_then рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдСрдкрд░реЗрдЯрд░ред рдЬрдВрдЧ рдХреА? рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдЯреАрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛_ рдпрд╣ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╣реЛрддрд╛ рд╣реИред рддреЛ рдмрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реЛ? and_then рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯреНрд░рд┐рдХ рд╢реБрдЧрд░ рдФрд░ рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рдХреЛрд╢рд┐рд╢ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛! рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдЕрд▓рд┐рдЦрд┐рдд рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ" рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рд╕рд╛рдл рд╕реНрдерд┐рддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рд┐рдЯрд░реНрди рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░? рдСрдкрд░реЗрдЯрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ (рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдЬреИрд╕реЗ рдЧреИрд░-рд░рд┐рдЯрд░реНрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ)ред

рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реАред

┼БреБрдХрд╛рдЬрд╝ рдиреАрдорд┐рдпрд░
[email protected]

Wiadomo Christ─З napisana przez рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рд╕реЗрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com w dniu 02.09.2016, рдУ рдЧреЙрдбрдЬрд╝ред 21:05:

@hauleth https://github.com/hauleth рдж? рдСрдкрд░реЗрдЯрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ and_then рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдСрдкрд░реЗрдЯрд░ред рдЬрдВрдЧ рдХреА? рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдЯреАрдХ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛_ рдпрд╣ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╣реЛрддрд╛ рд╣реИред рддреЛ рдмрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реЛ? and_then рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯреНрд░рд┐рдХ рд╢реБрдЧрд░ рдФрд░ рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рдХреЛрд╢рд┐рд╢ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛! рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдЕрд▓рд┐рдЦрд┐рдд рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ" рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рд╕рд╛рдл рд╕реНрдерд┐рддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░рд┐рдЯрд░реНрди рдЕрдзрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░? рдСрдкрд░реЗрдЯрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ (рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдЬреИрд╕реЗ рдЧреИрд░-рд░рд┐рдЯрд░реНрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ)ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/rust-lang/rust/issues/31436#issuecomment -244461722 рдкрд░ https://github.com/notifications-unsubscribe-auth/ рдкрд░ рдореНрдпреВрдЯ

рдФрд░ рдЬрдм рд░рд╕реНрдЯ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рдерд╛? рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрдардиреАрдпрддрд╛ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдБрдЪрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдпрд╣; рд╕реБрдкрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдерд╛ (рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╢реЛрд░ рд╣реИ рдЬреЛ рдорд╕реНрддрд┐рд╖реНрдХ рдореЗрдВ рдЫрди рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ред рдФрд░ рдореБрдЭреЗ рд╡рд╣ рдХрд╛рдлреА рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИред

@steveklabnik рд╣рдо рдЗрд╕реЗ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╛рдкрд╕реА" рдХрд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ ред

рд░реВрд╣ рдХреЗ рдореЗрд░реЗ рд╕рднреА рд╡рд░реНрд╖реЛрдВ рдореЗрдВ

рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ ? рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ try! , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд░рд╕реНрдЯ рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ Result 'рдореЛрдирд╛рдб' main рдФрд░ рдХрднреА-рдХрднреА рдкрддреНрддреА рдХреЗ рдиреЛрдбреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ рд╣реИ; рдФрд░ рдРрд╕реЗ рдХреЛрдб рд╕реЗ рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреМрди рд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреИрджрд╛ рдХрд░ рд░рд╣реА рд╣реИрдВ - рд╡реЗ рд╕рднреА рдХреЗрд╡рд▓ рд╕реНрдЯреИрдХ рдЕрдк рд╡рд╛рдкрд╕ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВред

? рд╕рд╛рде рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╣реА рд▓рд╛рдн рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ - рдЙрдкрд╕рд░реНрдЧ рд╕реНрдерд┐рддрд┐ - рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде, рдЕрдЧрд░ рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИред рдореЗрд░реА рдЕрдиреНрдп рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ рдХрд┐ рд╢рд╛рдпрдж рд╡рд░реНрддрдорд╛рди рд╕реВрддреНрд░реАрдХрд░рдг рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдХреЗ рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рд╡рд░реНрддрдорд╛рди Result рд░реВрдкрд╛рдВрддрд░рдг рд░реБрд╕реНрддрдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛; рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд░рд╕реНрдЯ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрдИ рдбрд┐рдЬрд╝рд╛рдЗрди рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрдж рд╕рдХрддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдареЛрд╕ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рднреА рдХрдИ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореИрдВ ? рдФрд░ рдХреИрд░рд┐рдпрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрдпрд╛рд░ рдореЗрдВ рд╣реВрдВред рдореИрдВрдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪреЗрдирд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ) рдЬреЛ try! рд╕рд╛рде рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдерд╛ред рдореИрдВ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рднреА рдЧрдпрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ ? рд╕рд╛рде рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдЬреИрд╕реЗ рдХрд┐ рдореИрдВ ? рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ +1 рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ, рдЬреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЛ рднреА рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рдЪрд░реНрдЪрд╛ рдореЗрдВ рд▓рд╛рдпрд╛ рдерд╛ред

рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдХреЗ рд╕рд╛рде? рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╣реА рд▓рд╛рдн рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ - рдЙрдкрд╕рд░реНрдЧ рдХреА рд╕реНрдерд┐рддрд┐ - рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде, рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рдереЗред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдирд╣реАрдВ? рдЕрдкрдиреЗ рдЖрдкред

рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ RFC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдирд╣реАрдВ? рдЕрдкрдиреЗ рдЖрдкред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде _is_
RFC рдХреЗ рд╡рд┐рд▓рдп рд╕реЗ рдкрд╣рд▓реЗ ? рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдПрдХ рд╕рдорд░реНрдердХ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдердХрд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдЬрдм рд╕реНрдерд┐рд░реАрдХрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рд╡реИрд╕реЗ рднреА, рдореИрдВ рдЕрдкрдиреЗ +1 рдХреЛ @mitsuhiko рдХреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ

рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд░рдПрдлрд╕реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХреЛ "рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ" рдХрд╣рд╛рдВ рд╕реЗ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рд╕реЗ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╣рд╕ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреАрдо рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдереАред рдореИрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдореЗрдХреНрд░реЛрд╕" рдХреЗ рд▓рд┐рдП рдПрдХ RFC рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП func1().try!().func2().try!() (рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ)ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ? рдСрдкрд░реЗрдЯрд░, рд▓реЗрдХрд┐рди рдореИрдВ @brson рдЬреИрд╕реА рд╣реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ @nikomatsakis рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рд╡рд┐рд╡рд╛рдж рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА рддрд░реНрдХ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд▓рдЧрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрдХрдбрд╝ {..} рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдЕрдкрдиреА рдЪрд┐рдВрддрд╛ рд╡реНрдпрдХреНрдд рдХреА рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рд╕рд╢рд░реНрдд рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╣реЛрдирд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ рд░реВрд╕реНрдЯ рдХреЛ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлреИрд▓реЗ рд╣реБрдП рдЬрдЯрд┐рд▓рддрд╛ рдмрдЬрдЯ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣рд╛ рд╣реИред

@mcpherrinm рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЙрд▓ рдкрд░ operator() рдХреЛ "рд╕рд╢рд░реНрдд рд╡рд╛рдкрд╕реА рдСрдкрд░реЗрдЯрд░" рдХрд╣реЗрдВрдЧреЗ?

рдЬрдЯрд┐рд▓рддрд╛ рдмрдЬрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ try! рд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ try! -рд╣рд╛рдп рдХреЛрдб рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ, рдЬреЛ ? рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ?
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдЕрдЧрд░ "рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рди _at all_" рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЧрдВрднреАрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рдПрдХ рд╕рдордЭреМрддрд╛ рд╕реБрдЭрд╛рдирд╛: https://github.com/rust-lang/rfcs/pull/1737

рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реИрд╕реЗ рднреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ "рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @keeperofdakeys рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ ? рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдЙрд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдЬрдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИ - рдкрдардиреАрдпрддрд╛ред ? рд╕реНрд╡рдпрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдмрд╣реБрдд "рдореЗрдХреНрд░реЛрд╕" рдХреЗ рд╕рд╛рде ? рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдЦреВрдВрдЧрд╛ред

a.some_macro!(b);
// could be syntax sugar for
some_macro!(a, b); 
a.try!();
// could be syntax sugar for
try!(a); 

рдЗрд╕ рддрд░рд╣, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЖрд╕рд╛рди рдЬрдВрдЬреАрд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛ result.try!() рднрд╛рд╖рд╛ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реБрдзрд╛рд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдП ? рдСрдкрд░реЗрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рддрджрд░реНрде рд▓рдЧрддрд╛ рд╣реИред

@brson

рдореЗрд░реА рдЕрдиреНрдп рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ рдХрд┐ рд╢рд╛рдпрдж рд╡рд░реНрддрдорд╛рди рдлреЙрд░реНрдореВрд▓реЗ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдХреЗ рд╣рдо рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдгрд╛рдо рд░реВрдкрд╛рдВрддрд░рдг рд░реВрд╕реНрддрдо рдореЗрдВ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛

рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИред рдпрд╣ рдЗрд╕ рдкрд░ рдХреБрдЫ рдХреЗрдВрджреНрд░рд┐рдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ (рд╢рд╛рдпрдж рдЖрдк рдФрд░ рдореИрдВ рдереЛрдбрд╝рд╛ рдЪреИрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рдереЗред Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди (рджреЗрдЦреЗрдВ https://github.com/rust-lang/rfcs/issues/1718) рдпрд╣рд╛рдБ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛ред

macro_rules! рдореИрдХреНрд░реЛрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдирд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рддрдм рдФрд░ рднреА рдЕрдиреБрд░реВрдк рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдЬрдм рдЙрдирдХреЗ рд▓рд┐рдП рдирдпрд╛ рдЖрдпрд╛рдд рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд░рд╣ рд╣реА рдЖрдордВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрд▓реНрдж рд╣реА рдЙрдиреНрд╣реЗрдВ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рддрд░рд╣ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рддрд░реАрдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдпреЗ рдЧреБрдг рд╣реИрдВ:

  1. рдореЙрдбреНрдпреВрд▓ рджрд╛рдпрд░реЗ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди impl рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ / рд╕реАрдзреЗ impl рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдмрдЬрд╛рдп рд╕реАрдзреЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдЗрд╕ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХрд▓, рдЕрд╕рдВрджрд┐рдЧреНрдз рдкреНрд░рддреАрдХ рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреЗ рд░рд┐рд╕реАрд╡рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрдпреЛрдВрдХрд┐ рдореИрдХреНрд░реЛ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЧреБрдг рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл рдореИрдХреНрд░реЛрдЬрд╝ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ 'рдлреНрд░реА' рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рдорд╛рдирддрд╛ рдПрдХ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреАред

рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ ? рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдХрд┐" рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝ "рдХрд┐рд╕реА рджрд┐рди рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХреБрдЫ рдирд┐рд░реНрдорд╛рдг рдЗрддрдиреЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдЪреАрдиреА рддрдХ рдмрдврд╝рд╛рд╡рд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред for рд▓реВрдк рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред ? рд╡реНрдпрд╡рд╣рд╛рд░ рд░рд╕реНрдЯ рдХреА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХрд╣рд╛рдиреА рдХрд╛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рдЪреАрдиреА рд╣реЛрдирд╛ рдЙрдЪрд┐рдд рд╣реИред

@ рдЙрд▓реЗрде , @ рдХреНрд░рд╛рдпрдЬрд╝реЗ

рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ ? рдХрд╛ and_then рдСрдкрд░реЗрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдХреЛрдЯрд▓рд┐рди рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореИрдВ coffeescript рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ) рдЙрдирдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рд╣реИ рдЬрдВрдЧ рдореЗрдВ рдЗрддрдирд╛ рд╕реАрдзрд╛ред рдЕрд╕рд▓ рдореЗрдВ, and_then рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ maybe_i.and_then(|i| i.foo()) , рд╡реЗ maybe_i.and_then(|i| Foo::foo(i)) , рдкреВрд░реНрд╡ рдХреЛ maybe_i?.foo() рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдХреЛрдИ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Foo::foo(maybe_i?, maybe_j?) maybe_i.and_then(|i| maybe_j.and_then(|j| Foo::foo(i, j))) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдиреЗ рд╕реЗ рднреА рдЕрдзрд┐рдХ рднреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдкрд╣рд▓реЗ ? рдЯрдХрд░рд╛рдиреЗ рдкрд░ рд╡рд╛рдкрд╕реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдпрдХреАрдирди рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдЧрд╛ред

@Stebalien рд╕реНрд╡реАрдХреГрдд RFC рдореЗрдВ, catch { Foo::foo(maybe_i?, maybe_j?) } рд╡рд╣ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@ рд╣реЗрдбреНрдбреА рдЧреБрдб рдкреЙрдЗрдВрдЯред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдпрдХреАрдирди рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдЧрд╛" рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╣рд┐рдд рдХреИрдЪ / рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдпрд╛рд╕ рдмрдирд╛рдо рд╕реНрдкрд╖реНрдЯ рдХреИрдЪ / рдирд┐рд╣рд┐рдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ:

let x: i32 = try Foo::foo(a?.b?.c()?));
let y: Result<i32, _> = Foo::foo(a?.b?.c()?);

рдмрдирд╛рдо:

let x: i32 = Foo::foo(a?.b?.c()?);
let y: Result<i32, _> = catch  Foo::foo(a?.b?.c()?);

(рдореЛрдбреБрд▓реЛ рд╕рд┐рдВрдЯреИрдХреНрд╕)

@Stebalien рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг: рдпрджрд┐ рдореИрдВ Foo рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП bar рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рддреЛ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

bar(Foo::foo(a?.b?.c()?)?)

рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╣реИ? рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрдпрд╛рди рджреЗрдВ ? , рдЗрд╕рдХреЗ рдмрд┐рдирд╛ bar рдПрдХ рдорд┐рд▓реЗрдЧрд╛ Result рдПрдХ рдХреЗ рдмрдЬрд╛рдп Foo ред

@ рд╣реЗрдбреНрдбреА рд╢рд╛рдпрджред рдиреЛрдЯ: рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рдореИрдВ рддрд░реНрдХ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкрд╛рдЗрдк-рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ Foo::foo(bar?) рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЬрдВрдЧ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

рдмрд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдШреГрдгрд╛ рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ рдореИрдВ рдРрд╕реА рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдБ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдзрд┐рдХ рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рд┐рд░реЛрдз рдХрд░реВрдБред рд╡реЗ рд╕рдВрдХрд▓рдХ рдХреЗ рдЪрд░рдгрдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдлрд╝рдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рддрдХ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рдлреА рдореМрд▓рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдХреЛрдИ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрдард┐рди рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред

@Stebalien , ? рд░реВрдк рдореЗрдВ рдкрд╛рдЗрдк рдСрдкрд░реЗрдЯрд░ Foo::foo(bar?) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: Foo::foo(try!(bar)) рдФрд░ bar(Foo::foo(a?.b?.c()?)?) ( Foo::foo : fn(Result<_, _>) -> Result<_, _> рдорд╛рдирддреЗ рд╣реБрдП): bar(try!(Foo::foo(a?.b?.c()?))) ред

@ рдореЗрд░реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ Foo::foo(bar?)? _much_ рдЬрдВрдЧ рдореЗрдВ bar?.foo()? рд╕реЗ рдЕрдзрд┐рдХ рдЖрдо рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, ? рдХреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдХрдо рд╕реЗ рдХрдо рдЧрдбрд╝рдмрдбрд╝ рд╣реЛрдЧрд╛ред ? рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ try!(foo(try!(bar(try!(baz()))))) (2x рдХреЛрд╖реНрдардХ!) рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ; рдпрд╣ рдЖрдорддреМрд░ рдкрд░ try!(baz()?.bar()?.foo()) рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

try!(baz().and_then(bar).and_then(foo))

┼БреБрдХрд╛рдЬрд╝ рдиреАрдорд┐рдпрд░
[email protected]

Wiadomo Ste─З napisana przez рд╕реНрдЯреАрд╡рди рдПрд▓реЗрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com w dniu 05.09.2016, рдУ рдЧреЙрдбрдЬрд╝ред 15:39:

@hauleth https://github.com/hauleth рдореЗрд░реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рдлреВ: рдлреВ (рдмрд╛рд░?)? рдмрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ? .foo () рдЬрдВрдЧ рдореЗрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП,? рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рддрд░реАрдХрд╛ рдХрдо рд╕реЗ рдХрдо рдЧрдбрд╝рдмрдбрд╝ рд╣реЛрдЧрд╛ред рдХреЗ рдкреВрд░реЗ рдмрд┐рдВрджреБ? рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ! (рдлреВ (рдХреЛрд╢рд┐рд╢! (рдмрд╛рд░ (рдХреЛрд╢рд┐рд╢! ()))))) (2x рдХреЛрд╖реНрдардХ!)ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХреЛрд╢рд┐рд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ! (baz () ?. рдмрд╛рд░ ()? рдлреВ ())ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/rust-lang/rust/issues/31436#issuecomment -244749275 рдкрд░ https://github.com/notifications-unsubscribe-auth/ рджреЗрдЦреЗрдВ AARzN1Hdk6uk5-SoYawtgAbJUDf_8MsMks5qnBumgaJpZM4HUm_-ред

рдереЛрдбрд╝реЗ рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐? -Feature рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдбрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрднрд╡рддрдГ рдЗрди рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ?ред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

https://github.com/colin-kiegel/rust-derive-builder/issues/25

рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛ рд╡рд┐рдЪрд╛рд░ @nrc рдФрд░ @withoutboats рдкрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреБрдЫ рдареЛрд╕ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

@ рд╣рдиреАрд╕реЗрд▓ рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╕рдордЭрддрд╛ рдХрд┐ ? "рдореБрдЦреНрдп рд░реВрдк рд╕реЗ" рдмрд┐рд▓реНрдбрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЬрдмрдХрд┐ рдмрд┐рд▓реНрдбрд░реНрд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣рд▓реНрдХреЗ, рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд▓рд╛рдн рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИ, рдореИрдВ рд╣рд░ рд╕рдВрджрд░реНрдн рдореЗрдВ ? рд╕реЗ try! рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВред

@ рд╡рд╛рдпрджрд╛ рд╡рд╛рдпрджрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд┐рдВрддрд┐рдд рдерд╛ред рд▓реЗрдХрд┐рди, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ async / await рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ ? рдХреА рдХрд┐рд╕реА рднреА рдЬрд╝рд░реВрд░рдд рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдУрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИрдВ: рдЖрдк (await future)?.bar() рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред

(рд╢рд╛рдпрдж рдХреАрд╡рд░реНрдб await рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рддреНрдпрдп рдСрдкрд░реЗрдЯрд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ parens рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛрдВред рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рд╡рд░реАрдпрддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАред)

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕реНрдерд┐рд░ рд╣реЛрдВ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреЗрдЦрд╛ рдФрд░ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдкрд╛рдпрд╛ред рд╣рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╣рд╛рдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ @steveklabnik рдЖрдо рддреМрд░ рдкрд░ рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдмрдЪрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реЛрдЧреА рдпрджрд┐ рд╡реЗ рдХрднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рд▓реЗрдЦрди рдкрд░ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рд╣реИред

@solson рддреБрдо рд╕рд╣реА рд╣реЛ, рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕реЗ рд▓рд╛рдиреЗ рдХреА рдЬрдЧрд╣ рдирд╣реАрдВ рдереА - рдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реНрдерд┐рд░ рд░рд╕реНрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлреАрдЪрд░ рд╕реНрдерд┐рд░реАрдХрд░рдг рдФрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдЖрд░рдПрдлрд╕реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдмрд╕ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ (рд▓реЗрдХрд┐рди рдЙрдЪрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдмрд┐рдирд╛, рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ RFC рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджрд╛рдИрдВ рдУрд░ рдХрд╛ рдХреБрдЫ рд╣реЛрдирд╛ рд╣реИ рдЬреЛ try! рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ "рдХреЛрд╢рд┐рд╢" _much_ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ "рдкрдХрдбрд╝рдиреЗ" рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдХ / рдЬрдВрдЬреАрд░ рдкрдврд╝рддрд╛ рд╣реИред ред рдореВрд▓рддрдГ рдореИрдВ ? рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 100% рд╕рдорд░реНрдердХ рдерд╛, рд▓реЗрдХрд┐рди рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ рдХреБрдЫ (рд╕рд╛рдл!) рдХреЛрдб рдХреЛ рдкрд╣рд▓реЗ рд╣реА ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареЛрдХрд░ рдЦрд╛рдИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг ? рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ! ред рдЬреЛ рдЕрдм рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ "рдирдИ рдХреЛрд╢рд┐рд╢" рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреЛрд▓_ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ_ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ (рдлрд╝реЛрд░рдо рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде) рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ ? рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддреАрдХ (s) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреАрдб-рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред ред рдПрдХ рд▓рдВрдмреЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ ? рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рди рдмрджрд▓реЗред рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдЙрди рдЕрдиреНрдп рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрддреАрдд рдореЗрдВ ?! (рдпрд╛ ?? ) рдпрд╛ рдХреЗрд╡рд▓ "рдЙрдкрдпреЛрдЧ? рдмрдирд╛рдо рдЪрд░рд┐рддреНрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ" рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рдереЗред

Btwред ? рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред рдФрд░ рдЬреЛ рдЗрд╕реЗ рдЬрдВрдЧ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред (рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЪрд┐рдВрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ)ред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдкреЛрд▓ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗред рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди try! => ? рдХрд┐рд╕реА рднреА рд▓реЗрдЦрди рдФрд░ / рдпрд╛ рд░реАрдбрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

рдкреБрдирд╢реНрдЪ:
рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ ("?", "?", "," ?? ") рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкрд╕рдВрдж рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд┐рд╕реНрдЯ рд▓рдЧрд╛ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ ? ?! рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ RFC рдерд╛ рдЬрд┐рд╕реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: smiley_cat:ред

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ?? рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдмреБрд░рд╛ рд╣реИ ? рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ expr??? рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛)

? рдмреЗрд╣рдж рдЖрд╕рд╛рди рдЕрдирджреЗрдЦреА рд╣реИ

рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдкреВрд░реА рддрд░рд╣ рд╕реЗ unhighlighted рдХреЛрдб? рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд┐рдВрдЧ?
рдпрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ ? рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдПрдХ ? рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ _all_ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреНрдп ? рдХреЛ рдПрдХ рдЪрдордХреАрд▓реЗ рдкреАрд▓реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдП _any_ рдХрдард┐рдирд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред

рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп ?? рдпрд╛ ?! рд╕рд╛рде рдмреЗрд╣рддрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд░реВрдВрдЧрд╛ред

@dathinab рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .try! () рдпрд╛ рдХреБрдЫ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП UFCS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

let namespace = namespace_opt.ok_or(Error::NoEntry).try!();

рдЗрд╕ рддрд░рд╣ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдЕрдЧрд░ .unwrap() рд╕реЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рднреА рдирд╣реАрдВ рд╣реИред

@ рд╣реЗрдбреНрдбреА : рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЬреИрд╕реЗ ? рдЖрд╕рд╛рдиреА рд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрдд рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рджреЛрдиреЛрдВ рдПрдХ рдФрд░ рд░рд┐рдЯрд░реНрди рдкрде (/ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдкрде) рдФрд░ рд╕рдВрднрд╡ рд░реВрдк рд╕реЗ Result<T> рд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред T

@CryZe : рдореИрдВ .try!() рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╣реИ, рдЗрддрдирд╛ рдмреБрд░рд╛ рднреА рдирд╣реАрдВ рд╣реИред

@CryZe рдореБрдЭреЗ рд╡рд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рднреА рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди @withoutboats рдиреЗ рдХреБрдЫ рдареЛрд╕ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рднрд╛рд╖рд╛ рдХреЛ рдЪреЛрдЯ рдХреНрдпреЛрдВ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреА рд╣реИред
рджреВрд╕рд░реА рддрд░рдл, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдХреНрд░реЛрдЬрд╝ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ ? рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдЦреЗрд▓реЗрдВрдЧреЗред

рдореИрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдЬрдЧрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ ? рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рднреА рджреГрд╢реНрдпрдорд╛рди рдирд╣реАрдВ рд╣реИрдВред

рд╣рд╛рдБ рд╡рд╣реАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреАрд╡рд░реНрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╖рд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рджреЛрдиреЛрдВ рдореЗрдВ, рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@CryZe : рд╢рд╛рдпрдж ?try рдЬреИрд╕рд╛ рдХреБрдЫ рдХреАрд╡рд░реНрдб рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ ( ?try )ред

@eddyb

рдФрд░ рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

? рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдмрдврд╝реЗрдЧреА, рдЬрдмрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ ? рдЭреВрдареЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░реНрд╕ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ (рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ) рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВрдЧреЗред рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдлреНрд░рд┐рдВрдЬ рдореЗрдВ (рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ) "рд╣реЛ рд╕рдХрддрд╛ рд╣реИ" рдорд╛рд░реНрдХрд░ рдХреЗ рдХреБрдЫ рд░реВрдк рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
screen-2016-09-15-175131

рд╡рд╛рд╣ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЖрдкрдХреЗ рд╕рдВрдкрд╛рджрдХ рдиреЗ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рд╣рд░ рд╕рдордп (рдЬреИрд╕реЗ) рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП GitHub рдкрд░)ред

2016-09-15 23:52 GMT + 02: 00 рд╕реНрдЯреАрд╡рди рдПрд▓рди рд╕реВрдЪрдирд╛рдПрдВ @github.com:

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
[рдЫрд╡рд┐: рд╕реНрдХреНрд░реАрди-реирежрезрем-режреп -резрел-рез13релрезрейрез]
https://cloud.githubusercontent.com/assets/310393/18568833/1deed796-7b6d-11e6-99af-75f0d7ddd778.png

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/31436#issuecomment -247465972,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABYmbjyrt07NXKMUdmlBfaciRZq7uBVEks5qqb4sgaJpZM4HUm_-
ред

@CryZe рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ GitHub рд╕рд┐рд░реНрдл рдХреБрдЫ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ; рд╣рдо рдЗрд╕реЗ рдкреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :-)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд░рд╕реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░реНрд╕ рджреГрд╢реНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ? рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рджреГрд╢реНрдп рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ? рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдпрд╣рд╛рдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдорд┐рд░реА рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореВрд▓ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд╕реБрдирдХрд░, try!(...) рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдЦреБрд╢-рдкрде рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрджреГрд╢реНрдп рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИред рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рдХреАрд╡рд░реНрдб рдореЗрдВ ? рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рд╣реА рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реЛрдЧрд╛ред

рджреВрд╕рд░реА рдУрд░, ? , рдЬрдм рдореБрдЭреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдлреАрдХрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдФрд░ рдЬрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрднреА рднреА ? рдареАрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред ? рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдЕрджреГрд╢реНрдп рдЕрдкрд╡рд╛рджреЛрдВ рдФрд░ try! рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИред

?! рдЬреИрд╕реЗ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рд╕рд░реНрдЬрд┐рд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдХреЛрдб рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдмрджрддрд░ рдмрдирд╛ рджреЗрдЧрд╛ред

рд╣рд╛рд░реНрджрд┐рдХ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреА рдЕрд╡рдзрд┐ (рд╕рд╛рде рд╣реА рдПрдХ рдкреВрд░реНрд╡ рдЗрдВрдЯрд░реНрдиреНрд╕ рдереНрд░реЗрдб ) рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЖрдЬ рддрдХ рдХреА

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рджреЗрдВ: @ рдЬрдВрдЧ-рд▓рдВрдЧ / рд▓рдВрдЧ рдЯреАрдо рдиреЗ Result рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ catch рдлрд╝реАрдЪрд░ рдХреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ); рдЗрд╕реА рддрд░рд╣, рддрдерд╛рдХрдерд┐рдд "рд╡рд╛рд╣рдХ рд╡рд┐рд╢реЗрд╖рддрд╛" рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рдзрди рд╣реИ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ? рдХреА рддрд░рд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Option , рд╣реИ рдкреВрд░реНрд╡ рдЖрд░рдПрдлрд╕реА рдЪрд░реНрдЪрд╛ рдЪрд░рдг рдореЗрдВ рдЕрднреА рднреА ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдЙрдард╛рдП рд╣реИрдВ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝ рд╕рдХреЗрдВ (рдЬреЛ рдХрд┐ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдкрд╣рд▓реЗ рдХреА рдХреБрдЫ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред

рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рд▓реЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ FCP 22 рдЕрдЧрд╕реНрдд рдХреЛ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ ред рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдереАрдо рдореВрд▓ RFC рдереНрд░реЗрдб рдореЗрдВ рднреА рд╣реБрдИрдВред рдпрджрд┐ рдЖрдк рдереНрд░реЗрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ FCP рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдЙрд╕ рдереНрд░реЗрдб рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

? рдСрдкрд░реЗрдЯрд░ рдХрд╛ рджрд╛рдпрд░рд╛ рд╡рд░реНрддрдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рдиред

рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдЬ рдХрд╛ try! рдореИрдХреНрд░реЛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдмрд┐рдирд╛ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ return рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, ? рдСрдкрд░реЗрдЯрд░ рдЗрд╕ рдорд┐рд╕рд╛рд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди catch рдХреАрд╡рд░реНрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рд╕реЗ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ x.and_then(|b| foo(b)) catch { foo(x?) } рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрдИ рд╣рд╛рд▓рд┐рдпрд╛ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ ? рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ and_then рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрд░реВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдВрддрддрдГ, рдПрдХ рдмрд╛рд░ catch рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЪреВрдХ рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ ред рдФрд░ рд╡рд╣рд╛рдБ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣реИ рдХрд┐ "рд╕рдорд╛рд░реЛрд╣ рд╕реЗ рдмрд╛рд╣рд░ рддреЛрдбрд╝" (рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде) рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ? рдЬрдВрдЧ рдореЗрдВ:

? рдЕрд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкреЙрдЯ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдВрддреБрд▓рди рдХрд╛рд░реНрдп рд╣реИред рд▓рд╛рдЗрдЯрд╡реЗрдЯ рдСрдкрд░реЗрдЯрд░ рд╣реЛрдиреЗ рд╕реЗ "рдЦреБрд╢ рдкрде" рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдВрдХреЗрдд рд╣реЛрдВ рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХрд╣рд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ (рдЬреИрд╕реЗ, 1 , 2 ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ? рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рддрд░реАрдХрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

? рдХреЗ рдмрдбрд╝реЗ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ-рдлрд┐рдХреНрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рд╣рдо foo.try! рдЬреИрд╕реЗ "рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝" рд╕реЗ рд╕рдорд╛рди рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЬрдмрдХрд┐ рд╕рдЪ рд╣реИ, рд╡рд┐рдзрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рд╕реНрд╡рдпрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓рддрд╛ рдЦреЛрд▓рддреЗ рд╣реИрдВ , рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рддрд░реАрдХреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ (рдЬреИрд╕реЗ, рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, foo.try! рдХреА рддрд░рд╣ рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ foo? (рдкрд┐рдЫрд▓реЗ рдмрд┐рдВрджреБ рджреЗрдЦреЗрдВ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рднрд╛рд░реА рд╡рдЬрди рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЕрдиреБрдмрдВрдз From рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореВрд▓ RFC рдЪрд░реНрдЪрд╛ рдореЗрдВ, рд╣рдордиреЗ From рд▓рд┐рдП [рдЪрд╛рд╣реЗ "рдЕрдиреБрдмрдВрдз" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ ((https://github.com/rust-lang/rust/issues/31436#issuomomment) -180558025) lang рдЯреАрдо рдХреА рдЖрдо рд╕рд╣рдорддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ From рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП , рдФрд░ рдпрд╣ рдХрд┐ From рд▓рдХреНрд╖рдг рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ From рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рд╡реИрд╕реЗ рднреА рдпрд╣рд╛рдБ рдХрд╛рдлреА рд╕реАрдорд┐рдд рд╣реИ: рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ Result рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐ , рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ "рд╡рд╛рд╣рдХ" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдЪрд▓ рд░рд╣реА рд╣реИ , рдФрд░ рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдордЬрдмреВрдд рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд╛рд╣рдХ рдЧреБрдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП "рд╕рдлрд▓рддрд╛" рдФрд░ "рд╡рд┐рдлрд▓рддрд╛" рдХрд╛ рдЧрдарди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп (рдЬреИрд╕реЗ, рдПрдХ Option ) рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ, рдПрдХ Result )ред рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рддрд░реНрдХ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо "рддреНрд░реБрдЯрд┐-рдЬреИрд╕реЗ" рдкреНрд░рдХрд╛рд░реЛрдВ (рдЬреИрд╕реЗ, ? рдХреЗ рдмреАрдЪ Option рдХреЛ Result ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╡рд┐рд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЪреВрдВрдХрд┐ рдПрдВрдб-рдпреВрдЬрд░реНрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдмрдВрджрд░рдЧрд╛рд╣ рдХреА рдХреЛрд╢рд┐рд╢! рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдХрднреА рднреА рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ try! рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣рдореЗрдВ try! рдШрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@nrc рдпрд╣ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

@withoutboats try!(x) (x : Result<_, _>)? рдФрд░ рд╣рдо рд╢рд╛рдпрдж рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо _wanted_ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ x? рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ Carrier рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ рд╡рд┐рд╢реЗрд╖рддрд╛ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ), рдПрдХ рдЙрджрд╛рд╣рд░рдг iter.collect()? рдЬреЛ try! рдХреЗрд╡рд▓ Result рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ Option ред

рдпрд╣ рд╕рдордЭ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдордиреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрд╕рдЯреАрдбреА рдореЗрдВ рдЗрдореНрдкреНрд▓реЙрдЗрдЬ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЗрдВрдлрд╝рд┐рдЧрдореЗрдВрдЯ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ; рдпрд╣рд╛рдБ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try! рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

? рд╕рдВрджрд░реНрдн рдХреА рддрд░рд╣ рдПрдХ рдмрд┐рд▓реНрдбрд░ рдкреИрдЯрд░реНрди рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬрдмрдХрд┐ рдкреНрд░рдпрд╛рд╕ рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рдзрд┐ рдЬреИрд╕реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@ est31 рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЕрдиреБрдорд╛рди рдХреЗред рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд▓реЗрдХрд┐рди ? рдЖрдорддреМрд░ рдкрд░ рд╕рдЦреНрддреА рд╕реЗ рдХреНрд▓реАрдирд░ (рдлрд┐рд░ рд╕реЗ modulo рдЗрдВрдЬреЗрдХреНрд╢рди) рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

@eddyb foo()?.bar()?.baz() try!(try!(foo()).bar()).baz() , рдФрд░ try!(bar(try!(foo()))) bar(foo()?)?

рдореБрдЭреЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ ? рдЕрдзрд┐рдХ рдкрдардиреАрдп рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрд╖реНрдардХ рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЬрдореАрди рдХрдм рд╕реНрдерд┐рд░ рд╣реЛрдЧреА?

@ofek рдпрд╣ рдкреВрд░реА рдмрд╛рдд рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЕрднреА рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред https://github.com/rust-lang/rust/pull/36995 рдиреЗ рдореВрд▓ ? рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛, рдЬреЛ 1.14 рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛? рдЕрдм рдЗрд╕рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдСрдкрд░реЗрдЯрд░: https://doc.rust-lang.org/nightly/reference.html#unary -Terator- рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ

рдФрд░ @bluss рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдкреБрд╕реНрддрдХ рдкреБрд░рд╛рдиреА рднреА рд╣реИ: https://doc.rust-lang.org/nightly/book/syntax-index.html

@tomaka

рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдПред

рддреНрд░реБрдЯрд┐ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ get рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╡рд┐рдзрд┐ рдЕрдкрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдореИрдкрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ None рдХреЗрд╕ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

? рд╕рд┐рд░реНрдл рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛; рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХреЗрддрди рдПрдХ рдЧреИрд░-рд▓рдХреНрд╖реНрдп рдерд╛ред

29 рдЕрдХреНрдЯреВрдмрд░ 2016 рдХреЛ, 11:08 -0400, ticki рд╕реВрдЪрдирд╛рдПрдВ @github.com, рдиреЗ рд▓рд┐рдЦрд╛:

@tomaka (https://github.com/tomaka)

рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдПред

рддреНрд░реБрдЯрд┐ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХреЛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub (https://github.com/rust-lang/rust/issues/31436#issuecomment-257096575) рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ (https://github.com/nactions/unsubscribe -auth / AABsipGIpTF1-7enk-z_5JRYYtl46FLPks5q42DCgaJpZM4HUm_-)ред

рдпрд╣ (= ? рд╕реНрд╡рдпрдВ) рдЕрдм рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ! (рдЬрдВрдЧ рд╕реЗ 1.13)

рджреЛ рдкреНрд░рд▓реЗрдЦрди рдореБрджреНрджреЗ:

  • [x] рдкреБрд╕реНрддрдХ # рей theрелреж рдореЗрдВ рдЕрджреНрдпрддрди рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЕрдзреНрдпрд╛рдп
  • [x] рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ # рейред .релрез рдХреЗ рд▓рд┐рдП Carrier рдЯреНрд░реЗрдЯ рдбреЙрдХреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рди рддреЛ catch рдФрд░ рди рд╣реА Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрднреА рддрдХ рдареАрдХ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╕ ? рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

Carrier рдореМрдЬреВрдж рд╣реИ, рдФрд░ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЗрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд░рд┐рдпрд░ рдХрд╛ рдореБрджреНрджрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдбреЙрдХреНрд╕ рдХреЛ рднреА рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЙрдХреНрд╕ рдЗрд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред (рдЬреЛ рдЭреВрдард╛ рд╣реИ)ред

35946 рдХреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ Carrier рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдзреНрд╡рдирд┐ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╣рдореЗрдВ Carrier рдбреЙрдХреНрд╕ рд╕реЗ Option рдЙрд▓реНрд▓реЗрдЦ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ Carrier рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ T-libs рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ

рдкреНрд░рд╢реНрди рдЬреЛ @cramertj рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: https://internals.rust-lang.org/t/grammatical-ambiguity-raction-catch-blocks/4807

рдирдорд╕реНрддреЗ; # 31954 рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП upcast From (рдФрд░ рд╡рд░реНрддрдорд╛рди рд╣реЗрдб рдореЗрдВ рд╕рдорд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди RFC 243 рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Into рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп From рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ? рдЬрдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ (рдЕрд░реНрдерд╛рдд io::Error , рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЛ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рдореЗрдВ) рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рд╕реНрдерд╛рдиреАрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП From рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗред

(RFC 243 рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ FWIW рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ From рдпрд╛ Into рдмреЗрд╣рддрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╛ рдирд╣реАрдВ рдпрд╛ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИред рдЬреЛ рдХрд┐ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдХрд╣рдирд╛ рд╣реИред рдкреНрд░рд╢реНрди рдХреЛ рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ RFC рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред)

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реЛрдЧрд╛ред рдХреЛрдИ (рдЧреИрд░ рддреБрдЪреНрдЫ) рдпрджрд┐ From<...> рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдХрд▓рдХ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ рдпрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Into (рдХреЗ рд╕реЗрдЯ From рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрд░рд╛ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, Into рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╕реЗрдЯ рдПрдХ рдЯреЛрдХрд░рд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ)ред

Https://play.rust-lang.org/?gist=6d3ee9f93c8b40094a80d3481b12dd00 ("рд╕рд░рд▓реАрдХреГрдд" рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдореЗрдВ fmt::Error src / librustc / рдЙрдкрдпреЛрдЧ / ppaux.rs # L81 рд╢рд╛рдорд┐рд▓ рд╣реИ )

рдПрдХ рдирдпрд╛ RFC рд╣реИ рдЬреЛ ? рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗрдЧрд╛: рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs / рдкреБрд▓ / 1859

рдореИрдВ -1 catch рдмреНрд▓реЙрдХреНрд╕ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ, рдЬрдм рд╡реЗ рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИрдВред

рдХреНрд▓реЛрдЬрд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдмрдпрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВред ( break , continue , return )

рдЕрдм рдЬрдмрдХрд┐ https://github.com/rust-lang/rfcs/pull/1859 рдХрд╛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕рдХреЗ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдо catch рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред RFC 243 рдХрд╛

рдореИрдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХрдореБрд╢реНрдд рдирд┐рдХрд╛рд▓ рджреЗрдВ, рд▓реЗрдХрд┐рди catch рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣ рдХрднреА рднреА рдЙрддрдирд╛ рдорд╣рд╛рди рдирд╣реАрдВ рдерд╛ рдЬрд┐рддрдирд╛ рдХрд┐ ? рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ ? рд▓рд┐рдП рдЙрднрд░реЗ рд╣реБрдП рдореБрд╣рд╛рд╡рд░реЛрдВ рдФрд░ Try рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдЙрднрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ; рдкрд╣рд▓реЗ рдЖрдЬ рдореБрдЭреЗ рдХреБрдЫ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдВрдЯреНрд░реЛрд╡рд░реНрд╕реА рдореЗрдВ рдбрд╛рд▓рдирд╛ рдкрдбрд╝рд╛ рдерд╛ рдХрд┐ рдЕрдЧрд░ рдкрдХрдбрд╝ рд╕реНрдерд┐рд░ рд╣реЛрддреА рддреЛ рдЙрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд░рд╛рдд рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ do catch рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣реИ рдирд╛?

@withoutboats рд╣рд╛рдБ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ do catch , рдХреНрдпреЛрдВрдХрд┐ catch { ... } struct catch { }; catch { } ред
ред
@archshift @SimonSapin рдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛, break , continue , рдФрд░ return рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВред

@bstrie рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рдмрд╛рд░ рдЗрди рджрд┐рдиреЛрдВ catch рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдмрд╣реБрдд рдКрдкрд░ рдЖрддрд╛ рд╣реИред

рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рд╣рдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ do catch рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рдереЗред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рджреБрдирд┐рдпрд╛ рдХреЗ рдЯреВрдЯрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдмрд╣реБрдд рдХрдо рд╣реИ (рджреЛрдиреЛрдВ рдиреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдмрдпрд╛рди рдореЗрдВ рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдЧреА (рдЬреЛ рдХрд┐ рд╡рд╛рдкрд╕реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд╣рд░ рджреБрд░реНрд▓рдн рд╣реИ)), рдХреНрдпрд╛ рд╣рдо рд╢рд╛рдпрдж рд╕рд░рд╕рд░рд╛рд╣рдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ catch_ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЖрдХреНрд░рд╛рдордХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛? рдЕрдЧрд░ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрд╕реНрдЯ 2.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ, рдареАрдХ рд╣реИ, рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реЗ рдХрд╣рддрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЬрдВрдЧ 2.0 рдХреЛ рдХреЗрд╡рд▓ рддреБрдЪреНрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдкреА:

@bstrie рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ do catch рд▓реЙрдиреНрдЧ рдЯрд░реНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪрд░реНрдЪрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдпрд╣рд╛рдБ рд╣реИ: https://github.com/rust-lang/rust/pull/39921

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣рд╛рдБ рдЖрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЖрд╢рд╛ рдереА рдХрд┐ catch рд╕реНрдерд┐рд░ рдерд╛, рдФрд░ рд╕реАрдЦрдирд╛ рдерд╛ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓, рдЕрдм ? рд╕реНрдерд┐рд░ рд╣реИ, рдпрд╣ рднреА catch рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рдореИрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдХрд┐рддрдиреА рджреВрд░ рддрдХ рдЬрд╛рдПрдБрдЧреЗ рдФрд░ рдХреНрдпрд╛ рд╣рдордиреЗ рдХреИрдЪ рдХреА рдЪрд░реНрдЪрд╛ рдХреЛ рджреЗрдЦрд╛ред

рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛: рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ @ рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп sigil рдХреЗ рд╕рд╛рде рдХреАрд╡рд░реНрдб рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдлрд┐рд░ рд╕рднреА рдирдП рдХреАрд╡рд░реНрдб рдХреЗрд╡рд▓ sigil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдореЗрдВ рдХреЛрд░рдЯрд╛рдЙрди рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рд╡рд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдпрд╛ рдерд╛ - рдореЗрд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд░реА рд░рд╣ рд╕рдХрддрд╛ рд╣реИред

FWIW, C # рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдкрд░реАрдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд░реЗрдЬрд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк HTML рдиреЛрдб рдкрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП new { <strong i="6">@class</strong> = "errorbox" } рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

@scottmcm
рдпрд╣ рддреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдХреВрд▓рддрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдиреАрдЯ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред .Net рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрд╣реБрдд рд╕реА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ, рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреАрд╡рд░реНрдб рд╣реИрдВ рдФрд░ рд╕рднреА рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рдХреАрд╡рд░реНрдб рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛: рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдкреАрдЫреЗ рд░рдЦреЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдерд┐рд░ #[feature] ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@camlorn рдпрд╣ рд╕реВрддреНрд░ рдЖрдкрдХреЛ рд░реВрдЪрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд╛рд░реВрди рдХреЗ рд╡рд┐рдЪрд╛рд░ "рдПрдкреЛрдЪ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд╛рд░реВрди рдХрд╛ рд╡рд┐рдЪрд╛рд░: https://internals.rust-lang.org/t/pre-rfc-stable-features-for-breaking/changes/5002

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рд╕реЗ https://github.com/rust-lang/rust/issues/42327 рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред (рдпрд╣рд╛рдВ рднреА рд╢рд╛рдпрдж RFC рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдпрд╣рд╛рдВ рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред)

(рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкреЛрд╕реНрдЯ рдХреА рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рдЪреБрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ!)

@camlorn , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ "рдЬрдВрдЧ рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрдЪреНрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдХреАрд╡рд░реНрдб" рдкрде рдмрди рдЬрд╛рддрд╛ рд╣реИред рдПрдХреЗрдП рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рддреЗ рд╣реИрдВ "рдпрд╣ рдирд╣реАрдВ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдиреЛрдЯреЗрд╢рди рд╣реИ рдЬреЛ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдореЗрдВ рджреЛрдиреЛрдВ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛" рд╣реИрдЪред рдФрд░, рдЕрдиреБрдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП UFCS рдХреЗ рд╕рдорд╛рди, рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ "рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░" рдореЙрдбрд▓ рдкреБрд░рд╛рдиреЗ рдЧреЗрдЯреНрд╕ рдХреЛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА рдпрджрд┐ рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд┐рд░реНрдл do { тАж } рдпрд╛ ?{ тАж }

do рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдХреАрд╡рд░реНрдб рд╣реЛрдиреЗ рдХреА рдЕрдЪреНрдЫреА рд╕рдВрдкрддреНрддрд┐ рд╣реИред рдЗрд╕рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕реЗ do -рдиреЛрдЯ рд▓рдЧрд╛рдиреЗ рдХреА рд╕рдВрджрд┐рдЧреНрдз (рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдиреЗ рдЗрд╕рдХреЗ рдкрд┐рдЫрд▓реЗ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдХрднреА рдирд╣реАрдВ рд░реЛрдХрд╛, рдФрд░ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдХрд░реАрдм рд╣реИред

рдпрд╣ рднреА рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ javascripts рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирдВрдЧреЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╕рд┐рд░реНрдл рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдПрдХ рдЬреИрд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рдореЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕реА рдбреВ-рдиреЛрдЯреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕рдВрджрд┐рдЧреНрдз (рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рд╕рдВрдкрддреНрддрд┐ рд╣реИ

@rpjohnst рд░рд┐рдЬрд▓реНрдЯ рдФрд░ рдСрдкреНрд╢рди

рдареАрдХ рд╣реИ, рдЕрддреАрдд рдореЗрдВ рдЖрдкрддреНрддрд┐ рдпрд╣ рд░рд╣реА рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рд▓рд┐рдП do рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рджреБрдЦреА рдХрд░реЗрдЧрд╛ред

рдЙрд╕реА рд╕рдордп, рдЬрдмрдХрд┐ рд╣рдо рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреВрд░реНрдг-рд╕рдВрдХреЗрддрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ-рд╕рдВрдЧрдд рдХрд░ рд╕рдХрддреЗ рдереЗ, рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдкреВрд░реНрдг-рд╕рдВрдХреЗрддрди рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ if / while / for / loop рдпрд╛ break / continue рдЬреИрд╕реА рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред return , рдЬреЛ рд╣рдореЗрдВ catch (рдпрд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ do ) рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдФрд░ рдЙрд╕рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред (рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдЪреНрдЪ рдХреНрд░рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрд░реНрдг рдбреВ-рдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓реЛрдЬрд░ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ catch рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рднрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдЪрд╛рдирдХ рд╕рднреА рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред)

рддреЛ рдЕрдВрдд рдореЗрдВ рдХреЗ рдЗрд╕ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ do рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ do-рдЕрдВрдХрди рдХреЗ рдмрд┐рдирд╛ do-рдЕрдВрдХрди рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ do-рдЕрдВрдХрди рдпрд╛ рддреЛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдкрде рдХреЗ рдмрд┐рдирд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд░рд╕реНрдЯ рдХреЛ do рдиреЛрдЯреЗрд╢рди рд╡реИрд╕реЗ рднреА рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рднреНрд░рдо рд╣реИред

@nikomatsakis , # 42526 рдХреЛ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдХрд┐рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

рдХреНрдпрд╛ catch рдХреАрд╡рд░реНрдб рдХреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ struct catch рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджреЗрдВ рдФрд░ рдПрдХ рдЕрд╡рдореВрд▓реНрдпрди рдХреА рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░реЗрдВ?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдРрд╕реЗ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрднреА-рдХрднреА рдЖрдк рддреНрд░реБрдЯрд┐ рдореВрд▓реНрдп рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рдЖрдк return insofar рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдПрдХ рд░реВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ _inner_ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдВред рдЬреИрд╕реЗ рдЬрдм рдХреЛрдИ рдлрдВрдХреНрд╢рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ Option<Result<_,_>> рдЬреЛ рдХрд┐ itter рдХрд╣рдиреЗ рд╕реЗ рдХрд╛рдлреА рдЖрдо рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

macro-rules! option_try {
    ( $expr:expr ) => {
        match $expr {
            Ok(x)  => x,
            Err(e) => return Some(Err(e.into())),
        }
    }
}

рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ рдХрд┐ Iterator::next рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рднреАрддрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ Some(Err(e)) рд╕рд╛рде рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдореИрдХреНрд░реЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреИрдЪ return рдирд╣реАрдВ рд╣рдбрд╝рдкрддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл ? рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рд▓реЗрдмрд▓-рд░рд┐рдЯрд░реНрди рдкреВрд░реЗ catch рдмреНрд▓реЙрдХ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмреЗрдорд╛рдиреА рдмрдирд╛ рджреЗрдЧрд╛?

рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ # 41414 рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдУрдкреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЕрджреНрдпрддрди: RFC рдЬрдВрдЧ-рд▓рдВрдЧ / rfcs # 2388 рдЕрдм рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП catch { .. } рдХреЛ try { .. } рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдареАрдХ рдКрдкрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦреЗрдВред

рд╕рдВрд╕реНрдХрд░рдг 2015 рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЕрднреА рднреА do catch { .. } рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 2018+ рдореЗрдВ try { .. } рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛?

@ рдирд┐рдореНрдореЛ 157 рдЙрддреНрддрд░рд╛рд░реНрджреНрдзред

рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рджреЛ-рдХрдерди try ... catch ... рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдореБрдЭреЗ рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ рдорд┐рд▓рддрд╛ред

рд╡реИрд╕реЗ рднреА, рдЕрдЧрд░ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ рдЙрдмрд╛рдК рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рд╣реВрдВред рдпрд╛рдиреА рдХреНрдпрд╛ catch рдмреНрд▓реЙрдХ рдХреЗрд╡рд▓ ? рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ?

рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдЪреЗрдХ рдмреЙрдХреНрд╕ рд╢реАрд░реНрд╖ рдкрдж рдкрд░ рдЯрд┐рдХ рдЧрдП рд╣реИрдВ, рд╣рдо рдХрдм рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ? рдпрджрд┐ рдЕрднреА рднреА рдЕрдирд╕реБрд▓рдЭреЗ рдореБрджреНрджреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдирдП рдЪреЗрдХ рдмреЙрдХреНрд╕ (рддреЛрдВ) рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдВрднрд╡рдд: рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╢реЗрд╖ рдЕрдирд╕реБрд▓рдЭреЗ рдкреНрд░рд╢реНрди рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реИрдВрдЧ рдЯреАрдо рдХреЗ рднреАрддрд░ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, Try рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрдИ рдФрд░ рд▓рдХреНрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред

рд╣рдореНрдо ... рдпрд╣ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@ mark-im рддреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ; рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдирд╣реАрдВ; рдпрд╣ рд╡рд┐рднрд┐рдиреНрди RFC рдФрд░ рдореБрджреНрджреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ atm рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдмреИрдХрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди https://github.com/rust-lang/rust/issues/42327 рдореЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ try{} рдпрд╣рд╛рдВ рдмрдЪрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрд╕рд╣рдорддрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ RFC рдореЗрдВ рддрдп рдХреА рдЧрдИрдВ рдФрд░ рдЙрдкрд░реНрдпреБрдХреНрдд рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИред рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджрд╛ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред

рдореИрдВ рдПрдХ рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

@scottmcm рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ @joshtriplett (рдореЗрдВ рдиреЛрдЯ рдареАрдХ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдерд╛ try RFC) рдФрд░ рдореИрдВ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреА рддрд░рд╣ рдерд╛ break рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдореЗрдВ try { .. } рддреЛ рдХрд┐ рдЖрдк loop { try { break } } рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

@Centril

рддрд╛рдХрд┐ рдЖрдк loop { try { break } } рди рдХрд░ рд╕рдХреЗрдВ

рдЕрднреА, рдЖрдк рдиреЙрди-рд▓реВрдк рдмреНрд▓реЙрдХ рдореЗрдВ break рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рд╣реА рд╣реИ: break рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд▓реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ try рдмреНрд▓реЙрдХ рдХреЛ рдЬрд▓реНрджреА рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рддрд░реАрдХрд╛ Err(e)? рд▓рд┐рдЦрдирд╛ рд╣реИред рдФрд░ рдпрд╣ рдмрд▓ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдкрддреНрддреЗ рд╣рдореЗрд╢рд╛ "рдЕрд╕рд╛рдорд╛рдиреНрдп" рдирд┐рдпрдВрддреНрд░рдг рдкрде рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред

рддреЛ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ loop рдХреЛ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдХреЗрд╡рд▓ try рдЫреЛрдбрд╝рдХрд░ред

рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк break рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд▓реВрдк рд╕реЗ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ continue ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ loop рдЕрдВрджрд░ try рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмреНрд░реЗрдХ рдкреЙрдЗрдВрдЯ рдХреЛ рд▓реЗрдмрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдк рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@ рд╕рдВрддрд░реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

break , рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╕ рдпрд╣ рдХрд╣рдХрд░ рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ рдХрд┐ try break рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдпреБрдХреНрдд рд▓реВрдк рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рдореИрдВ break try рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

Ok -wrapping рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рдореИрдВ try рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

@centril рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдлрд┐рд░ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛ рд░рд╣рд╛ рд╣реИ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред RFC рдиреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ , рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рддрдм рдореВрд▓ рдЗрд░рд╛рджрд╛ _again_ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди RFC рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдмрдбрд╝рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рднреМрддрд┐рдХ рддрдереНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдЙрди рд╕рдмрд╕реЗ рдиреАрдЪ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрднреА RFC + IRLO рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рджреЗрдЦрд╛ рд╣реИред

@scottmcm рдмреЗрд╢рдХ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ Ok -wrapping рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ;) рдФрд░ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдмрд╛рдд рд╣реИ:

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдПрдХ рд╕реНрдерд┐рддрд┐ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреАрдпреВрдЖрдИ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рд╣реИ - рдПрдХ Option рдпрд╛ Result рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдлреНрд░реЗрдо рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП UpdateScreen рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╕реНрдХреНрд░реАрди рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдЕрдХреНрд╕рд░ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдпрд╣ рд╣рд░ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ) рдФрд░ рдмрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ UpdateScreen::DontRedraw рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд░реНрддрдорд╛рди ? рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рд╣рд░ рд╕рдордп рдпрд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

let thing = match fs::read(path) {
    Ok(o) => o,
    Err(_) => return UpdateScreen::DontRedraw,
};

рдЪреВрдБрдХрд┐ рдореИрдВ рдЯреНрд░рд╛рдИ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Result::Err рдХреЛ UpdateScreen::DontRedraw рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ, рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдердХрд╛рдК рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрдХреНрд╕рд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИрд╢ рдореИрдкреНрд╕ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рд▓реБрдХрдЕрдк рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ ) - рддреЛ рдЕрдХреНрд╕рд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ ? рдСрдкрд░реЗрдЯрд░ рдХреЗ 5 - 10 рдЙрдкрдпреЛрдЧ рд╣реЛрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдКрдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди impl From<Result<T>> for UpdateScreen рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реИ , рдФрд░ рдлрд┐рд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВ:

fn callback(data: &mut State) -> UpdateScreen {
     fn callback_inner(data: &mut State) -> Option<()> {
         let file_contents = fs::read_to_string(data.path).ok()?;
         data.loaded_file = Some(file_contents);
         Some(())
     }

    callback_inner(data).into()
}

рдЪреВрдВрдХрд┐ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ -> impl Into<UpdateScreen> рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, impl рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ)ред рддреЛ рдореЗрд░реЗ рд▓рд┐рдП Try рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЖрдВрддрд░рд┐рдХ-рдлрд╝рдВрдХреНрд╢рди рдЪрд╛рд▓ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдмрд╕ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

impl<T> Try<Result<T>> for UpdateScreen {
    fn try(original: Result<T>) -> Try<T, UpdateScreen> {
        match original {
             Ok(o) => Try::DontReturn(o),
             Err(_) => Try::Return(UpdateScreen::DontRedraw),
        }
    }
}

fn callback(data: &mut State) -> UpdateScreen {
     // On any Result::Err, convert to an UpdateScreeen::DontRedraw and return
     let file_contents = fs::read_to_string(data.path)?;
     data.loaded_file = Some(file_contents);
     UpdateScreen::Redraw
}

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдХрд╕реНрдЯрдо рдЯреНрд░рд╛рдИ рдСрдкрд░реЗрдЯрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдореИрдВрдиреЗ рднреВрд▓ рдХреАред


рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ


рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

fn test_try(a: u32, b: u32) {
    let div = if b != 0 {
        Some(a / b)
    } else {
        None
    };

    let x // : Option<_> // why is this type annotation necessary
    = try { div? + 1 };

    println!("{:?}", x);
}

рдпрджрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдСрдЯреЛ рд░реИрдкрд┐рдВрдЧ рдвреАрд▓реА рд╣реИ), рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ

fn test_closure(a: u32, b: u32) {
    let div = if b != 0 {
        Some(a / b)
    } else {
        None
    };

    let x =  (|| (div? + 1).into())();

    println!("{:?}", x);
}

рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓рдкреЗрдЯреЗрдВред

рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди

@KrishnaSannasi рдЖрдкрдХреЗ рдХреНрд▓реЛрдЬрд░ рдЖрдзрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди ) рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Into рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ Try try рдмреНрд▓реЙрдХ рдХреЗ рдмрдЬрд╛рдп Into рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ https://github.com/rust-lang/rust/issues/42327 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд╛ рдПрдХ _lot_ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ Nemo157

рд╣рд╛рдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЕрдВрддрд┐рдо рдорд┐рдирдЯ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЙрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЗрд░реА рдЧрд▓рддреАред

рд╣рдо рдХрд┐рддрдиреА рдмрд╛рд░ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рд╣реИрдВ? рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рд░рд╛рддреНрд░рд┐ рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: D

@Arignir

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рд╕реНрдерд╛рди рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП {} рдХреИрдЪ (рдпрд╛ рдЕрдиреНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдИрдбреА) рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ, рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдЪ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЕрдм рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдордзреНрдпрдо рдЬрдореАрди рдбрд┐рдЬрд╛рдЗрди рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдЕрднреА рднреА рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдХреА рдЬрдЧрд╣ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рдФрд░ рдЗрд╕рд▓рд┐рдП catch рдмреНрд▓реЙрдХ)?

рдореИрдВрдиреЗ рдЬреЛ PR рдмрдирд╛рдпрд╛ рд╣реИ, рдЙрд╕ рдмреЙрдХреНрд╕ рдХреЛ рд╡реИрд╕реЗ рднреА рдЪреЗрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, CC @nikomatsakis

рдореИрдВрдиреЗ рдХрд▓ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдпрд╣:

#![feature(try_blocks)]
fn main() -> Result<(), ()> {
    let x: () = try {
        Err(())?
    }?;
    Ok(x)
}

рдХреЗ рдХрд╛рд░рдг рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

error[E0284]: type annotations required: cannot resolve `<_ as std::ops::Try>::Ok == _`

рдмрд▓реНрдХрд┐, рдореБрдЭреЗ рдХрд░рдирд╛ рдерд╛

#![feature(try_blocks)]
fn main() -> Result<(), ()> {
    let x: Result<(), ()> = try {
        Err(())?
    };
    let x = x?;
    Ok(x)
}

рдмрдЬрд╛рдпред

рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рднреНрд░рд╛рдордХ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ --explain рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдХреЛ рдереЛрдбрд╝рд╛ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ

#![feature(try_blocks)]
fn main() -> Result<(), ()> {
    let x: () = try {
        Err(())?
    };
    Ok(x?)
}

рдЖрдкрдХреЛ рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рд╛рдордиреЗ рдЖрдИ рдХреНрдпреЛрдВрдХрд┐ рд░реБрд╕реНрдЯ рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рдХреЗ рдХрд╛рд░рдг try { ... } рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ <_ as Try>::Ok рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬреЛ рдЖрдкрдиреЗ рдХреА рдереАред (рдХреНрдпреЛрдВрдХрд┐ ? рдСрдкрд░реЗрдЯрд░ unwraps Try рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд╛рдкрд╕ рджреЗрддрд╛ рд╣реИ Try::Ok рдкреНрд░рдХрд╛рд░)ред рдЬрдВрдЧ Try::Ok рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЙрд╕ рдЧреБрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред (рдЬреЛ рдореМрдЬреВрджрд╛ рддрд░реАрдХреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реИ)

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рд╣реИ, рд╕рд╣реА рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рдо рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рдмреИрдареЗ рд╣реБрдП рдХрдм рддрдХ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдЪрд╛рд╣рддреЗ рдереЗ рдпрд╛ рдирд╣реАрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдпрд╣рд╛рдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдкрдХрдбрд╝реЗрдВ)ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд░реБрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдЕрдкрд╡рд╛рдж рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрдж catch рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдПрдХ рднрд╛рд╖рд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдпрд╣ рдорд╛рди рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рд╛рдордХ рдФрд░ рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧрд╛ред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдпрд╣рд╛рдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдкрдХрдбрд╝реЗрдВ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/rust-lang/rfcs/pull/2388 рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╕ рдЧрдпрд╛ рдХрд┐ рдХреНрдпрд╛ try рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде Ok -wrapping рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рдореВрд▓ рдЖрд░рдПрдлрд╕реА рдореЗрдВ Ok -wrapping рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рдХреИрд╕реЗ рд╣реИред

@rpjohnst рд╡реИрд╕реЗ рдпрд╣ рдЬреЛрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ рдЬреЛ рдореВрд▓ RFC рдХреЗ рдлреИрд╕рд▓реЗ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ ... :) рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕реБрд▓рдЭрд╛ рд╣реБрдЖ рдорд╛рдорд▓рд╛ Https://github.com/rust-lang/rust/issues/31436#issuecomment -427096703, https://github.com/rust-lang/rust/issues/31436#issuecomment -427252202, рдФрд░ https: // рджреЗрдЦреЗрдВ github.com/rust-lang/rust/issues/31436#issuecomment -437129491ред рд╡реИрд╕реЗ рднреА ... рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ try "рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рднрд╛рд╖рд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реБрд▓рдЭрд╛ рд╣реБрдЖ рдорд╛рдорд▓рд╛ рд╣реИред

рд╡рд╛рд╣, рдпрд╣ рдХрдм рд╣реБрдЖ? рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рд╡рд╣ рдереА рдЗрдВрдЯрд░реНрдирд▓ рдкрд░ рдЪрд░реНрдЪрд╛ред рдареАрдХ рд╣реИ, рд░реИрдкрд┐рдВрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ :(

Ewwред рдпрдХреАрди рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдРрд╕рд╛ рд╣реБрдЖред Ok -wrapping рдЗрддрдирд╛ рднрдпрд╛рдирдХ рд╣реИ (рдпрд╣ рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рд╡рд╛рдкрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП)ред рддреЛ рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ @ рдорд╛рд░реНрдХ-рдЗрдо рдХреЗ рд╕рд╛рдеред рдХреНрдпрд╛ рдЬреЛрд╢ рдХреА рдЕрд╕рд╣рдорддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдореБрджреНрджрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдореИрдВ рдЦрд╝реБрд╢реА-рдЦрд╝реБрд╢реА рдЙрд╕реЗ рдЗрд╕ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рд╕рд╣рдпреЛрдЧ рджреЗ рд░рд╣рд╛ рд╣реВрдБ, рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЧреИрд░-рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред

RFC 243 рдореЗрдВ рд╕реНрд╡реАрдХреГрдд Ok -wrapping (рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЬрд┐рд╕рдиреЗ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рдереЗ рдХрд┐ рдРрд╕рд╛ рдХрдм рд╣реБрдЖ рдерд╛) рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ RFC 243 рдиреЗ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛: https://github.com/rust-lang/rfcs/blob/master/text/0243-trait-based-exception-handling.md#catch -expressions

рдпрд╣ RFC catch {..} рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдлрд╝реЙрд░реНрдо рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ ? рдСрдкрд░реЗрдЯрд░ рдХреЛ "рд╕реНрдХреЛрдк" рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред catch рдСрдкрд░реЗрдЯрд░ рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо Ok(v) рдЬрд╣рд╛рдВ v рдмреНрд▓реЙрдХ рдХрд╛ рдореВрд▓реНрдп рд╣реИред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо Err(e) ред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ catch { foo()? } рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ foo() рдмрд░рд╛рдмрд░ рд╣реИред

рдпрд╣реА рд╣реИ, рдпрд╣ T рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рдЗрд╕реЗ Result<T, _> рдореВрд▓реНрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЛрдИ рднреА return рдмрдпрд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ; рдпрджрд┐ рдмреНрд▓реЙрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкреВрдВрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ Result<T, _> рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рд╛рдд рдХреЗ рд▓рд┐рдП рдЙрдореНрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=88379a1607d952d4ea4d1d06394b50959ред рдпрд╣ рд▓рдВрдЧ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛: рдЬрдВрдЧ-рд▓рдВрдЧ / рдЬрдВрдЧ # 41414 (рдФрд░ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рднреА рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ)ред

28 рдордИ, 2019 5:48:27 рдЕрдкрд░рд╛рд╣реНрди рдкреАрдбреАрдЯреА, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд░реЗрдЧреБрдПрд░реЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

Ewwред рдпрдХреАрди рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдРрд╕рд╛ рд╣реБрдЖред Ok -рд▓рд┐рдВрдЧ рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реИ (рдпрд╣)
рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдПрдХ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ
рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рддреЛ рд╣рд╛рдБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
рдЗрд╕ рдкрд░ @ рдЪрд┐рд╣реНрди-рдЗрдо рдХреЗ рд╕рд╛рдеред рдХреНрдпрд╛ рдЬреЛрд╢ рдХреА рдЕрд╕рд╣рдорддрд┐ рдЗрд╕ рдмрд╛рдд рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рдЦреБрд▓рд╛ рдореБрджреНрджрд╛, рдФрд░ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ? рдореИрдВ рдЦрд╝реБрд╢реА рд╕реЗ рдЙрд╕реЗ рд╕рдорд░реНрдерди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ
рдЗрд╕рд╕реЗ рд▓рдбрд╝рдиреЗ рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЧреИрд░-рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдБ рдореИрдВ рдЙрди рдХрдИ рд▓реЛрдЧреЛрдВ рдХрд╛ рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╡рд╣реА рд╕реНрдерд┐рддрд┐ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВред

@joshtriplett @ mark-im @alexreg

рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рдпрд╣ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрддрдиреЗ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Ok рд░реИрдкрд┐рдВрдЧ рдХреНрдпреЛрдВ рдвреВрдВрдврддреЗ рд╣реИрдВ рдпрд╛ рдХрд╣реАрдВ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд░рд╕рд░реА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ред рдЗрд╕рдореЗрдВ рдореЗрд░рд╛ рдХреЛрдИ рдШреЛрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдЯрд┐рдкреНрдкрдгреА рдХреА, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рд╕рднреА рдмрдХреНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдПрдХ рдорд╣реАрдиреЗ рддрдХ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА), рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╕реАрдВрдЧ рдХреЗ рдШреЛрдВрд╕рд▓реЗ рдХреЛ рд▓рд╛рдд рдорд╛рд░реА рд╣реИ рддреЛ рдореИрдВ рддрд░реНрдХреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

Tue рдкрд░, 28 рдордИ, 2019 рдХреЛ 03:40:47 PM -0700 рдкрд░, рд░рд╕реЗрд▓ рдЬреЙрдирд╕рди рдиреЗ рд▓рд┐рдЦрд╛:

рдореВрд▓ рдЖрд░рдПрдлрд╕реА рдореЗрдВ Ok -wrapping рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рдХреИрд╕реЗ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рд░ рдХреЛрдИ
рдореВрд▓ RFC рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рд╢рд╛рдорд┐рд▓ рдерд╛; try рдерд╛
рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рдереА
рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред

Tue рдкрд░, 28 рдордИ, 2019 рдХреЛ 03:44:46 рдЕрдкрд░рд╛рд╣реНрди -0700, Mazdak Farrokhzad рдиреЗ рд▓рд┐рдЦрд╛:

рд╡реИрд╕реЗ рднреА ... рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ try "рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рднрд╛рд╖рд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реБрд▓рдЭрд╛ рд╣реБрдЖ рдорд╛рдорд▓рд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ "рдЕрдкрд╡рд╛рджреЛрдВ" рдХреЗ рд░реВрдкрдХ рдХреА рдЕрдкреАрд▓ рдирд╣реАрдВ рдорд┐рд▓рддреА,
рдФрд░ рдХреЛрд╢рд┐рд╢-рдПрдлрдПрди рдФрд░ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рдХрдИ рдкреНрд░рдпрд╛рд╕ рд▓рдЧрддреЗ рд╣реИрдВ
рдЕрдкрд╡рд╛рдж рдЬреИрд╕реА рд╡реНрдпрд╡рд╕реНрдерд╛ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЛ рдирдХрд▓реА рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ред
рд▓реЗрдХрд┐рди try рдЦреБрдж, ? рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдкрд░
рдлрд╝рдВрдХреНрд╢рди рд╕реАрдорд╛, рдПрдХ рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

28 рдордИ, 2019 рдХреЛ 11:37:33 PM -0700 рдкрд░ рдЯреНрдпреБ, рдЧреЗрдмреНрд░рд┐рдпрд▓ рд╕реНрдорд┐рде рдиреЗ рд▓рд┐рдЦрд╛:

рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рдпрд╣ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрддрдиреЗ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Ok рд░реИрдкрд┐рдВрдЧ рдХреНрдпреЛрдВ рдкрд╛рддреЗ рд╣реИрдВ

рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ:

Tue рдкрд░, 28 рдордИ, 2019 рдХреЛ 05:48:27 PM -0700 рдкрд░, рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рд░реЗрдЧреБрдЗрд░реЛ рдиреЗ рд▓рд┐рдЦрд╛:

рдпрд╣ рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рд╡рд╛рдкрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдк-рдирд┐рд░реНрджреЗрд╢рд┐рдд рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдо рдЕрднреА рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж 500+ рдкреЛрд╕реНрдЯ рдХреА рдмрд╛рддрдЪреАрдд рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╛рд░реВрджреА рд╕реБрд░рдВрдЧреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдпрджрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓реИрдВрдЧ рдЯреАрдо рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИ, рддреЛ "рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреИрдЪ рдмреНрд▓реЙрдХреНрд╕" рд░реИрдк рд╡реИрд▓реНрдпреВ (# 41414) "рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдирдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХрд┐ рдпрд╣ рд▓реИрдВрдЧ рдЯреАрдо рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИ) рддрд╛рдХрд┐ рд▓реЛрдЧ рджреЗрдЦ рд░рд╣реЗ рд╣реЛрдВ рдЗрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрддрд╛ рд╣реИ?

рдХреНрд╖рдорд╛рдпрд╛рдЪрдирд╛, рдореИрдВ рдХреБрдЫ рднреА рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ- рдмрд╕ рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддрдп рдХрд┐рдП рдЧрдП рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрдм + рдХреИрд╕реЗ рд╣реБрдЖред

@rpjohnst рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@yodaldevoid рдЬреЛрд╢ рдиреЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред

рдореИрдВ рдПрдХ рдмреНрд▓реЙрдХ рддрдХ рд╕реАрдорд┐рдд рдУрдкреНрдк-рд░реИрдкрд┐рдВрдЧ рдХреЗ рд╡рд┐рдкрд░реАрдд рдереЛрдбрд╝рд╛ рдХрдо рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмреБрд░реА рдорд┐рд╕рд╛рд▓ рдХрд╛рдпрдо рдХрд░рддрд╛ рд╣реИ: рдЬреИрд╕рд╛ рдХрд┐ рдЬреЛрд╢ рдиреЗ рдХрд╣рд╛ рдерд╛ "рдореБрдЭреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд░реВрдкрдХ рдЖрдХрд░реНрд╖рдХ рдирд╣реАрдВ рд▓рдЧрддреЗ"

@joshtriplett рдиреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рднреА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ: рдореБрджреНрджреЗ "рдЕрдкрд╡рд╛рдж" рд░реВрдкрдХ (рдпрдХреАрдирди рдЖрддрдВрдХ + catch_unwind рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рдирдореНрд░) рдФрд░ рдЯрд╛рдЗрдк-рдЖрдзрд╛рд░рд┐рдд рддрд░реНрдХ рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╣реИрдВред рдореИрдВ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ try рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдХрдЯреНрдЯрд░рдкрдВрдереА рдмрд┐рдВрджреБ рдирд╣реАрдВред

рдареАрдХ рд╣реИ, рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ, рдЪрд▓реЛ рдпрд╣рд╛рдБ рдкреВрд░реА рдмрд╣рд╕ рдирд╣реАрдВ рд╣реИ ... рд╢рд╛рдпрдж рд╕рд┐рд░реНрдл рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреЙрдХреНрд╕ рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реЗрдВрдЧ-рдЯреАрдо рдбрд┐рдмреЗрдЯ (рдЕрдкрдиреЗ рд╕рдордп рдореЗрдВ) рдореЗрдВ рдбрд╛рд▓ рджреЗрдВ, рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдФрдЪрд┐рддреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП? рдЬрдм рддрдХ рд╕реНрдерд┐рд░реАрдХрд░рдг рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддрдм рддрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рд╣реИред

рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рд╕рд╣рдорддрд┐ рд╣реБрдИ рд╣реИ? рдореИрдВ рдХреБрдЫ try { foo()?; bar()?; }.with_context(|_| failure::err_msg("foon' n' barn'")?; рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдХрд┐ рджреВрд░ рд╕реЗ рднреА рд╕рдВрдХрд▓рди рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ: error[E0282]: type annotations needed ред

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=4e60d44a8f960cf03307a809e1a3b5f2

рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ (рдФрд░ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ 300 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдлрд┐рд░ GitHub рдкрд░ рднреА рдХрдард┐рди рд░рд╛рд╕реНрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ (рдпрджрд┐ рд╕рднреА рдирд╣реАрдВ) рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрд╣рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ Try::Ok рдкреНрд░рдпреБрдХреНрдд рд▓рдкреЗрдЯрдХрд░ Ok рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Option Try рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЯреАрдо рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдмрд╣рд╕ рд╣реЛрдирд╛ рд╣реИред

рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рд░рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╕реЛрдЪрддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ "рдЖрджрдореА, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ," рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ 30% рд╕рдордп рдРрд╕рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ Option s рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдЬреИрд╕реЗ рдореИрдВрдиреЗ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдореЛрдирд╛рдбреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП for рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ try рд╣реИ)ред

рдмрд╕ рдЖрдЬ, рдореИрдВ json рдЯреЛрдХрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдпрд╣ as_* рддрд░реАрдХреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдХрд▓реНрдк рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

рджреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛:

match s {
  "^=" => |a, b| try { a.as_str()?.starts_with(b.as_str()?) }.unwrap_or(false),
  "$=" => |a, b| try { Some(a.as_str()?.ends_with(b.as_str()?)) }.unwrap_or(false),
  // original
  "$=" => |a, b| {
    a.as_str()
      .and_then(|a| b.as_str().map(|b| (a, b)))
      .map(|(a, b)| a.starts_with(b))
      .unwrap_or(false)
    },
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐, рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ Option рдпрд╛ Result рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ moreso, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдХреЛрдб рд╕рдордЭ рдЬрд╛рддрд╛ рд╣реИ)ред рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ, рдЕрд░реНрде рд╕реНрдкрд╖реНрдЯ рд╣реИ: "рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпреЗ рджреЛ рдЪреАрдЬреЗрдВ рд╡реИрдз рд╣реИрдВ рдФрд░ рдЙрди рдкрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реИред" рдЕрдЧрд░ рдореБрдЭреЗ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдирд╛ рдерд╛, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ рдХреЗ рд╕рд╛рде рдЬрд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдмрдбрд╝реЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ try рд░реВрдк рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдВред

рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореИрдВ Ok рд░реИрдкрд┐рдВрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рддрдм рд╕реЗ, рдореИрдВрдиреЗ рдЙрд╕ рд╕рдордп рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ "рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдБ рдПрдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ "рдФрд░ рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛ рд╣реВрдВ рдХрд┐ Ok -wrapping рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ Ok рд░реИрдкрд┐рдВрдЧ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдХрдерди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ Try рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрдЧрд╛

try {
  fallible_fn()
}

try {
  fallible_fn()?
}

рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ Ok -wrapping рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ fallible_fn Try рд╡рд╛рдкрд╕реА рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдкрдХреНрд╖ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддрд╛ рд╣реИ, рдФрд░, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, @joshtriplettред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ / рд░реАрдбрд┐рдВрдЧ рдХреЙрдореНрдкреНрд░рд┐рд╣реЗрдВрд╢рди рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдпреЛрдЧреНрдпрддрд╛рдПрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдЖрд╕рд╛рди рдЕрдиреБрдорд╛рдиред

рдореИрдВ рдХреБрдЫ рдиреЗрд╕реНрдЯреЗрдб Option рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП try рдПрдХ рд╢реЙрдЯ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

#![feature(try_blocks)]

struct Config {
    log: Option<LogConfig>,
}

struct LogConfig {
    level: Option<String>,
}

fn example(config: &Config) {
    let x: &str = try { config.log?.level? }.unwrap_or("foo");
}

рдЗрд╕рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

error[E0282]: type annotations needed
  --> src/lib.rs:12:19
   |
12 |     let x: &str = try { config.log?.level? }.unwrap_or("foo");
   |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
   |
   = note: type must be known at this point

рдореИрдВ рдЬреЛ рд╕рдмрд╕реЗ рдкрд╛рд╕ рдерд╛

fn example(config: &Config) {
    let x: Option<&str> = try { &**config.log.as_ref()?.level.as_ref()? };
    let x = x.unwrap_or("foo");
}

as_ref рдХрд╛рдлреА рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ Option::deref рдХреБрдЫ рдпрд╣рд╛рдБ рдорджрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдореИрдЪ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ (рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдЪрд╛рд░) рдХреЛ рдЦреЗрд▓ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рднреА рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИрдВред

рдХреНрдпрд╛ try рдкреВрд░реНрдгрд╛рдВрдХ рд╢рд╛рдмреНрджрд┐рдХ рдХреА рддрд░рд╣ Result рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдЧреНрд░рд╣рдг рджреЛрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдХрд┐ @shepmaster рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ Result<&str, NoneError> ? рд╢реЗрд╖ рдмрдЪреЗ рдореБрджреНрджреЗ рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ- рд╢рд╛рдпрдж ? s рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП? (рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕рдХреА рдЪрд░реНрдЪрд╛ рдХрд╣реАрдВ рдорд┐рд╕ рдХрд░ рджреА рд╣реИ?)

@shepmaster рдореИрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдордЬреЗрджрд╛рд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдЯреАрдХ рдХреЛрдб рдХреЛ рдХреБрдЫ рднреЛрд▓реЗ try_ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЬрд╝рдорд╛рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/norcalli/koption_macros/blob/4362f88fa9b6c62fdaef4df30060438111141e7/src/lib#lib##

    let x = try_! { config.log?.level? }.unwrap_or("foo".to_owned());
    assert_eq!(x, "debug");

рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреБрдЫ рд╣рдж рддрдХ try_ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдореИрдХреНрд░реЛ рдЗрдирд╡реЛрдХреЗрд╢рди рдкрд░ String рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИ, рди рдХрд┐ &str , рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдЖрд╕рдкрд╛рд╕ рдХрд╛ рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Config рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИ:

fn example(config: &Config) {
    let x = try_! { config.log?.level? }.unwrap_or_else(|| String::from("foo"));
}
error[E0507]: cannot move out of captured variable in an `Fn` closure
  --> src/lib.rs:20:21
   |
19 | fn example(config: &Config) {
   |            ------ captured outer variable
20 |     let x = try_! { config.log?.level? }.unwrap_or_else(|| String::from("foo"));
   |                     ^^^^^^^^^^ cannot move out of captured variable in an `Fn` closure

рдпрд╣ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЗ рднреА String рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдореИрдВрдиреЗ рдЙрд╕ рдЕрдХреНрд╖рдорддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ unwrap_or_else рдХрд┐рдпрд╛ред

рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ async/await рдмреНрд▓реЙрдХ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХреА рдЧрдИ рдереАред IMO рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛрддрд╛

let fut = async try {
    fut1().await?;
    fut2().await?;
    Ok(())
};

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ try рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдЬ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рд░рд╡рд╛рдирд╛ рд╣реБрдЖ рд╣реИред

рдкреБрди: рдСрдЯреЛ-рд░реИрдкрд┐рдВрдЧ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдм async рдмреНрд▓реЙрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред async рдмреНрд▓реЙрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдСрдЯреЛ-рд░реИрдкрд┐рдВрдЧ" рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЧреБрдордирд╛рдо рдкреНрд░рдХрд╛рд░ рдореЗрдВ Future ред рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рднреА рдпрд╣ рд╕рд╣реА рд╣реИ, рдЬреЛ try рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрдЧрд░ рд╣рдо рдХрднреА рдХрд╛рд▓реНрдкрдирд┐рдХ async try рдмреНрд▓реЙрдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджреЛрдЧреБрдирд╛ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рдСрдЯреЛ-рд░рд┐рдЬрд▓реНрдЯ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдордиреЗ рдСрдЯреЛ-рд░реИрдкрд┐рдВрдЧ рдЕрд░реНрдереЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░рддрд╛ рдкрд░ рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдЦреЛ рджреА рд╣реИред рджреЛрдиреЛрдВ async рдмреНрд▓реЙрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ ? рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореИрдиреБрдЕрд▓ Ok -wrapping, рджреЛрдиреЛрдВ рд╢реБрд░реБрдЖрддреА рдФрд░ рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ try рдмреНрд▓реЙрдХ, рджреВрд╕рд░реЗ рд╣рд╛рде рдкрд░, рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ? рд╕реНрд╡рдд: рдХреЗ рд╕рд╛рде Ok , -wrapping "рдЬрд▓реНрджреА рд░рд┐рдЯрд░реНрди" рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд╛рдкрд╕реА рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛- рд╢рд╛рдпрдж рд▓реЗрдмрд▓ BREAK- рдорд╛рди ред рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдХреЛрд╢рд┐рд╢ рд╕рдорд╛рд░реЛрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЛрдиреЛрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рдкрд░ рд╕реНрд╡рдд: Ok -wrapping рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ async try рдмреНрд▓реЙрдХ рдХреЗрд╡рд▓ рджреЛ рдСрдЯреЛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ- Ok -wrap, рдФрд░ рдлрд┐рд░ рдСрдЯреЛ- Future -wrapред (рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдпрдХреАрдирди try async рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред)

рдЬреЛ рдЕрд╕рдВрдЧрддрддрд╛ рдореБрдЭреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ async рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦрдВрдбреЛрдВ рдХреЛ рдЬрдмреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред (рдпрд╣ RFC рдХреЗ рдЕрдВрддрд┐рдо рд╕рдордп рдореЗрдВ рд╣реБрдЖ, рдХреЛрдИ рдХрдо рдирд╣реАрдВ рд╣реИред) рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ return async рдмреНрд▓реЙрдХреНрд╕ рдмреНрд▓реЙрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ return try рдмреНрд▓реЙрдХ рдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рдХрдо рд╕реЗ рдХрдо рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдЕрд░реНрде рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ async рдмрд┐рдирд╛ рдЬрд▓реНрджреА-рд╡рд╛рдкрд╕реА рдпрд╛ рд▓реЗрдмрд▓-рдмреНрд░реЗрдХ-рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ред

рдХреБрдЫ рднреА рдЗрд╕ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдирд╛, рдпрд╛ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ PR рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдЕрдиреНрдпрдерд╛ necessary

18 рдирд╡рдВрдмрд░, 2019 2:03:36 AM PST, Kampfkarren рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЗрд╕ рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдЪреАрдЬ, рдпрд╛ рд╕рд┐рд░реНрдл рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рд▓реА рд╣реИ
рдЕрднреА рддрдХ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп? рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ
рдЕрдиреНрдпрдерд╛ ЁЯЩВ>
>
->
рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред>
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub:> рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/31436#issuecomment -554944079

рд╣рд╛рдВ, рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрдгрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╡рд░реЛрдзрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рддрдм рддрдХ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХрдордд рди рд╣реЛрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ?

рдореИрдВ Result<Result<T,E>> рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреИрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╕реНрдкрд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рдкреЗрдЯ рдХреЗ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдареАрдХ-рдареАрдХ рдирд╛рдкрд╕рдВрдж рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрд╛рд░ рдЖрддрд╛ рд╣реИ ...

рдЗрд╕рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Ok рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди Ok -wrapping рд╣реИред try { ...; x } рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ Ok(x) рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ Ok({ ...; x }) ред

@joshtriplett рдХреНрдпрд╛ рдпрд╣ рдЕрдирд╕реБрд▓рдЭрд╛ рд╣реИ? Https://github.com/rust-lang/rust/issues/41414 рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдЗрд╢реНрдпреВ рдореЗрдВ resolve whether catch blocks should "wrap" result value рдЪреЗрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВред

@rpjohnst рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ try рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣реА рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ try рдмреНрд▓реЙрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ catch рдпрд╛ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрди рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ try рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

@Kampfkarren рд╣рд╛рдБред рдЙрдкрд░реЛрдХреНрдд рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреА рдкреНрд░рдЧрддрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдпрд╣ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░ рдХрд┐рд╕реА рд╕реЗ рд╕рд▓рд╛рд╣ рдХреЗ рдмрд┐рдирд╛ рдмрдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред @joshtriplett рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЪрд┐рдВрддрд╛рдПрдВ рдереАрдВ, рдЬреЛ рдХрдИ рдЕрдиреНрдп (рд╕реНрд╡рдпрдВ рд╕рд╣рд┐рдд) рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рдереЗред

@ mark-im рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ? рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдпрд╣ рдХрд╣рдХрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ ...

рд╣рдо рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ try рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

let x: Result<usize, E> = try { 3 }; // Error: expected Result, found usize
let x: Result<usize, E> = try { Ok(3) }; // Ok (no pun intended)

рдмрд╛рдж рдореЗрдВ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рд╕реЗ рдЖрдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдо рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ:

let x: Result<usize, E> = try { 3 }; // Ok
let x: Result<usize, E> = try { Ok(3) }; // Also Ok for backwards compat
let x: Result<Result<usize, E1>, E2> = try { Ok(3) }; // Ok(Ok(3))
let x: Result<Result<usize, E1>, E2> = try { Ok(Ok(3)) }; // Ok(Ok(3))

рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

let x = try { Err(3) }; // If x: Result<Result<T1, usize>, usize>, then it is not clear if user meant Ok(Err(3)) or Err(3)...

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд╛рдпрдж рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЬреВрдЭрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ?

рд╡реИрд╕реЗ рднреА, рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕реЗ рдЕрдЬреАрдм рдорд╛рдорд▓реЗ рдЕрдХреНрд╕рд░ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрддрдирд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред

рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЫреЛрдбрд╝рдХрд░ рд▓реМрдЯреЗ рдкреНрд░рдХрд╛рд░ Result рдпрд╛ Option ? рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рд╕рдЯреАрдХ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

// Ok-wrapped
let v: Result<i32, _> = try { 1 };

// not Ok-wrapped since the returned type is Result
let v: Result<i32, _> = try { Ok(1) };

// not Ok-wrapped since the returned type is Result
let v: Result<i32, _> = try { Err("error") };

// Ok-wrapped
let v: Option<i32> = try { 1 };

// not Ok-wrapped since the returned type is Option
let v: Option<i32> = try { Some(1) };

// not Ok-wrapped since the returned type is Option
let v: Option<i32> = try { None };

Ok -рдХреЛрд░реНрд╕рд┐рдпрди рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ Ok -рдкреНрд░рдкреЛрдЬрд┐рдВрдЧ (рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛) рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реЛрдЧрд╛, рдФрд░ рдореЛрдЯреЗ рддреМрд░ рдкрд░ i.rl.o рдкрд░ рдХрдИ рдмрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдЧ рд╕реАрдзреЗ Ok -wrapping рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЛ рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ Ok рдкрдХреНрд╖ рдореЗрдВ рдЬреЛрд░рджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рдЬреЛрд░-рдЬрдмрд░рджрд╕реНрддреА рдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реЛрдЧрд╛ рдЬреЛ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдкреЗрдЯреЗрдВрдЧреЗ (рдореБрдЭреЗ рдмреЗрдХрд╛рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛) Ok(...) рд╣рд░ рдЬрдЧрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдпрд╛ рди рд╣реЛрдиреЗ рдкрд░)ред

let x = try { Err(3) }; // If x: Result<Result<T1, usize>, usize>, then it is not clear if user meant Ok(Err(3)) or Err(3)...

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд╛рдпрдж рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЬреВрдЭрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ?

рдирд╣реАрдВрдВ, рдЬреЛ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ Ok(Err(3)) , Ok -wrapping рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдмреНрд▓реЙрдХ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ Try::Ok рдЬреЛ рднреА рд▓рдкреЗрдЯрддрд╛ рд╣реИред

@ mark-im рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдмрд╛рдж рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЛ рдмреБрд░рд╛ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЕрд╕рдВрдЧрдд рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдЬреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред

рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдореИрдХреНрд░реЛ рдХреА рддрд░рд╣ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдФрд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рд╡реЗрд░рд┐рдПрдВрдЯ рдереЗ, рдФрд░ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдирд┐рдХрд▓рд╛, рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдореИрдХреНрд░реЛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрди рд╡реИрдХрд▓реНрдкрд┐рдХ рдореВрд▓реНрдп рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЯрди рд╣реИрдВ:

let c = try { 2 * a? + b? };

рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрд╣реБрдд рдХрдо рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореИрдХреНрд░реЛ рдкрд░ рд░рд╣рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреАред

рдЗрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдХреЗ рдЖрджрд░рдгреАрдп рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, ? рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдореВрд▓ рдФрд░ рдЕрдлрд╕реЛрд╕рдЬрдирдХ рдЕрдиреБрдорд╛рди, рдФрд░ Ok -wrapping рдореБрджреНрджреЗ рдкрд░ рд░реЛрдХ, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХрдореБрд╢реНрдд рдмрдВрдж рдХрд░рдиреЗ рдФрд░ try рднреЗрдЬрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ

рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдмрд╣реБрдд рдХрдо рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╣реЛрдЧрд╛

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╕рд╛рдорд╛рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдРрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

let c = try { Ok(2 * a? + b?) };

рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ рдУрд╡рд░рдХрд┐рд▓ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдХреЛрдб try рдмреНрд▓реЙрдХ рдЗрд╕ Ok(...) рд░реИрдкрд░ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдХрдо рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИред

@CreepySkeleton рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЖрдЧреЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдореИрдХреНрд░реЛ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬреЛ Ok рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ try рдмреНрд▓реЙрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ (рдФрд░ рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдПрдЧрд╛) рдЗрд╕ рдЫреЛрдЯреЗ рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЯреЛрдХрд░рд╛), рд▓реЗрдХрд┐рди рдХрд╛рдлрд┐рд▓рд╛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдореИрдХреНрд░реЛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрд╕реНрдерд┐рд░ рд╣реИред

рдХреНрдпреЛрдВ? рд╡реИрд╕реЗ рднреА, рдЬрдм рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ), рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

@ рдирд┐рдореЛ 157 try рдмреНрд▓реЙрдХ рднреА рдЕрднреА рдХреЗрд╡рд▓ рд░рд╛рдд рдореЗрдВ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдо Try рдЪреАрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ Try рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдореИрдХреНрд░реЛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

@ рдХреГрд╖реНрдгрд╕рдирд╛рд╕реА рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ Try рдХреНрдпреЛрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@ mark-im рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣реА рд╕рдордЭрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ Try рд░рд╛рдд рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдПрдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ Try рд╕реНрдерд┐рд░ рдкрд░ рдЖрдЧреЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ ? рдХреЛ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ try рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ Result рдФрд░ Option рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕реЗ ? рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ Try рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕ рдкрд░ рдмрд╛рд░реАрдХреА рд╕реЗ рдирдЬрд╝рд░ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЫрд╛рдкреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдмрд╣реБрдд рдХрдо рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рдереА рдереЗ Try рдХреЗ рд▓рд┐рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ try рдмреНрд▓реЙрдХ, рддреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ try Try рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖ рд╕реНрдерд┐рд░ (рдЬреИрд╕рд╛ рдХрд┐ ? )ред рдФрд░ рдЕрдЧрд░ Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдЪрд╛рд╣рд┐рдП рджреЗрдЦреЗрдВ try рдмреНрд▓реЙрдХ рдмрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ Result рдФрд░ Option рдХреА рддрд░рд╣ ? рддреЛ рд╣реЛрдЧрд╛ред

(_Why_ рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рдХрд┐ рд╕реНрдереВрд▓ рджрд┐рдП рдЧрдП try рдмреНрд▓реЙрдХ рдФрд░ рдПрдХ рдЕрд╕реНрдерд┐рд░ Try рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ try { Try::from_ok($expr) } ; рдЖрдк рдкреНрд░рддрд┐-рдкреНрд░рдХрд╛рд░ рдореИрдХреНрд░реЛрдЬрд╝ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ; рд╕рд┐рд░реНрдл Result рдФрд░ Option , рд▓реЗрдХрд┐рди IMO рдЬреЛ "рдмрд╣реБрдд рдЖрд╕рд╛рди [...] рдЕрдиреБрдХрд░рдг" рдмрд┐рдВрджреБ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП ? рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рд╕реНрдерд┐рд░ рд╣реИ, рднрд▓реЗ рд╣реА Try рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдерд┐рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдлрд┐рд░ рднреА рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ Try рдЕрд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдмреНрд▓реЙрдХ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╕реНрдерд┐рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЯреНрд░реЗрдЯ рдХрд╛ рдирд┐рд╢рд╛рди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╡рд┐рдХрд▓реНрдк рдФрд░ рдкрд░рд┐рдгрд╛рдо ? рд╕реНрдерд┐рд░ рдкрд░ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ред

рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд░реНрде ...

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

union SomeFunctionMultipleError {
    err0: Error1,
    err1: Error2,
}

struct SomeFunctionFnError {
    index: u32,
    errors: SomeFunctionMultipleError,
}

fn some_function() -> Result<i32, SomeFunctionFnError> {
    if 0 == 0 {
        Ok(2)
    } else {
        Err(SomeFunctionFnError{ index: 0, errors: SomeFunctionMultipleError {err1: Error2 {id0: 0, id1: 0, id3: 0}}})
    }
}

union OtherFunctionMultipleError {
    err0: Error1,
    err1: Error2,
    err2: Error3,
}

struct OtherFunctionFnError {
    id: u32,
    errors: OtherFunctionMultipleError,
}

fn other_function() -> Result<i32, OtherFunctionFnError> {
    if 0 == 0 {
        Ok(2)
    } else {
        Err(OtherFunctionFnError {id: 0, errors: OtherFunctionMultipleError {err0: Error1 {id0: 0, id1: 0}}})
    }
}

рдпрд╣ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЬрдВрдЧ рдореЗрдВ рд╢реВрдиреНрдп-рдУрд╡рд░рд╣реЗрдб рдЕрдкрд╡рд╛рджреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

fn some_function() -> i32 throws Error1, Error2 {
    if 0 == 0 {
        2
    } else {
        Error2 {id0: 0, id1: 0, id3: 0}.throw
    }
}

fn other_function() -> i32 throws Error1, Error2, Error3 {
    if 0 == 0 {
        2
    } else {
        Error1{id0: 0, id1: 0}.throw
    }
}

рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

fn some_function(i: i32) -> i32 throws { // Implicitly throws Error1, Error2
    if i == 0 {
        2
    } else if i == 1 {
        Error1 {id0: 0, id1: 0, id3: 0}.throw
    } else {
        Error2 {id0: 0, id1: 0, id3: 0}.throw
    }
}

fn other_function(i: i32) -> i32 throws { // Implicitly throws Error1
    if i == 0 {
        2
    } else {
        Error1{id0: 0, id1: 0}.throw
    }
}

рдпрд╣ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреАрдиреА !! рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣реА рд╣реИ !!

рдирдорд╕реНрддреЗ,

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЬреАрд░реЛ-рдУрд╡рд░рд╣реЗрдб рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдКрдкрд░ рд╣реИ?

@redradist try рдмреНрд▓реЙрдХ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ

рдмрд╕ рдЖрдЬ рдореБрдЭреЗ try рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╣рд╕реВрд╕ рд╣реБрдИред рдореЗрд░рд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ ? рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВред рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ ? рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреА рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреАред try рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЗрд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред

Btwред рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдард┐рди рд╣реЛрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдЬреАрд╡рдирдХрд╛рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рди рдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдПрдирдПрд▓рдПрд▓ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ try рдмреНрд▓реЙрдХ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред рд╕реЛрдЪреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рд░реАрдХреНрд╖рдг рд╣реИред

рдореИрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред рд╕реЛрдЪреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдирд┐рд░реАрдХреНрд╖рдг рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣рд╛рдБ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдБ: ( рдЬрдВрдЧ рдХрд╛ рдореИрджрд╛рди )

#![feature(try_blocks)]

fn main() {
    let s: Result<(), ()> = try { () };
}

рдЬрд╝рд░реВрд░, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ ред

рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдЕрднреА рддрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ if let рдмреНрд▓реЙрдХреНрд╕ рдореЗрдВ рдЯрд╛рдЗрдк рдПрд╢реЗрдЬрд╝ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ Nokel81 рдЖрдкрдХреЗ рдкреВрд░реНрд╡ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ if let $pat = $expr рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ "рдХреЛрдИ рдХреЛрд╖реНрдардХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐" рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП , рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред рддреЛ рддреНрд░реБрдЯрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ try рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЧрд▓рдд рд╣реИ, рдФрд░ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП " try рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдпрд╣рд╛рдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рдЖрд╕рдкрд╛рд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ" (рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрд╖реНрдардХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рдд рдЪреЗрддрд╛рд╡рдиреА рджрдмреА рд╣реБрдИ)ред

рдЖрдкрдХрд╛ рдмрд╛рдж рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред e рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ _: From<usize> рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛ рд╕рдХреЗред рдпрд╣ try рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм, рдпрджрд┐ рдЖрдк рддреБрд░рдВрдд Ok рд░реВрдк рдореЗрдВ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Err рдХреЗрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ ред

рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╣ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рдХреНрдпреЛрдВ рд╣реВрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ Result<isize, usize> рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?

? рдСрдкрд░реЗрдЯрд░ From рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрдВрдЧ рдХреЛрдб рддрдХ рдлреИрд▓рддрд╛ рд╣реИ ( Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ):

match expr {
    Ok(v) => v,
    Err(e) => return From::from(e),
}

From рдХреЙрд▓, рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд▓реМрдЯреЗ рд╣реБрдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдорд╛рдлреА рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐:

#![feature(try_blocks)]

fn main() -> Result<(), ()> {
    let result = try { // no type annotation
        Err(())?;
    };
    result.map_err(|err| err)
}

рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:

error[E0282]: type annotations needed

рдкрд░рдВрддреБ:

#![feature(try_blocks)]

fn main() -> Result<(), ()> {
    let result : Result<_, _> = try { // partial type annotation
        Err(())?;
    };
    result.map_err(|err| err)
}

рдареАрдХ рд╣реИред

рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ Result рдХреА рджрд▓реАрд▓реЗрдВ рдХрдо рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рдереАрдВ, рддреЛ рдореИрдВ рд╕рдордЭ рдкрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЬрдВрдЧ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдПрдХ try рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Result рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ core::ops::Try::into_result рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рдЪрд╛рд░?

@nwsharp рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ try / ? Try рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдерд╛ рдЬреЛ impl Try<Ok=_, Error=()> , рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдмреНрд▓реЙрдХ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реА Result рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗред рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╣реИ

#![feature(try_trait, label_break_value)]

use std::ops::Try;

fn main() -> Result<(), ()> {
    let result /*: Result<_, _>*/ = 'block: {
        match Try::into_result(Err(())) {
            Ok(ok) => Try::from_ok(ok),
            Err(err) => {
                break 'block Try::from_error(From::from(err));
            }
        }
    };
    result.map_err(|err| err)
}

@ CAD97 рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ try рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ Try рдмреАрдЪ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ Try into_result , from_ok , рдФрд░ from_error рд▓рд┐рдП рдПрдХ de-surgaring рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдиреБрдХрд╕рд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд╖реНрдХрд╛рд╕рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ impl Try рднреА рдореМрдЬреВрдж рд╣реИ), рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд╛рдн рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рд╣рдо рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐:

try { ... }.into()

рд╕рдВрдмрдВрдзрд┐рдд рдХрдВрдмрд▓ рдХреЗ рд╕рд╛рде:

impl<T: Try, E: Into<T::Err>> From<Result<T::Ok, E>> for T {
    fn from(result: Result<T::Ok, E>) -> Self {
        match result {
            Ok(ok) => T::from_ok(ok),
            Err(err) => T::from_err(err.into()),
        }
    }
}

(рдЬреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдБ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрд╡рдд: рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рд╕рдВрджреЗрд╣ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдпрд╣ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ .map_err() Result ред)

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреА-рд╢реБрдЧрд░рд┐рдВрдЧ "рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рд╣реИ"ред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЫреБрдкрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрд╛рд░реНрде рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рд╣реИрдВред (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ!)

рдпрд╛, рдХрдВрдмрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдЖрдЧреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

impl <T: Try, U: Try> From<U> for T 
    where U::Ok : Into<T::Ok>, U::Err : Into<T::Err>
{
    fn from(other: U) -> Self {
        match other.into_result() {
            Ok(ok) => Self::from_ok(ok.into()),
            Err(err) => Self::from_err(err.into()),
        }
    }
}

рдЬреЛ рдХреБрдЫ рднреА...

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдХреЛрд╢рд┐рд╢ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рднрд┐рдиреНрди Try рдмреАрдЪ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ Try into_result , from_ok , рдФрд░ from_error рд▓рд┐рдП рдЪрдпрдирд┐рдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдиреБрдХрд╕рд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд╖реНрдХрд╛рд╕рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ impl Try рднреА рдореМрдЬреВрдж рд╣реИ), рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд╛рдн рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рдЪрд╛рд░ рд╕реНрдерд┐рд░ Try рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: Option<T> , Result<T, E> , Poll<Result<T, E>> , рдФрд░ Poll<Option<Result<T, E>> ред

NoneError рдЕрд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП Option<T> Option<T> рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ NoneError рдЕрд╕реНрдерд┐рд░ рд╣реИред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдбреЙрдХреНрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ From<NoneError> рдХреЛ "рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП option? рд╕рдХреНрд╖рдо рдХрд░реЗрдВ") рдХрд╣рддреЗ рд╣реИрдВред

Poll рдирд┐рд╣рд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрдирдХреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ E ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, Try рдХрд╛ "рдЯрд╛рдЗрдк рдореЙрд░реНрдлрд┐рдВрдЧ" рд╕реНрдерд┐рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк ? Poll<Result<T, E>> -> Result<_, E> Poll<T> рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред E рдХреЗрд╕ рд╡рд╛рдкрд╕ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╢рдХреНрддрд┐ рдПрдХ "рдкреНрдпрд╛рд░рд╛" рдЫреЛрдЯреЗ рд╕рд╣рд╛рдпрдХ :

fn lift_err<T, E>(x: Poll<Result<T, E>>) -> Result<Poll<T>, E> { Ok(x?) }

@ CAD97 рдореБрдЭреЗ

рдХреНрдпрд╛ рдпрд╣рд╛рдВ рдкрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЖрддреНрдорд╕рд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд impl Try рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рдХреЗрд╢рд┐рдВрдЧ, try<T> { ... } ред рдпрд╛ рд╡рд╣рд╛рдБ рдЕрднреА рднреА рдлрд┐рд░ рд╕реЗ рдЙрд╕ рдХреЗ рд╕рд╛рде рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ?

рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рдФрд░ рд░рдВрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рддрдереНрдп рдХрд┐ try { } рдПрдХ рдЧреБрдЪреНрдЫрд╛ Result " Result рдЙрддреНрдкрд╛рджрди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдФрд░ рдореБрдЭреЗ рджреБрдЦреА рдХрд░рддрд╛ рд╣реИ ред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХреНрдпреЛрдВ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдВ, "рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдЦрд╛рд╡рдЯ" рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ (рдЖрдкрдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХрд╛рд▓ рд╣реИ) рдФрд░ try ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╕реБрдирд╛, try: Result<_, _> { .. } рдЕрдВрддрддрдГ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред

рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ: try рдмреНрд▓реЙрдХ рдХреБрдЫ рд▓рдХреНрд╖рд┐рдд рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред

рдХреГрдкрдпрд╛ Ok -wrapping рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рднрд╛рд╖рд╛ рдЯреАрдо рдХреА рд╕рд╣рдорддрд┐ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХреАрд░реНрдг рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦреЗрдВред

рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреГрдкрдпрд╛ рдЙрд╕ рдзрд╛рдЧреЗ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝реЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд╣ рдзрд╛рдЧрд╛ рдХреЗрд╡рд▓ рдЙрд╕ рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рди рдХрд┐ try рдпрд╛ ? рдпрд╛ Try рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рдЕрдиреНрдп рдореБрджреНрджрд╛ред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ try рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдпрд╣ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛

fn main() -> Result<(), ()> {
    try {
        if foo() {
            Err(())?
        }
        ()
    }
}

рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

fn main() -> Result<(), ()> {
    Ok({
        if foo() {
            Err(())?
        }
        ()
    })
}

рд╡реЗ рджреЛрдиреЛрдВ рд╕рдорд╛рди рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдирд┐рдпрдд рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@dylni try рдмреНрд▓реЙрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдореЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд╢рд░реАрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред ? рдСрдкрд░реЗрдЯрд░ рддреНрд░реБрдЯрд┐ рдкрд░ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрдд рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдВрддрд░рд┐рдХ try рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рддрдХ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдП рдмрд┐рдирд╛ред

`` `рдЬрдВрдЧ
fn main () / * рдпрд╣рд╛рдБ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ * / {
рдкрд░рд┐рдгрд╛рдо рджреЗрдирд╛ = рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ {
foo () ?. рдмрд╛рд░ () ?. baz ()?
};
рдореИрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо {
//тАж
}
}

@SimonSapin рдХреНрдпрд╛ рд╡рд╣ рдЕрдХреНрд╕рд░ рдЖрддрд╛ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ:

fn main() /* no result here */ {
    let result  = foo()
        .and_then(|x| x.bar())
        .and_then(|x| x.baz());
    match result {
        // тАж
    }
}

рдпрд╣ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╡рд┐рдзрд┐ рдмрдВрдж рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдЧрд╛:

fn main() /* no result here */ {
    let result  = foo()
        .and_then(::bar)
        .and_then(::baz);
    match result {
        // тАж
    }
}

рдкреНрд░рдХрд╛рд░ рднреА and_then рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ try рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рдЯреЗрд░рд┐рдпрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрдардиреАрдпрддрд╛ рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рд╕реНрд╡реАрдХреГрдд RFC рдХреЗ рдХреБрдЫ рдФрд░ рддрд░реНрдХ рд╣реИрдВ: https://rust-lang.github.io/rfcs/0243-trait-based-exception-handling.html

рд╡реИрд╕реЗ рднреА рднрд╛рд╖рд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ ? (рдФрд░ .await ) рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ and_then рддрд░рд╣ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдкрд╣рд▓реЗ рд╣реА рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред

рд╡реИрд╕реЗ рднреА рднрд╛рд╖рд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ ? (рдФрд░ .await ) рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ and_then рддрд░рд╣ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдкрд╣рд▓реЗ рд╣реА рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред

@SimonSapin рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдЖрд░рдПрдлрд╕реА рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВред

рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ File::open()? std::io::Error рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ anyhow::Error рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдХреЛ Result<_, anyhow::Error> рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

fn tls_add_cert(config: &ClientConfig, path: impl AsRef<Path>) -> Result<(usize, usize), anyhow::Error> {
    let path = path.as_ref();
    let mut file = BufReader::new(File::open(path)?);
    Ok(config.root_store.add_pem_file(&mut file)
        .map_err(|_| anyhow!("Bad PEM file"))?)
}

рдореИрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ with_context() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

fn tls_add_cert(config: &ClientConfig, path: impl AsRef<Path>) -> anyhow::Result<(usize, usize)> {
    let path = path.as_ref();
    try {
        let mut file = BufReader::new(File::open(path)?);
        Ok(config.root_store.add_pem_file(&mut file)
            .map_err(|_| anyhow!("Bad PEM file"))?)
    }
    .with_context(|| format!("Error adding certificate {}", path.display()))
}

рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рдХрд╛рд░ рдирд┐рд╖реНрдХрд╛рд╕рди рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

error[E0282]: type annotations needed
  --> src/net.rs:29:5
   |
29 | /     try {
30 | |         let mut file = BufReader::new(File::open(path)?);
31 | |         Ok(config.root_store.add_pem_file(&mut file)
32 | |             .map_err(|_| anyhow!("Bad PEM file"))?)
33 | |     }
   | |_____^ cannot infer type
   |
   = note: type must be known at this point
   ```

I don't understand why a type annotation is needed here but not in the first case. Nor do I see any easy way to add one, as opposed to using an [IIFE](https://en.wikipedia.org/wiki/Immediately_invoked_function_expression) which does let me add an annotation:

```rust
(|| -> Result<_, anyhow::Error> {
    let domain = DNSNameRef::try_from_ascii_str(host)?;
    let tcp = TcpStream::connect(&(host, port)).await?;

    Ok(tls.connect(domain, tcp).await?)
})()
.with_context(|| format!("Error connecting to {}:{}", host, port))

@jkugelman

рдлрд┐рд░,

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ try / ? Try рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдереЗ рдЬреЛ [ impl Try<Ok=_, Error=anyhow::Error> ] рдереЗ, рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдмреНрд▓реЙрдХ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реА Result рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗред

(рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ try рдмреНрд▓реЙрдХ (# 70941) рдореЗрдВ Ok рдЕрдкрдиреА рдЕрдиреБрдЧрд╛рдореА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ

  • рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ, try рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЗрдЦрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ( try: Result<_,_> { рдпрд╛ рдЬреЛ рднреА рд╣реЛ) рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХрдо рдХрд░реЗрдВ,
  • рдЬрдм try рдмреНрд▓реЙрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдирд┐рджрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
  • рдЬрдм рд╣рдо рдЕрдиреНрдпрдерд╛ рд╡рд┐рд╡рд╢ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ try Result<_,_> рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдордмреИрдХ рджреЗрдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ, рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреЗ рддрд╣рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗ 80% рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди _would_ try рдмреНрд▓реЙрдХ рдХреА рд╡рдЬрд╣ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдЬрд░реВрд░рдд $12: Try<Ok=$5, Error=$8> рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░реНрдпрд╛рдкреНрддред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рджрд┐рдпрд╛ рдЧрдпрд╛ # 70941 "рд╣рд╛рдВ, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдХреБрдЫ рд░реВрдк) ' Try::from_ok рд░реИрдкрд┐рдВрдЧ' рдХреА рдУрд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рд╣рдо рд╢рд╛рдпрдж _also_ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖рд┐рдд рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрдм try рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛ Ok(x) рд▓реМрдЯ рд░рд╣рд╛ рд╣реИ рдЬрдм x рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ

  • try: Result<_, _> { .. } , try as Result<> , рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВ try: Result рд╢рд╛рдпрдж рдареАрдХ рд╣реИ? рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╕рдВрджреАрджрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рдЧрддрд╛ рд╣реИ)
  • рд╕рдВрджрд░реНрдн рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ "рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░" рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ - рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдкрд╕рдВрдж рдХрд░реЗрдВ рдХрд┐ try рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ
  • рдЕрдиреНрдпрдерд╛, Result<_, _> рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ - рдпрд╣ i32 рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрд┐рд░рд╛рд╡рдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ try { }.with_context(...) рд╕рдВрдХрд▓рди рдЬреИрд╕реА рдЪреАрдЬреЗрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ ? рдФрд░ into рдЬрд╝рдмреНрддреА рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬрдм рддрдХ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрджрд┐ рдЖрдк рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк ? try рдмреНрд▓реЙрдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ:

#![feature(try_blocks)]

use std::error::Error;
fn foo() -> Result<(), Box<dyn Error>> {
    let x: Result<_, _> = try {
        std::fs::File::open("foo")?;
    };

    x?;

    Ok(())
}

fn main() { 
}

рдЖрдкрдХреЛ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ ( рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди ) рдорд┐рд▓рддреА рд╣реИрдВ рдФрд░ рдареАрдХ рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ ? "рдореЗрдВ" рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдВрддрд░реНрд╡реЗрд╢рди рдЧрд┐рд░рд╛рд╡рдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджреЗрдЧрд╛ред

рд╕рдВрднрд╡рдд: рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдлреЗрдХреНрд╢рди рдлреЙрд▓рдмреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджреЗрдВрдЧреЗред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдХ: рдпрджрд┐ рджрд┐рдП рдЧрдП Try рдмреНрд▓реЙрдХ рдореЗрдВ ? рд╕рднреА рдЙрдкрдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдорд╛рди Try::Error рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ try рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ (рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдмрдВрдзреЗ рд╣реБрдП)ред

"(рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реЛ)", рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реВрдХреНрд╖реНрдо рдбрд░рд╛рд╡рдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрд╕рдВрд╡реИрдзрд╛рдирд┐рдХ рдирд╣реАрдВ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рджреБрдирд┐рдпрд╛ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде @nikomatsakis рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдкрд░реАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд╣рд╛рдВ ? рдПрдХ рдЬрдмрд░рди рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ try рдмреНрд▓реЙрдХ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдХреЛрдИ рдСрдЯреЛ-рд░реИрдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ:

use std::error::Error;
fn foo() -> Result<(), Box<dyn Error>> {
    let x = try {
        std::fs::File::open("foo").err_convert()?;
        Ok(())
    };

    x?;

    Ok(())
}

рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ:

  • рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ try рд╕реНрдХреЛрдк рдФрд░ fn рдкрд░рд┐рдгрд╛рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореВрд▓реНрдп рдХреЗ рд╕рдлрд▓рддрд╛ рд╣реИред рдпрд╣ рднреА рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╡реЗ Result рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВред
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╣рд╛рдВ рд╣реЛрддрд╛ рд╣реИред
  • рддреНрд░реБрдЯрд┐ рд░реВрдкрд╛рдВрддрд░рдг x? рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ try рд╕реНрдХреЛрдк std::fs::File рдкрд░рд┐рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИред рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдФрд░ рд╣рдо рдЗрдВрд╕рд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдПред
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╣рд┐рдВрдЯрд┐рдВрдЧ рдХреЗрд╡рд▓ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд╕рд░реЗ, рд╕реНрд╡рддрдВрддреНрд░ рдПрдХ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЙрд╕ рд╕рдорд╛рдирд╛рдВрддрд░ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред

@phaylon рдЬрдм рдореИрдВ рд╕рд╛рд╡рдзрд╛рди рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдирд╛ рд╕рд░рд╛рд╣рдиреАрдп, рдореБрдЭреЗ рдбрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ unconstructive рд╣реИред рддреНрд░реБрдЯрд┐ рд░реВрдкрд╛рдВрддрд░рдг ? рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реИред

рдпрджрд┐ try рдлрд╝рдВрдХреНрд╢рдВрд╕ (рд░рд┐рдЯрд░реНрди рдФрд░ рдереНрд░реЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде) рдкрд░ рдХрднреА рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рднреА рдмреНрд▓реЙрдХ рдХреЗ рд╕рдорд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред

рдЬреИрд╕реЗ

try fn foo() -> u32 throw String {
  let result = try: u32 throw String {
    123
  };
  result?
}

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рд╣реИрдВ

try fn foo() -> u32 throw String { ... }

рдпрд╛ рдХреЗ рд╕рдорд╛рди рд╡рд┐рд░реЛрдз рдХрд┐рдпрд╛

fn foo() -> Result<u32, String> { ... }

?
рдмрд╕ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@gorilskij рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рдн Ok -wrapping рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

fn foo() -> Result<u32, String> {
    try {
        // function body
    }
}

рдХреБрдЫ рд▓реЛрдЧ throws рднреА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрд╡рд╛рдж рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рднрд░реЛрд╕реЗрдордВрдж рдкрд╛рддреЗ рд╣реИрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рджреВрд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдпрд╣ try fn рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рдЧрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдХреЛ рдФрд░ рди рд▓реЗрдВред рдпрд╣ рдзрд╛рдЧрд╛ try рдмреНрд▓реЙрдХ рдХреА рд╕реНрд╡реАрдХреГрдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд (рдФрд░ рдЕрднреА рддрдХ, RFCd рдХреЗ рд░реВрдк рдореЗрдВ) try fn ред

рдореИрдВ рд╕рд┐рд░реНрдл рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЖрд░рдПрдлрд╕реА ? рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Into , рдирд╣реАрдВ From ред рдпрд╝рд╣ рдХрд╣рддрд╛ рд╣реИ:

рд╡рд░реНрддрдорд╛рди RFC рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП std::convert::Into рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ From рд╕реЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХрдВрдмрд▓ рд╣реИ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рд╢реНрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдЯреАрдХ рдЙрддреНрдерд╛рди рд╡рд┐рдзрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред Into (рд╕рдВрднрд╡рддрдГ) From рдХреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп From рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Into рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рдХрд╛рд░ рдЬреЛ рд╕реАрдзреЗ Into рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, Try trait RFC рдореЗрдВ , Into рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг From рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рднреА рд╣реИ рдЬреЛ рдЕрдм рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ ?
https://github.com/rust-lang/rust/blob/b613c989594f1cbf0d4af1a7a153786cca7792c8/src/librustc_ast_lowering/expr.rs#L1232

рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Into рд╕реЗ From рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдХрдВрдмрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг Into ( From рд╡рд┐рдкрд░реАрдд) рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рд╡рд┐рд░рд╛рд╕рдд рдХреА рд╡рдЬрд╣реЛрдВ рд╕реЗ, рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, ? (рдпрд╛) рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ Try )ред рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдЕрд░реНрде рд╣реИ рдХрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ Into рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реАрдорд╛ ? рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ:

fn with_user_err<E>(op: impl Fn() -> Result<(), E>) -> Result<(), MyError>
where E: Into<MyError>

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ ? рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛

fn with_user_err<E>(op: impl Fn() -> Result<(), E>) -> Result<(), MyError>
where MyError: From<E>

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Into рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп From рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрд▓рдЯрд╛ рдХреА рдХрдВрдмрд▓ impl рдХреА рд╡рдЬрд╣ рд╕реЗ, рд╕рдЪ рдирд╣реАрдВ рд╣реИ Into рдХреЗ рдЖрдзрд╛рд░ рдкрд░ From ред

рд╢рд╛рдпрдж ? ( Try рдореЗрдВ рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдХреЛ рдЧрд╣рд░рд╛ рдирд╣реАрдВ рдЦреЛрджрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ рдЬреЛрдВрд╣реВ @cuviper рдиреЗ From 60 Into 60796 рдореЗрдВ # 38751 рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реЛрд╣реА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЗрд╕рд╕реЗ From рд╡рдЬрд╣ рд╕реЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдВрддрд░реНрдЧреНрд░рд╣рдг рдЯреВрдЯ рдЧрдпрд╛ред -> Into рдХрдВрдмрд▓ рдирд┐рд╣рд┐рдд рдиреЗ рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рди рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдХрдард┐рди рдмрдирд╛ рджрд┐рдпрд╛ред рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд▓рд╛рдЧрдд рдмреНрд░реЗрдХрд┐рдВрдЧ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рдерд╛ред

@ рдЬрд╛рдиреВ рдЖрдкрдХреЛ рднреА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА

рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рд╕реАрдорд╛ рднреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ ?X: Into<ReturnType> рдЬреИрд╕реЗ рд▓рдХреНрд╖реНрдп рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЛ ReturnType: From<?X> рдЬреИрд╕реЗ рд▓рдХреНрд╖реНрдп рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрднрд╡рддрдГ ?X рд▓рд┐рдП рдПрдХ рдорд╛рди рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдВ, ?X рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рдЕрдиреБрдорд╛рди рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдд рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ Self рдкреНрд░рдХрд╛рд░ рдХреЛ рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЯреАрдПрд▓; рдбреАрдЖрд░ рдпрд╣ рд╣реИ рдХрд┐ Into рд╕рд╛рде рдЗрдирдлрд╝реЙрд░реНрдорд┐рдВрдЧ рдХрдард┐рди рд╣реИ, рдФрд░ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЙрд▓реНрд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

@ рдХреГрд╖реНрдгрд╢рд╛рдиреА @ CAD97 рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ! рдореБрдЭреЗ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рд╣реИрдВ рдЬреЛ From рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд╣рдо рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ Into рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдЕрдВрддрдд: рдпрд╣рд╛рдВ рднреА рдЕрдВрддрдГрдХреНрд╖рд┐рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ Into рд╕реАрдорд╛ рдореЗрдВ Into рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдХреАрдбрд╝реЗ рдорд╛рдирддреЗ рд╣реИрдВ?

рдпрджрд┐ рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ Into рдмрд╛рдж рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдмреБрд░рд╛ рдЬреЛ рд╣рдо рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ From рдХрд╛ рдЕрд░реНрде Into

рдХреНрдпрд╛ рдпрд╣ ( Try рдЯреНрд░рд┐рдЯ) рдХрд╡рд░ ? рдХреЛ Into / From рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ Try рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╣реИрдВред Result рдЦреБрдж)?

рдпрд╛рдиреА рдПрдХ рдХреНрд▓реЛрдЬрд░ рдпрд╛ рдлрдВрдХреНрд╢рди рдореЗрдВ ? рдЬреЛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ impl Into<Result>

(рдпрд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рд░рд╛рдд рдХреЛ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ?)

рдореИрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдФрд░ # 70941, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рд░рд╛рдВрд╢ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. "рд╣рд▓ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ" рд▓рдкреЗрдЯреЗрдВ "рдкрд░рд┐рдгрд╛рдо рдореВрд▓реНрдп" рдХреЛ рдЯрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, " рд╣рд╛рдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛"

  2. рдЗрди рдЪрд┐рдВрддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдИ рдЪрд┐рдВрддрд╛ рдЬреЛрдбрд╝реА рдЧрдИред рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

    • [] рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВред

ISTM рдХрд┐ рдЗрд╕ рдЕрдВрддрд┐рдо рдЪрд┐рдВрддрд╛ рдХреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ try рд▓рд┐рдП рдПрдХ рдмреАрд╕реНрдкреЛрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ
  • рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ https://github.com/rust-lang/rfcs/pull/803 # 23416 (рдЯрд╛рдЗрдк рдЕрд╕реНрдХреНрд░рд┐рдкреНрд╢рди) рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд┐рд░рд╛рд╡рдЯ (рдЬреИрд╕реЗ Result , рд╢рд╛рдпрдж https://github.com/rust-lang/rust/issues/31436#issuecomment -614735806 рдореЗрдВ рд╕реБрдЭрд╛рдИ рдЧрдИ рд╣реИ)
  • рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ / рдЕрд░реНрде рд╕реНрдерд╛рди рдЫреЛрдбрд╝рдХрд░ try рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВ

(рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рдирд╣реАрдВ рд╣реИрдВред)

рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдорджрджрдЧрд╛рд░ рд▓рдЧреЗрдЧрд╛ред

рдЯрд╛рдЗрдк рдЕрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЗ рд╣реИрдВ (рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЕрдиреНрдп), рдФрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдХреЗрд▓реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рджреЗрдВ; рдкреНрд░рддрд┐рд▓реЗрдЦрди рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ try рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

Result рдЧрд┐рд░рд╛рд╡рдЯ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: try { expr? }? (рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдордХрдХреНрд╖реЛрдВ рдореЗрдВ) рдиреЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ .into() рджреЛ рдХреЙрд▓ рдХреА рд╣реИрдВ , рдЬреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИред

@ рдЖрдИрдЬреИрдХрд╕рди рдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмреНрд▓реЙрдХ рдкрд░, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рднрд╛рдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЕрдкрдиреА рдЕрдиреВрдареА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рд╡рд╣рд╛рдБ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╡рд╛рдж рдерд╛ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рднреАред

рдмреБрдз рдкрд░, рдЕрдЧрд╕реНрдд 05, 2020 рдХреЛ 02:29:06 PM -0700 рдкрд░, рдирд┐рдХреЛ рдорддреНрд╕рдХрд┐рд╕ рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдБ рд╡рд╣рд╛рдБ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╡рд╛рдж рдерд╛ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рднреАред

рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдЯрд╛рдЗрдк рдПрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП
рд╣рд░ рдЬрдЧрд╣ рдПрдХ рдмрдбрд╝рд╛ рд╡реНрдпрд╛рдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛, рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ
рдПрдХ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ред рдореБрдЭреЗ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдпрд╣реА рдЪрд┐рдВрддрд╛ рдереА
рдЙрдард╛рдпрд╛ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЗрддрдиреА рдмреБрд░реА рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЕрдм рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рднреА, рдПрдХ рд▓реЗрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдмрджрд╕реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реЛред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, try рдмреНрд▓реЙрдХ рдореИрдХреНрд░реЛрдЬрд╝ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ @withoutboats рдЙрддреНрдХреГрд╖реНрдЯ рдлрд╝рд╣рд▓рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд╛рд░реЗ рдореИрдХреНрд░реЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрдорд┐рдпреЛрдВ рд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реЛрдЧреА, рдЕрдЧрд░ рдпрд╣ try рдореЗрдВ рдкреНрд░реЛрдХ рдХреЗ рд╢рд╡реЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреА рд╣реИред

рдореИрдВ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рджреМрдбрд╝рддрд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдореБрдЭреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрди рдкрд░ рдЖ рдЬрд╛рдПред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ, 100% рдмрд▓рд┐рджрд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдпрд╣ рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдереЗред рдореБрдЭреЗ рдЕрднреА рддрдХ рдЦреБрдж рдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ рдХрд╣рд╛ "рдЦрддрд░реЗ рдореИрдВ рдпрд╣рд╛рдБ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛", рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдИрдЖрдИрдПрдлрдИ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдмрд╣реБрдд рд╕реЗ рдмреНрд▓реЙрдХ рдХреЛ рдЖрдЬрд╝рдорд╛ рд╕рдХреЗрдВред рдПрдХ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ, рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЫреЛрдбрд╝рдХрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдиреНрдп рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ, рдЕрд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рд╣реИред

рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рддрд╛ рд╣реВрдВ рдЬрдм рдореИрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реВрдВ, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬреЛрдВ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЕрдЧрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рд╢ рд╕реНрдерд┐рд░ рдереА, рддреЛ рдореИрдВ рд╢рд╛рдпрдж рдЕрднреА рднреА рдмреНрд▓реЙрдХ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рддреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рджреЗрдВ рдХреЛрдИ рдирд╣реАрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рд╕реНрдЯрд╛рдЗрд▓ рдХреЛрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рджреЛрдиреЛрдВ рдмрд╛рд░ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ)ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ "рдЯрд╛рдЗрдк рдбреАрдмрдЧрд┐рдВрдЧ" рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдХреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереАред рдЖрдорддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рдирдпрд╛ рдмрдВрдзрди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реИ рдФрд░ рдкреВрд░реНрд╡рд╡рдд рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдБ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдкрд┐рдВрдЧ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд░реНрдмреЛ рдордЫрд▓реА рд╕реЗ рдмрдЪрддреА рд╣реИред

рд╡рд┐рд╡рд╢рддрд╛ рдореЗрдВ, рдореИрдВ рдмрд╕ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП_рдереЗрди рдпрд╛ рдЕрдиреНрдп рдХреЙрдореНрдмрд┐рдиреЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдЪреНрдЫ рдЖ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред

@steveklabnik @ mark-im рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдмреНрд▓реЙрдХ рдФрд░ рдЯрд╛рдЗрдк try рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реА рдЧреИрд░-рдЖрд░реНрдерд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдлрд▓рддрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдБрдХрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЯрд╛рдЗрдк рдЕрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдПрдХ рдирд┐рдХрдЯ рдЕрд╡рдзрд┐ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдпрд╛ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, @toshttriplett (рдФрд░ I рд╕рд╣рдордд) рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рд▓реЗрдЦрди рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реЛред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ; рдЬрд╛рдВрдЪ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, "рдХреЛрд╢рд┐рд╢ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛, рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред" рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рд▓реЗрдЦрди рдкрд░ рд╕реНрдерд┐рд░реАрдХрд░рдг рдирд╣реАрдВ рд╣реИред


@ рдЬрдВрдЧ-рд▓реИрдВрдЧ / рд▓реИрдВрдЧ рдореБрдЭреЗ рдЗрд╕ рдереНрд░реЗрдб рд╕реЗ рдЯрд╛рдЗрдк рдЗрдВрдлрд╝реЗрдХреНрд╢рди рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЧреАрдерд╣рдм рдФрд░ рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЪреВрдВрдХрд┐ рдирд┐рд╖реНрдХрд╛рд╕рди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрдп рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдмреНрд▓реЙрдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреИрдардХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛, рдФрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИ ред

рдПрдХ рдкреНрд░рд╢реНрди рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рд▓рдЪреАрд▓рд╛рдкрди рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬреЛ рд╣рдордиреЗ Try рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреА рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдпрд╣ рдирдИ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ Try рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@withoutboats рдореИрдВ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЬрд╛рдВрдЪ рдХреА рддреЛ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдмреИрдХрд╡рд░реНрдб рд╕рдВрдЧрддрддрд╛ рдХреЗ рдХрд╛рд░рдг Try рдкрд░рд┐рд╡рд░реНрддрди рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - @cramertj рдиреЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ Pin рдирд┐рд╣рд┐рддрд╛рд░реНрде, IIRC рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

behnam picture behnam  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

drewcrawford picture drewcrawford  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eddyb picture eddyb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zhendongsu picture zhendongsu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jmegaffin picture jmegaffin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ