рдпрд╣ RFC " ?
in main
" (rust-lang/rfcs#1937) рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдХрджрдо:
?
рдореЗрдВ main
(#46479)?
рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ?
рдореЗрдВ #[test]
рд╕реНрдерд┐рд░реАрдХрд░рдг:
main
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ (https://github.com/rust-lang/rust/issues/48453) https://github.com/rust-lang/ рдореЗрдВ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ:
рдЕрдирд╕реБрд▓рдЭреЗ рдкреНрд░рд╢реНрди:
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдПрдЧрд╛?
@Screwtapello рдХреА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдХреА рдЧрдИ рд╣реИ FCP рдЗрд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ RFC рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдПред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: RFC рдиреЗ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ 2 рдХреЛ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ; рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ 1 рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХреЛрдИ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдЪрд╛рд╣рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрд╛рдЗрдХрд╢реЗрдбреА рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдЕрдм рд╣рдо рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдореЗрдВ рдмрдВрдж рд╣реИрдВ?
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?
рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдк-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрдм рдПрдХ рдЙрдк-рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЬрдВрдЧ рдореЗрдВ рд▓рд╛рдЧреВ) рдХреЗ рдкрд╛рд╕ рдмрд╛рдЗрдирд░реА "рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ"/"рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛" рд╕реЗ рдкрд░реЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред
рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдк-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдореЗрд╢рд╛ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ _except_ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рдЧреИрд░-рд╢реВрдиреНрдп рдХрд╛ рдЕрд░реНрде рд╣реИ рд╡рд┐рдлрд▓рддрд╛ред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ std::process::exit
рдПрдХ рдореБрдЦреНрдп-рдлрд╝рдВрдХреНрд╢рди рд░реИрдкрд░ рдФрд░ рдПрдХ рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛ рд░рд╣реЗрдЧрд╛ рдЬреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╣рддреНрд╡рд╣реАрди рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ SemVer рдореЗрдВ "рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╣рддреНрд╡рд╣реАрди рд╡рд┐рд╡рд░рдг" рдЕрдкрд╡рд╛рдж рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрдЬрд┐рдЯ рдХреЛрдб рдХреЛ рдЕрдирд╕реБрд▓рдЭреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред @zackw рдиреЗ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЗрдВрдЯрд░реНрдирд▓ рдереНрд░реЗрдб рднреА рдЦреЛрд▓рд╛ред
рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдирд┐рдХрд╛рд╕ рдХреЛрдб 1
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдмрдЬрд╛рдп 2
):
https://www.reddit.com/r/rust/comments/6nxg6t/the_rfc_using_in_main_just_got_merged/
@ arielb1 рдХреНрдпрд╛ рдЖрдк рдЗрд╕ rfc рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?
@bkchr
рдирд╣реАрдВ, рдмрд╕ рдЗрд╕рдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВрдиреЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдореЗрдВрдЯрд░рд┐рдВрдЧ рдиреЛрдЯреНрд╕ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рднреВрд▓реВрдВрдЧрд╛ред
рдЖрд╣ рдЕрдЪреНрдЫрд╛, рдореБрдЭреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА :)
рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВ :D
@bkchr
рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рд╣реВрдБ :-)ред рдореБрдЭреЗ рдореЗрдВрдЯрд░рд┐рдВрдЧ рдирд┐рд░реНрджреЗрд╢ рдЬрд▓реНрдж рд╣реА рд▓рд┐рдЦрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдпрд╣ рдПрдХ [рдбрдмреНрд▓реНрдпреВрдЬреА-рдХрдВрдкрд╛рдЗрд▓рд░-рдордзреНрдп] рдореБрджреНрджрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдк рдорджрдж рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк irc.mozilla.org (I'm arielby) рдкрд░ #rustc рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ https://gitter.im/rust-impl-period/WG-compiler-middle (рдореИрдВ @arielb1 рд╣реВрдВ) рд╡рд╣рд╛рдВ)ред
#44505 рдкрд░ рдПрдХ WIP рдХрдВрдкрд╛рдЗрд▓рд░ рд░реАрдбрдореА рд╣реИ - рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛:
Termination
рд▓реИрдВрдЧ-рдЖрдЗрдЯрдо рдХреЛ libcore рдореЗрдВ рдЬреЛрдбрд╝реЗрдВTermination
рдореЗрдВ main
. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВTermination
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ#[test]
Termination
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВTermination
рд▓реИрдВрдЧ-рдЖрдЗрдЯрдо рдХреЛ libcore рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ libcore/ops/termination.rs
рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ #[unstable(feature = "termination_trait", issue = "0")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЕрд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред
рдлрд┐рд░, рдЖрдкрдХреЛ рдЗрд╕реЗ src/librustc/middle/lang_items.rs
рдореЗрдВ рд▓реИрдВрдЧ-рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ main
рдЯрд╛рдЗрдк-рдЪреЗрдХ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 0c3ac648f85cca1e8dd89dfff727a422bc1897a6 рджреЗрдЦреЗрдВ)ред
рдЗрд╕рдХрд╛ рдордд:
librustc/middle/lang_items.rs
рдореЗрдВ)#[cfg_attr(not(stage0), lang = "termination")]
рдХреЛ Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ред рдЖрдк рдХреЗрд╡рд▓ #[lang = "termination"]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ, рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ "рд╕реНрдЯреЗрдЬ0" рдХрдВрдкрд╛рдЗрд▓рд░ (рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди) рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ termination
рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ libstd рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдЬрдм рд╣рдо рд╕реНрдЯреЗрдЬ0 рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ cfg_attr
рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗредTermination
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ main
рдмрдирд╛рдирд╛ рдЬреЛ ()
рд▓реМрдЯрд╛рддрд╛ рд╣реИ рди рдХрд┐ рдЯрд╛рдЗрдк-рдЪреЗрдХ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдкрдХреЛ main function has wrong type
рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ) рдФрд░ рдХрд╛рдо рдХрд░реЗрдВред
рдЗрд╕реЗ рдЯрд╛рдЗрдк-рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдореМрдЬреВрджрд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
https://github.com/rust-lang/rust/blob/9a00f3cc306f2f79bfbd54f1986d8ca7a74f6661/src/librustc_typeck/lib.rs#L171 -L218
рдлрд┐рд░, рдЖрдкрдХреЛ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдЖрдк register_predicate_obligation
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рджрд╛рдпрд┐рддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ)ред рдпрд╣ рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
https://github.com/rust-lang/rust/blob/9a00f3cc306f2f79bfbd54f1986d8ca7a74f6661/src/librustc_typeck/check/mod.rs#L1100 -L1108
рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХрд╣рддрд╛ рд╣реИ, рдЖрдк рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдкрд░ lang_start
рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
lang_start
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://github.com/rust-lang/rust/blob/9a00f3cc306f2f79bfbd54f1986d8ca7a74f6661/src/libstd/rt.rs#L32
рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рдФрд░ RFC рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
#[lang = "start"]
fn lang_start<T: Termination>
(main: fn() -> T, argc: isize, argv: *const *const u8) -> !
{
use panic;
use sys;
use sys_common;
use sys_common::thread_info;
use thread::Thread;
sys::init();
sys::process::exit(unsafe {
let main_guard = sys::thread::guard::init();
sys::stack_overflow::init();
// Next, set up the current Thread with the guard information we just
// created. Note that this isn't necessary in general for new threads,
// but we just do this to name the main thread and to give it correct
// info about the stack bounds.
let thread = Thread::new(Some("main".to_owned()));
thread_info::set(main_guard, thread);
// Store our args if necessary in a squirreled away location
sys::args::init(argc, argv);
// Let's run some code!
let exitcode = panic::catch_unwind(|| main().report())
.unwrap_or(101);
sys_common::cleanup();
exitcode
});
}
рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ create_entry_fn
рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ Instance::mono рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореЛрдиреЛрдореЛрд░реНрдлрд┐рдХ lang_start
Instance::mono
рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде monomorphize::resolve
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
Termination
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ doctests рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж @alexcrichton рд╕реЗ рдкреВрдЫреЗрдВ (рдореИрдВ рдпрд╣реА рдХрд░реВрдВрдЧрд╛)?
Termination
рдореЗрдВ #[test]
. рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ libtest рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж @alexcrichton рд╕реЗ рдкреВрдЫреЗрдВ (рдореИрдВ рдпрд╣реА рдХрд░реВрдВрдЧрд╛)? рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕ рдореИрдХреНрд░реЛ, рдпрд╛ рдЙрд╕рдХреЗ рдХреЙрд▓рд░ рдХреЛ рдЙрди рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ ()
рдирд╣реАрдВ рд╣реИрдВред
@bkchr
рдХреНрдпрд╛ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЖрдИрдЖрд░рд╕реА/рдЧрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?
@bkchr рдЕрднреА рдЪреЗрдХ рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реИ - рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк рдФрд░ @ arielb1 рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдЧрдЯрд░ рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд░ рд░рд╣реЗ рдереЗ, рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рдХрд╣реАрдВ рдЪреВрд╕реЛ?
рдХреЛрдИ рдЦреЗрдж рдирд╣реАрдВ, рдЕрдм рддрдХ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдореБрдЭреЗ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдорд┐рд▓реЗрдЧрд╛ред
@bkchr рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдорджрдж рдЪрд╛рд╣рд┐рдП рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ!
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдБ, рдореИрдВ рджрд╛рдпрд┐рддреНрд╡ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рджрд╛рдпрд┐рддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ TraifRef рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ TraitRef рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ DefId рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдЯрд░реНрдорд┐рдиреЗрд╢рди рдЯреНрд░реИрдЯ рд╕реЗ DefId рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ?
@bkchr рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓реИрдВрдЧ рдЖрдЗрдЯрдо рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ: https://github.com/rust-lang/rust/blob/ade0b01ebf18550e41d24c6e36f91afaccd7f389/src/librustc/middle/lang_items.rs#L312
рдФрд░ #[termination_trait]
рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: https://github.com/rust-lang/rust/blob/ade0b01ebf18550e41d24c6e36f91afaccd7f389/src/libcore/fmt/mod.rs#L525 -L526
рд╣рд╛рдБ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ check_fn рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдорд╛рдкреНрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ register_predicate_obligation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЯрд░реНрдорд┐рдиреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ defid рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдУрд╣, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ tcx.require_lang_item(TerminationTraitLangItem)
рдЪрд╛рд╣рд┐рдПред
@bkchr рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ? рдмрд╕ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред =) рдпрджрд┐ рдЖрдк рд╡реНрдпрд╕реНрдд рд╣реИрдВ рддреЛ рдЪрд┐рдВрддрд╛ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╣ рд╕рднреА рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЗрд╕ рд╕рдордп рд╡реНрдпрд╕реНрдд рд╣реИрдВ :/ рдЕрдм рддрдХ, рдореБрдЭреЗ рд╡рд╣ рд╕рдм рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реА рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА :)
рдЯрд░реНрдорд┐рдиреЗрд╢рдирдЯреНрд░реЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рд╣реИ: https://github.com/bkchr/rust/blob/f185e355d8970c3350269ddbc6dfe3b8f678dc44/src/librustc_typeck/check/mod.rs#L1108
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
error[E0277]: the trait bound `Self: std::ops::Termination` is not satisfied
--> src/rustc/rustc.rs:15:11
|
15 | fn main() { rustc_driver::main() }
| ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::ops::Termination` is not implemented for `Self`
|
= help: consider adding a `where Self: std::ops::Termination` bound
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
@bkchr рдореИрдВ рдлреАрдбрдмреИрдХ рдХреЗ рд▓рд┐рдП https://gitter.im/rust-impl-period/WG-compiler-middle рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░-рдорд┐рдбрд┐рд▓ рд╡рд░реНрдХрд┐рдВрдЧ рдЧреНрд░реБрдк рдЧрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рд╕рд╛рде рд╣реА https рдкрд░ #rust-internals IRC рдЪреИрдирд▓ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред ://chat.mibbit.com/?server=irc.mozilla.org%3A%2B6697&channel=%23rust-internalsред :)
@bstree рд╣рд╛рдБ рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрдЯрд░ рдЪреИрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред :)
@bkchr рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рд╣реИред рдЖрдк рдЬрд┐рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрджрд░реНрдн рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ R: Termination
рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд╣рд╛рдВ R
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд "рдкрджрд╛рд░реНрде" рдмрдирд╛рдХрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, Self
) рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ Substs::identity_for_item
рдкрджреНрдзрддрд┐ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЙрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рджреЗрдЧрд╛ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк Self
Termination
#$ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Self
рдкрд░ рдореИрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк Terminator
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЗрддрдирд╛ рдирд╣реАрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдВрдЯреНрд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ ret_ty
рдпрд╛ actual_ret_ty
рдЪрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╛ рддреЛ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ret_ty
рдмреЗрд╣рддрд░ рд╣реИ - рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЬрдмрдХрд┐ actual_ret_ty
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ)ред
рдЖрдк tcx рд╕реЗ рдХреЗрд╡рд▓ mk_substs()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЗрдЪреНрдЫрд┐рдд рдкрджрд╛рд░реНрде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдкреНрд░рдХрд╛рд░, рдЗрд╕рд▓рд┐рдП let substs = fcx.tcx.mk_substs(&[ret_ty]);
рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝ tcx.mk_substs_trait(ret_ty, &[])
рд╣реИред
@bkchr рдмрд╕ рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдЙрд╕ рд╕рд▓рд╛рд╣ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓рд╛? (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреЗрдЬреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЧрдЯрд░ рдкрд░ рдкреВрдЫрдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИред)
рд╣рд╛рдБ, рдореИрдВ рдЧрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ :)
@bkchr рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ? рдмрд╕ рдЪреЗрдХ рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдорд┐рд▓реЗрдЧрд╛ред
рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдПрдХ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИ? рдореИрдВ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рд╕реЗ рдкрд╣рд▓реЗ рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рджреЛ рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@ рдпреВ007рдбреА
рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ @bkchr рд▓рдЧрднрдЧ рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдЖрд╣, рдареАрдХ рд╣реИ - рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреВрдБрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред
@ U007D рдХреНрдпрд╛ рдЖрдкрдиреЗ https://www.rustaceans.org/findwork рджреЗрдЦрд╛ рд╣реИ?
@lnicola рд╣рд╛рдБ, рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ! рдореИрдВ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдХреБрдЫ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ (рдпрд╛рдиреА рд╢реБрджреНрдз рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрдиреЗрдВ) рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╡реБрдХ рд╣реВрдВред рд╕рдЪ рдХрд╣реВрдВ, рднрд▓реЗ рд╣реА рдореИрдВ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рд░рд╕реНрдЯ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдХрджрдо рдЙрдард╛рдирд╛ рдереЛрдбрд╝рд╛ рдбрд░рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рдХреА рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ - рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рдЗрд╕реЗ рдПрдХ рдЦреБрд▓реА, рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рдФрд░ рд╕рдорд╛рд╡реЗрд╢реА рд╕рдВрд╕реНрдХреГрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЫреЗ рдХреА рдУрд░ рдЭреБрдХ рдЧрдпрд╛ рд╣реИ - рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореБрдЭреЗ рдЕрдиреБрднрд╡ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рдорд┐рд▓рд╛ рд╣реИред (рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рддрдХрдиреАрдХреА рдЙрджреНрдпреЛрдЧ рдореЗрдВ рд╡рд░реНрд╖реЛрдВ рдФрд░ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдкреБрд░рд╛рдиреЗ рдпреБрджреНрдз рдХреЗ рдирд┐рд╢рд╛рди рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рд╕рдВрдмрдВрдз рд╣реИ рдЬрд╣рд╛рдВ рдЯреАрдо рд╕рд╣рдпреЛрдЧреА рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рд╣реЛрддреА рд╣реИред)
рд╡реИрд╕реЗ рднреА, рдЗрд╕ рд╕рд╛рд▓ рдХреБрдЫ рдЪреБрдирдирд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рдХрд╛рд░рд╛рддреНрдордХ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ! :)
рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @lnicolaред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИред
@bkchr рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рдореИрдВ рдЗрд╕ рдкрд░ рд╣реВрдВ (https://github.com/rust-lang/rust/pull/46479)ред рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рдФрд░ рд╕рдордп рд╣реИред рд╕рднреА рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ: /
рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдиреЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдерд╛ред рдЗрд╕реЗ рдХреНрд░реЙрд╕-рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ред
рд╣реИрд▓реЛ, рдЙрд╣ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╕реНрдЯ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдХрд░рд┐рдпрд░ рдХреА рд╢реБрд░реБрдЖрдд рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ рд╕реЗ рдХрд░реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рдВрдкрд░рд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Exit
? рдпрд╣ рдореМрдЬреВрджрд╛ рд░рд╕реНрдЯ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдмрд┐рдВрджреБ рдкрд░ рд╣реИред Exit-as-a-noun, exit-as-a-verb рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рддрд┐рд░реВрдк рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ "рдЕрдВрджрд░ рд╕реЗ" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╢рдмреНрдж рд╣реИред
рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, "рдЯрд░реНрдорд┐рдиреЗрд╢рди" std::terminate
рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдкреНрддрд┐ (рдХреЙрд▓рд┐рдВрдЧ abort
) рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реА ++ рдПрдХ рдЖрддрдВрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рд▓реЗрдХрд┐рди рдПрдХ рдЖрддрдВрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрднреА рднреА рддрдирд╛рд╡ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдвреЗрд░)ред
рд░реБрдХреЛ, рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ RFC рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реИред
рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ Exit
рдкрд╕рдВрдж рд╣реИред
рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬреИрд╕рд╛ рдХрд┐ Carrier
рдХреЗ рд╕рд╛рде рд╣реБрдЖ рдерд╛ред
рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдпрд╣ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдбреА
RFC рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдкрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ Exit
, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреАред рдореИрдВ рдЪреАрдЬреЛрдВ рдХрд╛ рдирд╛рдордХрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдВред
рдХреНрдпрд╛ рдЧреБрдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
std::Termination
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, std::ops::Termination
рдирд╣реАрдВ?рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ libcore
рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрд╛, рдХреНрдпреЛрдВрдХрд┐ Result рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП Result
рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ stderr
libcore
рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@bkchr libstd рдореЗрдВ рд╣реЛрдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ libstd рдореЗрдВ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@kennytm рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо libcore рдореЗрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП libstd рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@zackw +1 рдЕрдзрд┐рдХ рд╡реЛрдЯ рдХреЗ рд▓рд┐рдП Exit
рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВред
@ U007D : рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдРрд╕рд╛ рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдЯрди (рдЬреИрд╕реЗ, ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдЖрдкрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкрд┐рдВрдЧ рдХрд░рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рджреЗрдЧрд╛ред
рдХреНрдпрд╛ рдореИрдВ рдЪреЗрдХ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ libtest
/ libsyntax
, рдЕрдЧрд░ language_feature
рд╕рдХреНрд░рд┐рдп рд╣реИ (рдПрдХ рдЯреЛрдХрд░рд╛ рдореЗрдВ)? @arielb1 @nikomatsakis @alexcrichton
@bkchr libsyntax рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╣реА libtest рдореЗрдВ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@bkchr рдпрд╣рд╛рдБ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ?
рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдФрд░ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╣реИрдВ :)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реИ:
#[unstable(feature = "termination_trait", issue = "43301")]
impl<T: Termination, E: Error> Termination for Result<T, E> {
fn report(self) -> i32 {
match self {
Ok(val) => val.report(),
Err(err) => {
print_error(err);
exit::FAILURE
}
}
}
}
#[unstable(feature = "termination_trait", issue = "43301")]
fn print_error<E: Error>(err: E) {
eprintln!("Error: {}", err.description());
if let Some(ref err) = err.cause() {
eprintln!("Caused by: {}", err.description());
}
}
рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ Error
рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг Box<::std::error::Error>
рдФрд░ failure::Error
ред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреЗ рдмрдЬрд╛рдп description
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЧрд▓рддреА рд╣реИред
рдореИрдВ рдЗрд╕ рдЖрд╢рдп рдХреЛ рдЗрд╕ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдБ:
#[unstable(feature = "termination_trait", issue = "43301")]
impl<T: Termination, E: Display> Termination for Result<T, E> {
fn report(self) -> i32 {
match self {
Ok(val) => val.report(),
Err(err) => {
eprintln!("Error: {}", err)
exit::FAILURE
}
}
}
}
рдпрд╣ рдХрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрдорд░ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрдЬрд╛рдп рдбрд┐рд╕реНрдкреНрд▓реЗ рдЗрдВрдкреИрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рд╣реИред
рдХрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рдХрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдХрд╛рд░рдг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдмрд╕ рдЧрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк .context
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:
{}
рдХреЗрд╡рд▓ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ{:?}
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреЗ рдХрд╛рд░рдг (рдкреБрдирд░рд╛рд╡рд░реНрддреА) рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИрд╣рдо рдпрд╣рд╛рдВ :?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдмрдЬрд╛рдп рдбреАрдмрдЧ рдХреЛ рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдирд┐рд╢реНрдЪрд┐рддред
рд╣рд╛рдБ, рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЦреБрд▓рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Debug
рд╕реЗ рдЬреБрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдореНрдо, рдпрд╣ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ "рдкреЙрд▓рд┐рд╢" рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдареАрдХ рд╣реИ рдХрд┐ "рдирд╣реАрдВ, рд╡реЗ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ" - рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдХ рдкреЙрд▓рд┐рд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рддреЛ (рдП) рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдЧрд╛ рдпрд╛ (рдмреА) рдХреБрдЫ рдирдП рдкреНрд░рдХрд╛рд░ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬреЛ рдбреАрдмрдЧ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рд╕рд╣реА рддрд░реАрдХрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд░реВрдк рдореЗрдВ (рдЬреЛ рдХрд┐ Debug
рдХреА рднреВрдорд┐рдХрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ)ред
Debug
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдХрднреА рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрддреНрдкрд╛рджрди рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
@withboats рдореИрдВ рд╕рд╣рдордд рд╣реВрдБред
@nikomatsakis рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ "рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд░реВрдк рдореЗрдВ"? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред
рдЕрджреНрдпрддрди: рдЗрд╕ рдкрд░ рдХреБрдЫ рджрд┐рдиреЛрдВ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдкрд░ рдлрд╝реНрд▓рд┐рдк рдХрд░ рдЪреБрдХрд╛ рд╣реВрдБред рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
:+1: рдпрд╣рд╛рдВ Debug
рдкрд░; рдореБрдЭреЗ https://github.com/rust-lang/rfcs/pull/1937#issuecomment -284509933 рд╕реЗ @nikomatsakis рдХрд╛ "рдПрдХ рдмреЗрдЬреЛрдбрд╝ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдорд╛рди" рдкрд╕рдВрдж рд╣реИред Diggsey рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рднреА Debug
рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реА рд╣реИ: https://github.com/rust-lang/rfcs/pull/1937#issuecomment -289248751
FYI рдХрд░реЗрдВ, рдореИрдВрдиреЗ "рдЕрдзрд┐рдХ рдкреВрд░реНрдг" рдмрдирд╛рдо "рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓" рдбрд┐рдлрд╝реЙрд▓реНрдЯ (рдпрд╛рдиреА Debug
рдмрдирд╛рдо Display
рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╛рдзреНрдп) рдореБрджреНрджреЗ рдкрд░ рдлрд╝реНрд▓рд┐рдк рдХрд┐рдпрд╛ рд╣реИред
рдЯреАрдПрд▓; рдбреАрдЖрд░ рдЕрдм рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╣рдореЗрдВ 'рдХреБрдЫ рднреА рдирд╣реАрдВ' рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд▓реАрдирд░, рд╕рд╛рд░рд╛рдВрд╢ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Display
( @withboats ' рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдкрд░ рдмрд╛рдзреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ:
termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ RFC рдореБрджреНрджреЗ рдкрд░ @zackw рд╕рдореНрдореЛрд╣рдХ рдмрд┐рдВрджреБ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рджреЛрд╣рд░реА panic
/ Result
рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ panic
s рдмрдЧ рдХреЗ рд▓рд┐рдП рд╣реИрдВ рдФрд░ Result
s рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдЗрд╕рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрдирд┐рдХ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдорд╛рдорд▓рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмреЗрд╢рдХ рдХреЛрдИ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рднреА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдЦреБрдж рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ?
рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдХреНрд╕рд░ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ (рд╕рдВрднрд╡рддрдГ рдареАрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ (рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА, рдЖрджрд┐)ред рдЬреИрд╕реЗ, рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдЪреНрдЫрд┐рдд рджрд░реНрд╢рдХ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ @nikomatsakis рдиреЗ рдмрддрд╛рдпрд╛, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд╡рд╣ рдпрд╛ рддреЛ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдореБрдЦреНрдп () рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдкрдХреНрд╖ рдкрд░, рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ Debug
рдЖрдЙрдЯрдкреБрдЯ рдиреЗ рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рд╛рдпрд╛ рдХрд┐ рдореЗрд░рд╛ "рд░рд╕реНрдЯ рдРрдк" рдЕрдзрд┐рдХ рдмрд┐рдирд╛ рдкреЙрд▓рд┐рд╢ рд╡рд╛рд▓рд╛ рд▓рдЧрд╛:
$ foo
Error: Custom { kind: Other, error: StringError("returned Box<Error> from main()") }
$
рдмрдирд╛рдо
$ foo
Error: returned Box<Error> from main()
$
Dispay
рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рднреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ (рдмрдЧ рдХреЗ рд╡рд┐рдкрд░реАрдд), рд╣реИ рдирд╛?
@ U007D рд░реБрдХреЛ, рдЖрдк рдЙрди рджреЛ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ?
(рдП) Error: Custom { kind: Other, error: StringError("returned Box<Error> from main()") }
рдпрд╛
(рдмреА) Error: returned Box<Error> from main()
рд╡рд╣ рд╡рд┐рдХрд▓реНрдк (рдмреА) рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред
@nikomatsakis рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдХреЗ рд╕рд╛рде рдареАрдХ рдерд╛) Debug
рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рдореИрдВ рдмреА рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ) Display
рдЬреИрд╕рд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреА) рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╡рд░реАрдпрддрд╛ рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА рдпрджрд┐ рдореИрдВ рдПрдХ рдЬрдВрдЬреАрд░ рддреНрд░реБрдЯрд┐ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ "рдкреЙрд▓рд┐рд╢" рдпрд╛ "рд╕рднреНрдп" рдЗрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдзрд╛рдЧреЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛрддрд╛ рд╣реИред
рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП "рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп" рдПрдХ рдбреЗрд╡рд▓рдкрд░-рдЙрдиреНрдореБрдЦ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдЬреИрд╕реЗ unwrap
ред
рдпрджрд┐ рд▓рдВрдмреА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣рд╛рдВ {:#?}
рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛?
рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐-рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐-рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╡рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░рд╕реНрдЯ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдЬреИрд╕реЗ .unwrap()
рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреЙрд▓рд┐рд╢ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рд╡реИрд╕реЗ рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Debug
рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░-рдЙрдиреНрдореБрдЦ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рдХреЗрдВрджреНрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ рдХреМрди рд╣реИ?"
рдЖрдЗрдП рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рдереЗ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдереЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Debug
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрд╛рдЙрдВрдб рдПрдХ рд╕реАрдзрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
рдЕрдм рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рд╕рд╣рдордд рдереЗ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдереЗ, рддреЛ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ "рдкреЛрд▓рд┐рд╢" рдФрд░ "рд╕рднреНрдп" рдЖрдЙрдЯрдкреБрдЯ рдЬреИрд╕реЗ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдкреНрд▓реЗ Playред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, Display
рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╕реНрддреБрддрд┐ "рдкреЛрд▓рд┐рд╢" рд╕рднреА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рдореИрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВред)
рддреЛ рд╣рд╛рдБ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЪрд┐рдд рддрд░реНрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдордЬрдмреВрдд рдЖрдо рд╕рд╣рдорддрд┐ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рджрд░реНрд╢рдХ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╛рдзреНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╕реНрдкрд╖реНрдЯ (рдПрд░) рд╣реЛрдЧрд╛ ... :)
(рдореИрдВ рдЗрд╕ рдкреВрд░реЗ рд╡рд┐рд╖рдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди) рдХреНрдпрд╛ рдпрд╣ рдХрд▓реНрдкрдирд╛ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫреЛрдЯреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Termination
рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдмрд╢рд░реНрддреЗ рдпрд╣ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛ Display
рдХреА рддрд░рд╣? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реЗрдЦрдХреЛрдВ рдХреЛ "рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд┐рдВрдЧ" рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ E
рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ?), рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ "рдХрд╕реНрдЯрдо рд╣реИрдВрдбрд▓рд┐рдВрдЧ" рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдмрдЬрд╛рдп? рдореИрдВ рд╕рд┐рд░реНрдл рдКрдкрд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рдкрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБред
(рдХреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдЪрдореБрдЪ @ U007D рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдКрдкрд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ "рд▓реМрдЯрд╛ рд╣реБрдЖ рдмреЙрдХреНрд╕\" рдХреНрдпреЛрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ Display
рднреА рдХрд┐рддрдиреА рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо:
fn main() {
if let Err(e) = std::fs::File::open("foo") {
println!("{}", e)
}
}
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджреЗрд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ:
No such file or directory (os error 2)
рдЬреЛ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛, рдорд╣рд╛рди рдпреВрдПрдХреНрд╕ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рддрдм рддрдХ рдирд╣реАрдВ рдЬрдм рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдЪрдореБрдЪ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд╣реАрдВ рд▓реЗрддрд╛ред рджреВрд╕рд░реА рддрд░рдл, рдпрд╣ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓/рд▓рд╛рдЗрди рдирдВрдмрд░/рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдЧреБрдо рд╣реЛрдиреЗ рдкрд░ рднреА рдорд╣рд╛рди рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред Debug
рдЖрдЙрдЯрдкреБрдЯ, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдФрд░ рднреА рдЦрд░рд╛рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдФрд░ рдбреЗрд╕реАрд▓рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬреЛ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪрдирд╛ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рди рддреЛ Debug
рдФрд░ рди рд╣реА Display
рдорд╣рд╛рди рд╣реИред
рдХреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдЪрдореБрдЪ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ @ U007D рдКрдкрд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрд╣ "рд▓реМрдЯрд╛ рд╣реБрдЖ рдмреЙрдХреНрд╕" рдХреНрдпреЛрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛
рд╕реЗ рдореБрдЦреНрдп ()" рдХреЗ рдмрдЬрд╛рдп... рдЙрд╕ рдмреЙрдХреНрд╕ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА ?
@glaebhoerl рдЖрдк рд╕рд╣реА рд╣реИрдВ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдЙрд╕ Box<Error>
" рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдПрдХ рдХрд╕реНрдЯрдо message
рдлрд╝реАрд▓реНрдб рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ termination_trait
рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдерд╛, рд╢рдмреНрджрд╢рдГ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ . рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп "рдлреВ рдмрд╛рд░ рдмрд╛рдЬ" рдпрд╛ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛ (рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рдЙрдкрдпреЛрдЧреА рди рд╣реЛ)ред
@jdahlstrom рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣рд╛рдВ Box
рдПрдб рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп "рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА" Error
рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХрд╣реАрдВ рднреА рдореБрдХреНрдХреЗрдмрд╛рдЬреА рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ):
Debug
:
$ foo
Error { repr: Os { code: 2, message: "No such file or directory" } }
$
рдФрд░ Display
:
$ foo
No such file or directory (os error 2)
$
@jdahlstrom рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рджреЛрдиреЛрдВ рд╕рдВрджреЗрд╢ рдЕрдкрдиреЗ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЧрд▓рдд рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдФрд░ рднреА рдмреБрд░рд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ):
рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ Display
рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ Debug
рдХреЗ рд╕рднреА рдбрд╛рдЙрдирд╕рд╛рдЗрдб рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдпрд╛рдж рдЖрддреА рд╣реИред
рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ Debug
рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ Display
рдХреЗ рд╕рднреА рдиреБрдХрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╡рд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рди рд╣реЛред
рддреЛ рд╣рд╛рдБ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рд╕рдВрджреЗрд╢ рдЕрдХреНрд╕рд░ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдг рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрд╕ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ (рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж) рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ ?
рдореЗрдВ #[test]
рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/rust-lang/rust/compare/master...bkchr:termination_trait_in_tests
рдореЗрд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
error: use of unstable library feature 'test' (see issue #27812)
|
= help: add #![feature(test)] to the crate attributes to enable
@eddyb рдиреЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдм quote_item!/expr!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рд░рд╛рд╕рдд рд╣реИрдВред
рдЕрдм рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдирдП quote!
рдореИрдХреНрд░реЛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рдПрд╕реНрдЯ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдореЗрдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ?
рдореИрдВ рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ :)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libtest
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреБрдЫ рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдЖрдордВрддреНрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
@eddyb рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рд╕рдордЭрддрд╛ рд╣реВрдВ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ libtest рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреБрдЫ рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдЖрдордВрддреНрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдУрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╢рд╛рдпрдж рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБред рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ - рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ libtest рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ? рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╣ рдореИрдХреНрд░реЛ рдирд╛рдо "рд░рд┐рд╕рд╛рд╡" рдирд╣реАрдВ рд╣реЛрдЧрд╛? (рдпрд╛рдиреА, рдпрд╣ libtest рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ?)
@bkchr
рдореЗрд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд░рд╣реА рд╣реИ? рдмрд╕ рдЕрдВрддрд░ рдкрдврд╝рдиреЗ рд╕реЗ, рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдЕрдм
quote_item!/expr!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рд░рд╛рд╕рдд рд╣реИрдВред
рдореЗрд░реА рдпрд╣рд╛рдВ рдХреЛрдИ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИред рдореИрдВ @eddyb рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡реЗ рд╡рд┐рд░рд╛рд╕рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреА рддрд░рд╣ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдпрд╛рдиреА, рдПрдХ рдмрд╛рд░ рд╣рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ @eddyb рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП?
рдореИрдиреБрдЕрд▓ рдПрдПрд╕рдЯреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рджрд░реНрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред
рдЕрдзрд┐рдХрддрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рдВрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдпрд╛рдиреА, report()
рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдмрджрд▓реЗрдВ?
рдкреБрдирд╢реНрдЪ, рд╣рдо рд╢рд╛рдпрдж .report()
рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп Termination::report(...)
рдЬреИрд╕рд╛ рдХреБрдЫ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП?
рдирд╣реАрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ :(
рдЖрд░рдПрдлрд╕реА рдиреЗ рдПрдХ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдЬреЛ рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рднреА рдпрд╣реА рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмреЙрдХреНрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдореНрдо, рдЪреВрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рд╕рд╛рдорд╛рди рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯрд░реНрдорд┐рдиреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред
@alexcrichton рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ?
@nikomatsakis libtest
рдЕрд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдХреНрдпрд╛ рд╣рдо рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдЕрд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рднрд▓реЗ рд╣реА рд╡рд╣ рдирд╣реАрдВ рдереЗ?
@eddyb рдУрд╣, рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред
рдЖрд░рдПрдлрд╕реА рдиреЗ рдПрдХ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдЬреЛ рдореВрд▓ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рднреА рдпрд╣реА рд╣реИред
рдПрдХ рд░реИрдкрд░ рд╕рдорд╛рд░реЛрд╣ рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред
@eddyb рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдорддрд▓рдм create_test
рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ libtest
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдЬреЛ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ "рдореИрдХреНрд░реЛ рдХреЛ рдЕрд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ"ред рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдЖрд╢рдп рд╣реИ? рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
@bkchr рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ #[unstable(...)]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдбрд╛рд▓рдирд╛, рдЬреИрд╕реЗ: https://github.com/rust-lang/rust/blob/3a39b2aa5a68dd07aacab2106db3927f666a485a/src/libstd/thread/local.rs#L159 -L165
рддреЛ, рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓рд╛ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...
рдЖрд░рдПрдлрд╕реА рд▓рд╛рдЧреВ рдХрд░реЗрдВ
...рдЕрдм рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреАрдЖрд░ рдХреЛ рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
@ErichDonGubler рд╣реЛ рдЧрдпрд╛ :)
рд╣рдореНрдо, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдЖрдзрд╛ rfc рд╣реИ рдЬрд┐рд╕реЗ рдорд░реНрдЬ рдХрд┐рдП рдЧрдП pr ^^ . рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
3 рдЪреЗрдХрдмреЙрдХреНрд╕ рдореЗрдВ рдЕрд▓рдЧ :)
рдореИрдВ main
рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд▓рдЧрд╛ рд╣реИред рдЯрд░реНрдорд┐рдиреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореМрдЬреВрджрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдореБрдЭреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ "рд╕рдВрдЪрд┐рдд" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ failure::Fail
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Error
рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ Box<Error>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Debug
рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред =)
рд╣рд╛рдп, @nikomatsakis ,
рдЬрдм рдореИрдВрдиреЗ termination_trait
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рддреЛ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реА рд╣реА рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ рдЬреИрд╕реА рдЖрдкрдиреЗ рдХреА рдереАред
рд╕рдВрдХрд▓рдХ рдкрд░ рд╣реИрдХрд┐рдВрдЧ рдкрд░ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЗрд╕ рдорд╣реАрдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдПрдХ рджрд░рд╛рд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде Display
(рдФрд░ рдкрд┐рдЫрд▓реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдореЗрдВ Debug
рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/rust-lang/rust/pull/47544ред (рдпрд╣ рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд░рд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреАрдЖрд░!: рдЯрд╛рдбрд╛ :) :)
рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рд▓реИрдВрдЧ рдЯреАрдо рдПрдХ рдХреЙрд▓ рдХрд░реЗрдЧреА рдХрд┐ рдХрд┐рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдПрдХ рдкреНрд░рд╢реНрди рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рдЕрднреА рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ (рдЪрд╛рд╣реЗ Debug
рдпрд╛ Display
) рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣? (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ред) рдЖрдкрдХреЛ ?
-in- main
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рд╣реИ рдирд╛? рдпрд╣ рдЕрдкрдирд╛ рдкрд░рд┐рдгрд╛рдо рдФрд░/рдпрд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдФрд░/рдпрд╛ impl
рд▓рд┐рдЦрдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ? (рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ ?
-in- main
рдХреЗрд╡рд▓ рдПрдХ рдЦрд┐рд▓реМрдирд╛ рдерд╛, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдЖрдк "рдЧрдВрднреАрд░ рд╣реЛрдирд╛" рдЪрд╛рд╣рддреЗ рдереЗ, рдЖрдкрдХреЛ рдХрдо рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред)
@glaebhoerl рдпрд╣ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИ:
From
рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВредDebug
(рдпрд╛ Display
) рд▓рд╛рдЧреВ рдХрд░реЗрдВредmain
рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдмрджрд▓реЗрдВредрдзрдиреНрдпрд╡рд╛рдж!
Debug
рдХреЗ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдмрдЧрд┐рдВрдЧ-рдЙрдиреНрдореБрдЦ рдирд╣реАрдВ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред
@glaebhoerl рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Result
impl рдХреЛ Debug
IMO рдХреЗ рдмрдЬрд╛рдп Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ message
, рдпрд╛ error_message
рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдирд╛рдордХ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ Debug
/ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ / Display
рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП? рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
@glaebhoerl @Thomasdezeeuw error_message
рд╡рд┐рдзрд┐ рдЬреИрд╕рд╛ рдХреБрдЫ RFC рдХреЗ рдореВрд▓ рдорд╕реМрджреЗ рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдо рд╕рд╣рдорддрд┐ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрд╕ рд╕рдордп рдореЗрд░реА рднрд╛рд╡рдирд╛ рдпрд╣ рдереА рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕реНрдерд┐рд░ рд╣реЛ) рдФрд░ рдлрд┐рд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ред
@zackw рд╕рд╣рдордд, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЗ рдареАрдХ рд░рд╣реВрдВрдЧрд╛, рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛, рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд▓рд┐рдП 0
рдФрд░ 1
рдХрд╣реЗрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Debug
рдпрд╛ Display
рдкрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Termination::message
рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реВрдВред
рдХреНрдпрд╛ рд╡рд╣ message
рд╡рд┐рдзрд┐ String
? рдХреНрдпрд╛ рдпрд╣ Termination
libcore рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?
@SimonSapin Termination
рд╡рд░реНрддрдорд╛рди рдореЗрдВ libstd
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
рд╣рдореНрдо, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ message
рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛ред i32
рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧреА? рдпрд╣ рдХреИрд╕реЗ рддрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рдХрдм рдЫрд╛рдкрдирд╛ рд╣реИ? рд╡рд░реНрддрдорд╛рди рдореЗрдВ Termination
рдХреЗ рд▓рд┐рдП Result
рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, report
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Result
рдЬрд╛рдирддрд╛ рд╣реИ, рдХрд┐ рдпрд╣ рдПрдХ Err
рд╣реИред рд╣рдо рдХрд╣реАрдВ рдПрдХ рдЪреЗрдХ report() != 0
рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред
рдЕрдЧрд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рд╣рдо Result
рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Error
рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╢реНрди Debug
рдпрд╛ Display
рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдЧрд╛ред
рдПрдХ рдФрд░ рд╕рд┐рд░рджрд░реНрдж рдЬреЛ рдЖрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк "рдЧрдВрднреАрд░" рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧреИрд░-рд╢реВрдиреНрдп рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди _anything_ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ ( grep -q
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ) Termination
impl рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ _isn't_ рдПрдХ Error
рд╣реИ, рдЬреЛ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ ... рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк ' рдЙрд╕ рдЪреАрдЬрд╝ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдирд╛ _after_ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ред
рдореИрдВ рдРрд╕рд╛ рд╕реЛрдЪрддрд╛ рд╣реВрдВ:
рд╡рд╛рдкрд╕ Result<T, E>
рдИ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдЗрдВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ "рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджреЗ рдЖрдЙрдЯрдкреБрдЯ" рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЗ рдХреЛ рднреА рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВ Display
рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдо рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреЙрд▓рд┐рд╢ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдкреЗрд╢реЗрд╡рд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕реЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬреИрд╕рд╛ рдХрд┐ @withboats рдиреЗ рдХрд╣рд╛, рд▓реЛрдЧ "рдбрд┐рд╕реНрдкреНрд▓реЗ-рдлреНрд░реЙрдо-рдбреАрдмрдЧ" рдмреНрд░рд┐рдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ E: Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдкреЗрд╢реЗрд╡рд░ рд╕реНрдЯрд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдмрд╣реБрдд рд╣реИрдХреА рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
fn main() -> ProfessionalLookingResult {
...
}
рдФрд░ рдлрд┐рд░ Try
рдХреЗ рд▓рд┐рдП ProfessionalLookingResult
рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдлрд┐рд░ рдЖрдк Terminate
рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рднреА рд╣реЛ:
impl Terminate for ProfessionalLookingResult {
fn report(self) -> i32 {
...
eprintln!("Something very professional here.");
return 1;
...
}
}
рдореИрдВ @nikomatsakis рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ Debug
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЙрд▓рд┐рд╢ рдХрд┐рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП, main
рдореЗрдВ рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢рд╛рдпрдж Try
рдФрд░ Terminate
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред Terminate
рдХрд╛ рдмрд┐рдВрджреБ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреЗрд╢реЗрд╡рд░ рд╕реАрдПрд▓рдЖрдИ) .
рдмреЗрд╢рдХ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд░рд╛рдп рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рд╕реАрдзреЗ main
рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдзрдиреНрдп рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛
fn main() -> i32 {
1
}
рдЬрд┐рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
fn main() -> impl Display {
1
}
рдЗрди рджреЛрдиреЛрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ 0 рдирд┐рдХрд╛рд╕ рдХреЛрдб рдФрд░ println!
рдХреЛ 1 рдХрд╛ Display
рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред
impl<T> Termination for T where T: Display {
fn report(self) -> i32 {
println!("{}", self);
EXIT_SUCCESS
}
}
рдлрд┐рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
impl<T: Termination, E: Debug> Termination for Result<T, E> { ... }
рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ "{:?}"
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде RFC рдореЗрдВ рд╕рдорд╛рди рд╣реИ
рдПрдХ Debug
рдкреНрд░рд╛рд░реВрдкред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрддреНрдкрд╛рджрди рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓рд┐рдЦреЛ:
fn main() -> Result<i32, MyError> { ... }
impl Termination for Result<i32, MyError> { ... }
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдирд┐рд░реНрдгреАрдд рд╣реЛрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВрдЧреЗ ... рддреЛ рд╣рдо рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ @nikomatsakis рд╕реБрдЭрд╛рддрд╛ рд╣реИ
рдФрд░ рд▓рд┐рдЦрд╛:
fn main() -> MyResult { ... }
impl Termination for MyResult { ... }
or, if you want something more general.
impl<T, E> Termination for MyResult<T, E> { ... }
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣реА рдЧрдИ рдмрд╛рддреЛрдВ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рджреГрд╖реНрдЯрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди, рди рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдоред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмрд╣рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Termination
рдХреЗ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА RFC рдореЗрдВ рд╡рд░реНрдгрд┐рдд impl Termination for bool
рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдЧреИрд░-рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рдХреЛрдб рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Results
рдпрд╛ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Termination
рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ ?
рдХреЛ Option
рдкрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ Display
рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред
рдЯреАрдПрд▓; рдбреАрдЖрд░: рдореИрдВ Debug
рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВред
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
рдореИрдВрдиреЗ рдХрд▓ рдФрд░ рдЖрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд╣рд┐рдд рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдВрднрд╡ рдЙрддреНрддрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЦреНрдп рдзрд╛рд░рдгрд╛: рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдРрдк рдЗрд╕ рдирд┐рд░реНрдгрдп рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд/рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред рдореЗрд░реА рд╕реЛрдЪ рдпрд╣ рд╣реИ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдПрдПрдП рдЧреЗрдо рдЯрд╛рдЗрдЯрд▓, рдЖрдИрдбреАрдИ рдпрд╛ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдЬрд░реВрд░рдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореБрдЦреНрдп рд╕рдорд╛рдкреНрддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реЛрдЧреА (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореБрдЦреНрдп)ред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Display
рдХреА рдУрд░ рдореЗрд░рд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдПрдХ рдЫреЛрдЯреЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$ cd foo
bash: cd: foo: No such file or directory
рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдбреНрд╕ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЧрд▓рдд рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрдХреЗрддрдХ рд╣реИред рдореИрдВ рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Terminate
impl рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ ?
рдЖрдЬ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ (рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) ), рдЬрд╣рд╛рдВ рдПрдХ Result
-aware "inner_main ()" рдЕрдХреНрд╕рд░ E рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ " inner_main()
" -рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдЬ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдЖрдХрд╕реНрдорд┐рдХ Display
рд╕реНрд╡рд╛рдж рдХреЗ рдереЗ (рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА Debug
рд╕реНрд╡рд╛рдж рд╕реЗ рдЕрдзрд┐рдХ)ред рдореЗрд░реА рд╕реЛрдЪ рдпрд╣ рдереА рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдРрд╕рд╛ рд╣реА рд╣реИред (рдорддрд▓рдм, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ Display
рдХреА рдУрд░ рдПрдХ рдордЬрдмреВрдд рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдореМрдЬреВрдж рд╣реИ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ 16 рдорд╣реАрдиреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рднреА рдорд┐рд▓рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Display
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╢реБрджреНрдз рдмрдЪрдд рд╣реЛрддреАред
"рдкреНрд░рд╛рдердорд┐рдХ рд▓рд╛рднрд╛рд░реНрдереА рдХреНрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ" рдзрд╛рд░рдгрд╛ рдХреЛ рдзрд╛рд░рдг рдХрд░рддреЗ рд╣реБрдП, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдРрдк рд╣реИрдВ рдЬреЛ рд╕рд╣рд╛рдпрддрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$ git foo
git: 'foo' is not a git command. See 'git --help'.
The most similar command is
log
рддреЛ рдХрдВрд╕реЛрд▓ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рднреА, рдореЗрд░реЗ рд▓рд┐рдП Debug
рдХреЗ рд╕рд╛рде рдЬрд╛рдХрд░ "рдШрд╛рдпрд▓ рд╕рдореВрд╣" рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ Debug
impl рдХреЗ рд╕рд╛рде рдФрд░ 6 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпреЛрдЬрд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдЬреНрдпрд╛рджрд╛ рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рд╕реНрд╡рд╛рд░реНрдереА рд░реВрдк рд╕реЗ, рд╡рд╣ рд╣реИ :)ред
рддреЛ рдореЗрд░реА рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд░рдЦреА рдЧрдИ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Debug
Display
рд╕реЗ рдмреЗрд╣рддрд░ рдФрд░ рдмрджрддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рддрд░рд╣, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ - рдЬреИрд╕реЗ, "рд╣рд╛рдВ, рдпрд╣ рд╡рд╣реА рд╣реИ !!!", рдЯреАрдмреАрдПрдЪред рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рдЙрдореНрдореАрджреЗрдВ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛ... рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬреЛ failure
рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореБрдЭ рдкрд░ рдмрдврд╝реЗрдЧрд╛ред :)
рдиреЛрдЯ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЯрд░реНрдорд┐рдиреЗрдЯрд┐рдпреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛: #48143 ( @bkchr рдХреЗ рдХрд╛рдо рдкрд░ рдирд┐рд░реНрдорд╛рдг)ред
рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реАред рдЗрд╕рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рдЖрдЙрдЯрдкреБрдЯ рдЪрд╛рд╣рд┐рдПред
Termination
рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ Terminate
рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ libstd рдореЗрдВ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реАрдпрддрд╛ рдХреЗ рдмрд╛рджред
@withboats рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдереА рдХрд┐ рдХреНрд░рд┐рдпрд╛ рд▓рдХреНрд╖рдг рдЕрдзрд┐рдХрддрд░ рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣, рдХреНрдпрд╛ рдореИрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрд╛рдЗрдХрд╢реЗрдб рд╕реБрдЭрд╛рд╡ рдлрд┐рд░ рд╕реЗ рддреИрд░ рд╕рдХрддрд╛ рд╣реВрдВ, Exit
?
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд╛рдЗрдХ рд╢реЗрдбрд┐рдВрдЧ: рдпрд╣ рдПрдХ рдПрдХрд▓-рд╡рд┐рдзрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рдирд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж ToExitCode
/ to_exit_code
?
Result
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ ?
рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореВрд▓реНрдп рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд░рдПрдлрд╕реА рдЪрд░реНрдЪрд╛ рдиреЗ рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ _ever_ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЛ inner_main
рдореЗрдВ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕реЗ рдЖрд╕рд╛рди рд▓рдЧ рд░рд╣рд╛ рдерд╛ ...
рд╣рд╛рдВ, рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдврд╛рдВрдЪреЗ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ inner_main
рдкрд░ рдЗрддрдирд╛ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХреЗред
@SimonSapin рдореИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ To
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ terminate
рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рдХрдм рд▓рдХреНрд╖рдг рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд╛рдо рджреЗрдирд╛ рд╣реИред Try
рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрд╛рдЙрдВрдЯрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред)
рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо fn main() -> T
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ T
рдЗрдХрд╛рдИ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрдИ рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо/рд╕реНрдерд╛рди/рд╡рд┐рд╡рд░рдг - рдЕрд╕реНрдерд┐рд░, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЪреАрдЬреЗрдВ рддрдп рдХреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣рд╛рдВ рд╡рд┐рд╡рд░рдг:
https://github.com/rust-lang/rust/issues/48453
рдХреГрдкрдпрд╛ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВ!
terminate
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ report
#$0$#$ рдЕрдзрд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ terminate
, рд▓реЗрдХрд┐рди report
рдЖрдИрдПрдирдЬреА рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рдкрд░реАрдд std::process::exit
рдпрд╣ рд╡рд┐рдзрд┐ рдХреБрдЫ рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ main()
рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдПрдХ рдирд┐рдХрд╛рд╕ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ Result::Err
рдХреЛ stderr рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж)ред
Exit
рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡реЛрдЯред рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдХрд╛рдлреА рд╡рд░реНрдгрдирд╛рддреНрдордХ рдФрд░ рдирд┐рдХрд╛рд╕ рдХреЛрдб/рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ Exit
рд╕реЗ рдЕрдзрд┐рдХ Terminate
рдХреЛ рддрд░рдЬреАрд╣ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдореБрдЦреНрдп рд╕реЗ рд▓реМрдЯрдХрд░ рдЗрдирд╛рдпрдд рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рд░рд╣реЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рдЕрдЪрд╛рдирдХ рдХрдард┐рди рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдЬрд╣рд╛рдВ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rust/issues/48854 рдЬреЛрдбрд╝рд╛ред
рдЕрд░реЗ, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдорд┐рд▓ рдЧрдИ рд╣реИред
?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛рд╡рд░реНрддрдорд╛рди рдореЗрдВ doctests рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
fn main
. рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ//
рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рд╣реИ)fn main
рдорд┐рд▓рд╛, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрдПрдЧрд╛fn main
рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢* рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдореВрд▓ fn main() { }
рдореЗрдВ рд▓рдкреЗрдЯ рджреЗрдЧрд╛#![inner_attributes]
рдФрд░ extern crate
рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рд░рдЦреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдВрджрд░ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛редstd
рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рддреЛ рд░рд╕реНрдЯрдбреЙрдХ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ extern crate my_crate;
рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рднреА рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдЧрд╛редрдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ ?
рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдмрд┐рдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ fn main() { your_code_here(); }
рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ fn main() -> Result<(), Error>
$ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХрд┐ рдирд┐рдпрдорд┐рдд рдХреЛрдб рдореЗрдВ - rustdoc рдХреЛ рд╡рд╣рд╛рдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рдШреЛрд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЯреНрд╡реАрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдмрд╛рд░реАрдХреА рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЖрдХрд╛рд░-рдлрд┐рдЯ-рд╕рднреА рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреНрдпрд╛ fn main() -> impl Termination
рд╕рдВрднрд╡ рд╣реИ?
рдХреНрдпрд╛ fn main() -> impl рдЯрд░реНрдорд┐рдиреЗрд╢рди рд╕рдВрднрд╡ рд╣реИ?
рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрд░реНрде рдореЗрдВ, рд╣рд╛рдБ: https://play.rust-lang.org/?gist=8e353379f77a546d152c9113414a88f7&version=nightly
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ -> impl Trait
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐-рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдХрд╛рд░рдг ?
рдХреЗ рд╕рд╛рде рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: https://play.rust- lang.org/?gist=23410fa4fa684710bc75e16f0714ec4b&version=nightly
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ ?
-in-doctests https://github.com/rust-lang/rfcs/pull/2107 рдЬреИрд╕реЗ fn main() -> Result<(), Box<Debug>> catch { your_code_here(); }
(https:// рд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред github.com/rust-lang/rust/issues/41414#issuecomment-373985777)ред
impl Trait
рд╕рдВрд╕реНрдХрд░рдг рдЕрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдФрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ "рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВ" рд╕рдорд░реНрдерди рдЬреЛ рдХрд┐ rustc ?
desugar рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдбрд░рд╛рд╡рдиреА рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ: рдкрд╕реАрдирд╛_рд╕реНрдорд╛рдЗрд▓: рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рддрднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдЙрдЯрдкреБрдЯ impl Trait
рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ ...
рдУрд╣, рд╡реЗ рдмрд╣реБрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрдЧрд╛ред рдпрджрд┐ рдХреИрдЪ рдмреНрд▓реЙрдХ рдиреЗ рдЙрд╕ рд▓рд┐рдВрдХреНрдб рдЗрд╢реНрдпреВ рдХреА рддрд░рд╣ рдУрдХреЗ-рд░реИрдкрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░ рджреА рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди (рдФрд░ рдмрд╣реБрдд рддреЗрдЬ, рд╕реНрдерд┐рд░реАрдХрд░рдг-рд╡рд╛рд░) рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рд░рд╛рд╕реНрддрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдХреНрд░рдордг рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ 2018 рдХреЗ рдпреБрдЧ рдореЗрдВ catch
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ? Rustdoc рд╕рдВрднрд╡рддрдГ рдЙрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ рдЬрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╡рд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдпреБрдЧ рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрднреА рднреА ICE: https://github.com/rust-lang/rust/issues/48890#issuecomment -375952342
fn main() -> Result<(), &'static str> {
Err("An error message for you")
}
assertion failed: !substs.has_erasable_regions(), librustc_trans_utils/symbol_names.rs:169:9
https://play.rust-lang.org/?gist=fe6ae28c67e7d3195a3731839d4aac84&version=nightly
рд╣рдо рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд╣рддреЗ рд╣реИрдВ "рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП"? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╕реНрдерд┐рд░ рдЪреИрдирд▓ рдХреЛ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рднреНрд░рдо рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред
@frewsxcv рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдИ рд╣реИрдВ, рд╣реИ рдирд╛?
@nikomatsakis рдореИрдВрдиреЗ https://github.com/rust-lang/rust/issues/48389 рдореЗрдВ рдЬреЛ рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛ рдерд╛, рдЙрд╕реЗ 1.26-рдмреАрдЯрд╛ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рдВ рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗред
рд╣рд╛рдБ, рдореИрдВ рдЬрд┐рд╕ ICE рдХреЛ рд▓реЗрдХрд░ рдЪрд┐рдВрддрд┐рдд рдерд╛ рд╡рд╣ рдЕрдм рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ!
рдПрдХ рдРрд╕реЗ рдмрд┐рдВрджреБ рдкрд░ рдЪрд┐рд▓реНрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдпрдж рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡рд╣рд╛рдВ рдерд╛ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдкрдврд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзрд╛рдЧрд╛ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рд╣реЛрдЧреАред :-)
TL; DR - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛ Debug
рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдирд╛ рдПрдХ рдЧрд▓рддреА рдереА, рдФрд░ рдпрд╣ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ Display
рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
рдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдореВрд▓ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐, рдЬреЛ рдХреЛрдИ _рд░реВрд╕реНрдЯ_ рдореЗрдВ _рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдХрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдпрд╛рдж рдирд╣реАрдВ рдЖрддреА рдХрд┐ $#$ Error
$#$ рдХрд╛ Debug
рд╕рдВрджреЗрд╢ рдХреНрдпрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рддреНрд░реБрдЯрд┐ рдХрд╛ Debug
рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдЬрдм рдЖрдк рдПрдХ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Debug
рд╕рдВрджреЗрд╢ рдХреА рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдВрдиреЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдХрд┐рд╕реА рднреА рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЬрдВрдЧ рдорд╛рди рдХрд╛ рдбреАрдмрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЖрдо рддреМрд░ рдкрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдмрд┐рдВрджреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЙрдЪрд┐рдд рд▓реЛрдЧ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдореЗрд░реА рд░рд╛рдп рдХрд╛ рдХреБрдЫ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЛрдб рдЖрдкрдХреЛ рдПрдХ рдмрдЧ (рдлрд┐рд░ рд╕реЗ, рдЖрдИрдПрдордУ) рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Debug
рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдХрд░, рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЦрд░рд╛рдм рдЕрднреНрдпрд╛рд╕ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд░рд╕реНрдЯ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛ Display
рднреА рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИ io::Error
ред рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рдмрд┐рдирд╛ io::Error
рджрд┐рдЦрд╛рдирд╛ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ/рдЦреЛрд▓рдиреЗ/рдмрдирд╛рдиреЗ рд╕реЗ рдЖрдпрд╛ рд╣реИ) рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Debug
рддреНрд░реБрдЯрд┐ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдЪреБрдирд╛рд╡ рдХрд░рдХреЗ, рд╣рдордиреЗ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрди рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдХрдард┐рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред (рдЗрд╕рдХреЗ рдКрдкрд░, Debug
рдХрд╛ io::Error
рдЕрдкрдиреЗ Display
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рджрд░реНрдж рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИред )
рдЕрдВрдд рдореЗрдВ, рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рднреА рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рддрд╣рдд рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рднреА ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рдореИрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ:
use std::error::Error;
use std::process;
fn try_main() -> Result<(), Box<Error>> {
// do stuff with `?`
}
fn main() {
if let Err(err) = try_main() {
eprintln!("{}", err);
process::exit(1);
}
}
рдЗрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░, рдЗрд╕реЗ ?-in-main
рд╕реЗ рдмрджрд▓рдирд╛ _lovely_ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ Display
рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ) ) рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рд░ рдЬрдЧрд╣ unwrap
рдЫрд┐рдбрд╝рдХреЗ рдмрд┐рдирд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд░рд╕реНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рд╕реЗ рдкреАрдЫреЗ рд╣рдЯ рдЧрдпрд╛ рд╣реВрдВ: рдЕрдм рдореИрдВ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЕрдиреБрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред
"рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рдХрд╛ рдкреИрдЯрд░реНрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреЙрд▓рд┐рд╢ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ ?-in-main
рдиреЗ Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдЬ ripgrep рдореЗрдВ main
рдФрд░ run
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
https://github.com/BurntSushi/ripgrep/blob/64317bda9f497d66bbeffa71ae6328601167a5bd/src/main.rs#L56 -L86
рдмреЗрд╢рдХ, рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ ?-in-main
Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдмрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╕рд┐рд░реНрдл main
рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдореЗрд░реЗ рдкрд╛рд╕ impl
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХреЗрдВ, рдФрд░ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рдЖрдЬ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВ ( main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдПрдХ try_main
)ред
рджреЗрдЦрдиреЗ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдпрд╣ рдХреЛрдб рдЖрдЬ рдЬрдВрдЧ рд╕реНрдерд┐рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
#[derive(Debug)]
struct OnlyDebug;
fn main() -> Result<(), OnlyDebug> {
Err(OnlyDebug)
}
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Display
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдХреЛрдб рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрдХреНрдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ! рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрд╣рд╛рдЬ-рд╕реЗ-рдиреМрдХрд╛рдпрди рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдХрд╣рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдпрд╣ рднреА рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдУрд╡рд░рд░рд┐рдПрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдореБрдЭрд╕реЗ рдкреВрдЫрд╛ рд╣реИ "рдЖрдк ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?" рдореЗрд░реЗ рд╕реАрдПрд╕рд╡реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдФрд░ рдореЗрд░рд╛ рдЬрд╡рд╛рдм рдореВрд▓ рд░реВрдк рд╕реЗ рд░рд╣рд╛ рд╣реИ, "рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА рдЬрд┐рд╕реЗ ?-in-main
рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣ рдкреНрд░рднрд╛рд╡ рдерд╛ред рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде , рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдбреЙрдХреНрдЯрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред)
рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Display
рдХреЛ Debug
$ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕реАрдПрд▓рдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ Debug рдХреЗ рдмрдЬрд╛рдп Debug
Display
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ?
-ed рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ ?-in-main
рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рддреЛ Debug
рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
#[unstable(feature = "termination_trait_lib", issue = "43301")]
impl<E: fmt::Display> Termination for Result<!, E> {
fn report(self) -> i32 {
let Err(err) = self;
eprintln!("Error: {}", err);
ExitCode::FAILURE.report()
}
}
рдЕрдВрдд рдореЗрдВ, рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рднреА рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рддрд╣рдд рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рднреА ?-in-main рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ @ рдмрд░реНрдирдЯрд╕реБрд╢реА рд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдЦрд┐рд▓реМрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?
?-рдЗрди-рдореЗрди рдХреЗ рд╕рд╛рде рд▓рдХреНрд╖реНрдп рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдпреВрдирд┐рдбрд╛рдпрдореИрдЯрд┐рдХ рдХреЛрдб рд╕реЗ рдмрдЪрдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдЕрдирдкреНрд░реЗрдкреНрд╕ред рд▓реЗрдХрд┐рди рдЕрдЧрд░?-рдЗрди-рдореЗрди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкреВрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрдордЬреЛрд░ рдХрд░ рджреЗрддрд╛ рд╣реИред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдореЗрдВ рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝реЗред
рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд▓рдЧрд╛ рд╣реИред рдЯрд░реНрдорд┐рдиреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореМрдЬреВрджрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдореБрдЭреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ "рд╕рдВрдЪрд┐рдд" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдлрд▓рддрд╛ :: рд╡рд┐рдлрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдореИрдВ Box . рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
, рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдбреАрдмрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред =)
рдпрджрд┐ рд╣рдо Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MainError
рдЬреИрд╕реЗ рддреЗрдЬрд╝ рдФрд░ рдЧрдВрджреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
pub struct MainError {
s: String,
}
impl std::fmt::Display for MainError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.s.fmt(f)
}
}
impl<T> From<T> for MainError where T: std::error::Error {
fn from(t: T) -> Self {
MainError {
s: t.to_string(),
}
}
}
рдпрд╣ Box<Error>
рдХреЗ рд╕рдорд╛рди рдиреАрдЪреЗ рдХреА рддрд░рд╣ рдХреБрдЫ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
fn main() -> Result<(), MainError> {
let _ = std::fs::File::open("foo")?;
Ok(())
}
рдбрд┐рд╕реНрдкреНрд▓реЗ рдмрдирд╛рдо рдбреАрдмрдЧ рдХреА рдкрд┐рдЫрд▓реА рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ рдЫрд┐рдкреЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╣реИ, рдЬреЛ https://github.com/rust-lang/rust/issues/43301#issuecomment -362020946 рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИред
@ рдмрд░реНрдирдЯрд╕реБрд╢реА рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдпрджрд┐ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
use std::fmt;
struct DisplayAsDebug<T: fmt::Display>(pub T);
impl<T: fmt::Display> Debug for DisplayAsDebug {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(&self.0, f)
}
}
impl<T: fmt::Display> From<T> for DisplayAsDebug {
fn from(val: T) -> Self {
DisplayAsDebug(val)
}
}
рдЕрдЧрд░ рдпрд╣ std::fmt
рдореЗрдВ рд╣реЛрддрд╛, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рдереЗ:
use std::{fmt, io};
fn main() -> Result<(), fmt::DisplayAsDebug<io::Error>> {
let mut file = File::open("/some/file")?;
// do something with file
}
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдФрд░ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ ?
рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЧрдВрднреАрд░ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореВрд▓ рдорд╕реМрджреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдереАрдВ RFC рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдерд╛ред рд╡реГрджреНрдзрд┐рд╡рд╛рдж рдХреЗ рдирд╛рдо рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЙрди рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдЕрд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдареАрдХ рд╣реИ рдпрджрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рд╕реНрдерд┐рд░ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реЛред
рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рд░рд╕реНрдЯ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рдХрд╛рдо рдкрд░ рд░рд╕реНрдЯ рд╢реИрд▓реА рдХрд╛ рдкреНрд░рднрд╛рд░реА рд╣реИ, рдореИрдВ рдпрд╣рд╛рдБ @burntsushi рд╕реЗ рдмрд╣реБрдд рд╕рд╣рдордд рд╣реВрдБред рдореИрдВ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЦреБрд╢реА-рдЦреБрд╢реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ред
рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрдЧ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП Debug
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рдХреЗрд╡рд▓ unwrap
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдореЗрдВ рднреА, рдореИрдВ рдХрднреА рднреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ main
рд╕реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдХрд╛рдо рдкрд░ рдирдП рд░рд╕реНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╣рдореЗрдВ quick_main!
рдпрд╛ рд╕рдордХрдХреНрд╖ рдХреЛ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдмрд╣реБрдд рд╣реА рдПрдХрдорд╛рддреНрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдЬрд╣рд╛рдБ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ, рд╡рд╣ рд╣реЛрдЧреА unwrap
рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдпрджрд┐ рд╣рдо
Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПMainError
рдЬреИрд╕реЗ рддреЗрдЬрд╝ рдФрд░ рдЧрдВрджреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЯрд┐рд▓рддрд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдХрд┐ ?
-in- main
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИред
@Aaronepower :
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ stdlib рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ) рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЯрд░реНрдорд┐рдиреЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдФрд░ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдбреАрдмрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рдЕрдЧрд░ рдпрд╣ рдореБрдЭреЗ fn main() -> Result<(), failure::Error>
рд▓рд┐рдЦрдиреЗ рдФрд░ Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдЪреНрдЫреА, рдорд╛рдирд╡-рдкрдардиреАрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореЗрд░реА рдкреНрд░рдореБрдЦ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдмреИрдХрдЯреНрд░реЗрд╕ рдХреЛ failure::Error
рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ рдЬрдм RUST_BACKTRACE=1
рд╕реЗрдЯ рд╣реЛ - рд▓реЗрдХрд┐рди рдпрд╣ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡реИрд╕реЗ рднреА, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдореБрджреНрджрд╛ рдЬреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП failure
рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Result
рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ - рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ - рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдордп, рд╣рдордиреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдереА рдХрд┐ рдЖрдк рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореБрдЭреЗ рдЕрдм рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреАрдердм рдореБрдЭрд╕реЗ рдЪреАрдЬреЗрдВ рдЫреБрдкрд╛ рд░рд╣рд╛ рд╣реИ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ "рдЖрд╡рд░рдг" рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП From
рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
struct PrettyPrintedError { ... }
impl<E: Display> From<E> for PrettyPrintedError { }
impl Debug { /* .. invoke Display .. */ }
рдЕрдм рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк ?
рдореЗрдВ main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
fn main() -> Result<(), PrettyPrintedError> { ... }
рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд-рдХреНрд▓реА рдпрд╛ рдХреБрдЫ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
@nikomatsakis рд╣рд╛рдБ, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЗрд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ" рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ ?-in-main
рдХреЛ рдХрдордЬреЛрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП quicli
рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдереЛрдкрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ Display
рдЖрдЙрдЯрдкреБрдЯ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛ рдбрд┐рдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдордиреЗ рд░рдЦрддреЗ рд╣реИрдВред
?-in-main
рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд ~4-рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Display
рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ (рдбреЙрдХреНрдЯрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдпрд╛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд╣рд░, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реНрдпреБрдХреНрдд)ред
рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
@BurntSushi рдЖрдк std
рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рдордХрд╛рдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ main()
рдкрд░ рдХреЗрд╡рд▓ рдереЛрдбрд╝реА рджреЗрд░ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рд▓рд┐рдЦрдиреА рд╣реЛрдЧреА?
@Kixunil рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
@рдмрд░реНрдирдЯрд╕реБрд╢реА
?-in-main
рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд ~4-рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рд╣реИред
рдЕрдВрддрддрдГ, рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдерд┐рд░ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реБрджреГрдврд╝рддрд╛ рдЙрд▓реНрд▓рдВрдШрди рдпрд╛ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рд╣реИред)
рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯрдЕрдк рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдФрд░ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ Display
, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдк "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрд╛рдиреА, рдпрд╛ рддреЛ рд╕реЗрдЯрдЕрдк рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдиреНрдп рд╡рд┐рднрд┐рдиреНрди newtypes рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрд╕рд▓рд┐рдП рдпрд╛ рддреЛ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ "рдХреНрд╡рд┐рдХ-рдПрди-рдбрд░реНрдЯреА" рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ Debug
рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рдкреЙрд▓рд┐рд╢реНрдб рдПрдВрдб рдкреНрд░реЛрдбрдХреНрдЯреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреЙрд▓рд┐рд╢ рдЕрдВрдд рдЙрддреНрдкрд╛рдж рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЬрд╣рд╛рдВ рдореИрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рд╕реЗ рдЪреБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХреНрдпрд╛ рдореИрдВ argv рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ [0], рдЖрджрд┐)ред
рдЕрдзрд┐рдХ рдареЛрд╕ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
use failure::format::JustError;
fn main() -> Result<(), JustError> { .. }
рдпрд╛, рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдореИрдВ рдпрд╣ рдХрд░рддрд╛ рд╣реВрдВ:
use failure::format::ProgramNameAndError;
fn main() -> Result<(), ProgramNameAndError> { .. }
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП 4-рд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреЗ рджреЛрдиреЛрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВ:
use std::sys;
fn main() {
match inner_main() {
Ok(()) => { }
Err(error) => {
println!("{}", error);
sys::exit(1);
}
}
fn inner_main() -> Result<(), Error> {
...
}
рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рддрдм рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрддреНрдкрд╛рджрди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рджрд┐рд╢рд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ panic!
, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧ рдЧреБрдгрд╡рддреНрддрд╛ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
@nikomatsakis рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рджрд┐рди std
рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВ рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдУрд╡рд░рд╣реЗрдб рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред :-)
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреЛрдЯ: рдореИрдВрдиреЗ рдЕрдкрдиреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣рд╛рдВ "рдХреНрдпрд╛ рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдХреЗ рдмрдЬрд╛рдп "рдЪрд▓реЛ рдХреБрдЫ рдРрд╕рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ" рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд▓рдХреНрд╖реНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХреБрдЫ рдорд╛рдВрдЧрддреЗ рд╣реИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред :-)
рдЦреИрд░ рдЗрд╕рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛: https://crates.io/crates/exitfailure
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХрд┐рддрдиреЗ рд▓реЛрдЧ Debug
рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдо Display
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░реНрдЪрд╛ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЕрдВрддрд┐рдо RFC рджреЛрдиреЛрдВ Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреНрд░рднрд╛рд╡ рд╡рд┐рд╢реЗрд╖рддрд╛ рдШрдЯрдирд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЪреАрдЬ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реА рдорд┐рд▓ рд░рд╣реА рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реИрдВ, рд╡реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдИ рдмрдбрд╝рд╛ рдмреИрдХрд╕реНрд▓реИрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
@WiSaGaN RFC рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдордп-рд╕рдордп рдкрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рдФрд░ рд╕реНрд╡рд╕реНрде рд╣реИред RFC рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИрдВ рдФрд░ рдЬреЛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдЧрд╛ рдЙрд╕рдХрд╛ рд╕рд╣реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред рд╕реВрдЪрдирд╛ рдХреА рдЦреЛрдЬ рдХрдард┐рди рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@nikomatsakis рддреНрд╡рд░рд┐рдд-рдПрди-рдЧрдВрджреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ: .unwrap()
ред рддреЛ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, ?
рддреНрд╡рд░рд┐рдд-рдЧрдВрджреА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдкреЙрд▓рд┐рд╢ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ рдЬрд╣рд╛рдЬ рд░рд╡рд╛рдирд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рдЦрд░рд╛рдм рд╣реЛ рдЧрдП рд╣реИрдВред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓рддреЗ рд╣реБрдП рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
@Kixunil , unwrap
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо $# main
#$ рдореЗрдВ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред . рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП ?
рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЭрд┐рдЭрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛) рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ ?
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдпрд╣ рдореБрджреНрджрд╛ рдПрдХ рд╣реИ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ IMHO рдЬреАрддреЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдЪреНрдЫреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЖрдк рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреАрдЬреЗрдВ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд┐ рдЖрдкрдХреЛ main
рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдмрд╣реБрдд рд╣реА рддреНрд╡рд░рд┐рдд рдЕрд╣рд╕рд╛рд╕ рд╣реЛрдЧрд╛ред
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛ"рдХреНрдпреЛрдВ" рдХреА рдмрд╛рдд рд╣реИ рддреЛ рд╣рдо ?
рдореЗрдВ main
рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЕрдм рдХрд┐рддрдирд╛ рдЕрдЬреАрдм рд╣реИред рдЖрдк рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ)ред main
рдлрд╝рдВрдХреНрд╢рди рддрдм рдереЛрдбрд╝реЗ рд╡рд┐рд╢реЗрд╖ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
.unwrap()
рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд░рдЪрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдЖрдк main()
рдХреЗ рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рдХреЛрдб рдХрд╛ рдХрд╛рд░рдХ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рддреБрд▓рдирд╛ рдХрд░рдХреЗ, ?
рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЧрдВрджрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд░рдЪрдирд╛ рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдЗрд╕реЗ рдЬрд▓реНрджреА-рдФрд░-рдЧрдВрджрд╛ рдирд╣реАрдВ рдмрдирд╛рдирд╛ main()
рдкрд░ рд╕рд╣реА рд░рд┐рдЯрд░реНрди-рдкреНрд░рдХрд╛рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдирд╣реАрдВ рдХреЛрдб рдХреЛ рд╣реА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ред
@ рд╕реНрдХреНрд░реВрдЯрд╛рдкреЗрд▓реЛ рдЖрд╣, рдЕрдм рдпрд╣ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд░реИрдкрд░реЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП ?
рдореЗрдВ main
рд▓рд╛рдирд╛ рдерд╛ ... рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдореИрдВ рдирд╣реАрдВ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд▓рд╛рдн рджреЗрдЦреЗрдВ рдФрд░ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ .unwrap()
рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВрдЧреЗред
@oblitum рдпрд╣ рд╕рд┐рд░реНрдл рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ) Display
рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╣ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рднреА рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╣реАрдВ рднреА рдЬрд┐рд╕рдХреА рдЖрдк рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ .unwrap
рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдЪреНрдЫрд╛" рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ ?
main
рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @nikomatsakis рдиреЗ рдКрдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗрд╕ рдХреЗ рд▓рд┐рдП stdlib
рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
#[must_use]
struct DisplayResult<E: fmt::Display>(Result<(), E>)
impl<E> Termination for DisplayResult<E> {
// ... same as Result, but use "{}" instead of "{:?}"
}
impl<E> From<Result<(), E>> for DisplayResult<E> {}
impl<E> Deref<Result<(), E>> for DisplayResult<E> {}
impl<E> Try for DisplayResult<E> {}
// ...
рдЗрд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП:
fn main() -> DisplayResult<MyError> {
// Ordinary code; conversions happen automatically via From, Try, etc.
}
рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛рдПрдБ рд╣реИрдВ:
?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдлреЙрд▓реЛ-рдЕрдк: рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ ?
рдФрд░ From
рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ ?
рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ From
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ Try
рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╛рдиреА рдпрд╣ Result<?, io::Error>
рд╕реЗ Result<?, FromIoError>
рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ Result<?, Err>
рд╕реЗ DisplayResult<Result<?, Err>>
рд╣реЛред рдЕрд╕рд▓ рдореЗрдВ, рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ:
fn main() -> DisplayResult<io::Error> {
let f = io::File::open("path_to_file")?;
let result = String::new();
f.read_to_string(result)?
}
рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ Cargo.toml рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдзреНрд╡рдЬ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
@Lucretiel : рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдирд┐рдХрд╛рд╕ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЧреИрд░-рддрдХрдиреАрдХреА рдбреЗрд╕реНрдХрдЯреЙрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд▓рдВрдмрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдбреЗрдореЙрди рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ 'рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА' рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд┐рдирд╛ рд╕рдореНрдореЛрд╣рдХ рд╕рд╛рдХреНрд╖реНрдп (рдЬреИрд╕реЗ рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдмрд┐рдирд╛ рди рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рд╡рд╣рд╛рдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ Result<(), E> where E: Error
рд╕реЗ main
рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рд╛рдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░, рдЬреЛ Debug
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд┐рдВрдЯ рд╣реИ, "рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдирд┐рдХрд╛рд╕ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ" рд╣реИред
рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд╕рд╣рдорддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреБрдЫ рдХреЛ stderr рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдореБрдЦ рдирд┐рд░реНрдгрдп рд╣реИрдВ "рдХреНрдпрд╛ рдЗрд╕реЗ "{}"
рдпрд╛ "{:?}"
, рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдХрд┐рддрдирд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА"ред
@Lucretiel , рдореЗрд░реЗ рд▓рд┐рдП Result
рд▓реМрдЯрдиреЗ рдХрд╛ рдореВрд▓реНрдп рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХреБрдЫ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреИрдирд┐рдХ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдП? рдХреЗрд╡рд▓ рдпрд╣ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рдХреЛ stderr рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рднреА рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реИ (рдмреИрдХрдЯреНрд░реЗрд╕, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рдЖрджрд┐?) рджреЗрдЦреЗрдВ https://github.com/rust-lang/rust/issues/43301#issuecomment -389099936, espред рдЕрдВрддрд┐рдо рднрд╛рдЧред
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдФрд░ рдХрд╛рдордирд╛ рдХреА рдХрд┐ рдЗрд╕реЗ Display
рдХрд╣рд╛ рдЬрд╛рдПред рдмрд╣реБрдд рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдордиреЗ рдпрд╣рд╛рдВ рдЧрд▓рдд рдХреЙрд▓ рдХрд┐рдпрд╛ рд╣реИред
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдЬреЛ рдореИрдВрдиреЗ рдиреЛрдЯрд┐рд╕ рдХреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рд▓реИрдВрдЧ рдЯреАрдо (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рдХреЛ рдФрд░ рдЖрдИ) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рди рдХрд┐ libs рдЯреАрдо, рд▓реЗрдХрд┐рди рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд╕рдЯреАрдбреА рдореЗрдВ рд░рд╣рддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ libs рдиреЗ рдмреЗрд╣рддрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ред
@withboats рдХреНрдпрд╛ рдмрджрд▓рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрднреА рднреА рдХреЗрд╡рд▓ рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди/рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдерд┐рд░реАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреАрдЫреЗ рдХреА рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред
рдЬрдм рдЯреАрдо рдиреЗ рдореБрдЭреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ Display
рд╕реЗ Debug
рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рддреЛ рдореИрдВ рднреА рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рд╡рдХреАрд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХрд╛ рдЦреЗрдж рд╣реИред
@Lucretiel Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рд╣реА ( Termination
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди main
/tests рд╕реЗ рд▓реМрдЯрд╛ рд░рд╣реА рд╣реИ) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реИред
рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдирд╛рдо рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд┐рдХрдЯ рдпрд╛ рд╕рдордпрд░реЗрдЦрд╛ рд╣реИ?
@xfix рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд╣реИ рдирд╛? рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ ( Termination
main
рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛), рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрд╡рдпрдВ рд╕реЗ рдмрджрд▓ рдЬрд╛рдПрдЧреА:
impl<E: Debug> Termination for Result<(), E> ...
рдкреНрд░рддрд┐:
impl<E: Display> Termination for Result<(), E> ...
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд╣реИ рдирд╛?
рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдирд╣реАрдВред рдпрд╣ рдХреЛрдб рдЖрдЬ рдХреЗ рд╕реНрдерд┐рд░ рд░рд╕реНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
#[derive(Debug)]
struct X;
fn main() -> Result<(), X> {
Ok(())
}
Display
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрдХрд▓рди рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреА рддрд░рд╣ рдХреБрдЫ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреА рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ Display
рдФрд░ Debug
рджреЛрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛рдиреА рдРрд╕рд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рд╣реИ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд╣реИ)ред
trait ResultTerm {
fn which(&self);
}
impl<T: Debug> ResultTerm for T {
default fn which(&self) {
println!("{:?}", self)
}
}
impl<T: Debug + Display> ResultTerm for T {
fn which(&self) {
println!("{}", self)
}
}
enum MyResult<T, E> {
Ok(T),
Err(E),
}
impl<T, E> Termination for MyResult<T, E>
where
E: ResultTerm,
{
fn report(self) -> i32 {
match self {
MyResult::Err(e) => {
e.which();
1
}
_ => 0,
}
}
}
рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди
рдпрд╣ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдЖрд╣, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдерд┐рд░ рдЬрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛ред
рдХреНрдпрд╛ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╛рд░реНрдЧреЛ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдЬреИрд╕реЗ panic = "abort"
ред
рд╢рд╛рдпрдж? рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдПрдХ рдЕрдиреНрдп рдЬрдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ ?
рдореЗрдВ main
рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╢рд╛рдпрдж 2018 рдирд╣реАрдВ, рд╢рд╛рдпрдж 2021?
рдПрдХ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░реЗрдЯ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХ рд╣реА std
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП std
рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд▓рдХреНрд╖рдг рдФрд░ рдЙрдирдХреЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдВ рдЗрд╕рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ) рдореЗрдВ рджреЛ рд▓рдХреНрд╖рдг рд╣реИрдВ, Termination
рдФрд░ Termination2
, рдФрд░ рдПрдХ рдпрд╛ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП main()
рдХреЗ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЕрдиреНрдп рдЯреЛрдХрд░рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ main()
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдХрдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ @Aaronepower рдХреА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЗрд╡рд▓ рддреНрд╡рд░рд┐рдд-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдбреАрдмрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ) рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрд╛рджрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рд▓рд╛рдн рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @shepmaster рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдПрдЧрд╛:
рдХрд┐рд╕реА рдХреЛ рдмрд┐рдВрджреБ 2 рдкрд░ рдЖрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдбреАрдмрдЧ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗ; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдирд┐рдХреЛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЬреЛ рд╢рд╛рдпрдж рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЬрд╛рдиреЗ рдкрд░ рднреА рдЦреЛрдЬ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ)ред
рдмрд┐рдВрджреБ 3 рдХреЗ рд▓рд┐рдП, рдпрд╣ рдереЛрдбрд╝рд╛ рдЬрд╛рдирджрд╛рд░ рд╣реИ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ 1.0 рдореЗрдВ trait Display: Debug
рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛?), рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рдЧрдИ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдердкреНрдкрдбрд╝ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдПрдХ рдПрдХрд▓ рд╡реНрдпреБрддреНрдкрдиреНрди (рдЬреЛ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рд╡реИрд╕реЗ рднреА рд╣реИ ... рдХреНрдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рд╣реИ рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдЕрдкрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдХрд╛рд░ рдкрд░ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ?)
рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рддреНрд╡рд░рд┐рдд-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдбреАрдмрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ)
рдПрдХ рдорд╛рдорд▓рд╛ рдЬрд╣рд╛рдВ Display
Debug
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Debug рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ &'static str
рдпрд╛ String
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ #[derive(Debug)]
рдердкреНрдкрдбрд╝ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд░ рдХреБрдЫ рдЧреИрд░ рддреБрдЪреНрдЫ рдКрд░реНрдЬрд╛ рдЦрд░реНрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@SimonSapin рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИ, рдпрд╛ рдпрд╣ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ Display
рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдмрд┐рдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП Debug
рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рд░реВрдк рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ Err("тАж")
рд╣реЛрдиреЗ рд╕реЗ рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪреБрди рд╕рдХрддрд╛ рд╣реВрдВ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
FWIW рдЬреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реИ рд╡рд╣ Result<_, E>
рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ E
рдорд╛рди рдЕрдВрджрд░ рд╣реИред рддреЛ рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ Err(
рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреЛрдб рдПрдХ Error:
рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рдд: рдпрджрд┐ Display
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рд░рд╣реЗрдЧрд╛ред рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рди рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, Display
рднреА рдмреИрдХрд╕реНрд▓реИрд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╡рд╛рдВрдЫрдиреАрдп IMO рд╣реИ рдЬрдм рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ (рддреНрд░реБрдЯрд┐) рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╣рдо рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЪреАрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реИ рдЬреЛ Display
impl рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $# Display + Debug
0$#$ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ Debug
рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рд╣рдо рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди impls рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдПрд╕рдЯреАрдбреА рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдЗрдореНрдкреНрд▓рд╛рдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╡рд░реНрддрдорд╛рди рдиреАрддрд┐ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдирд┐рдпрдо рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдПрд╕рдЯреАрдбреА рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╕реНрд╡рдпрдВ рдПрдХ рдЕрд╕реНрдерд┐рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ)ред рдХреНрдпрд╛ рд╣рдо рдЕрдм рдЗрд╕ рдЬрд╛рдЧрд░реВрдХрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рджрд┐рди рдпреЗ рдкреНрд░рдХрд╛рд░ рдЕрдкрдиреЗ Debug
рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ рдпрджрд┐ рд╣рдо рдЕрдВрддрддрдГ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рдЗрд╕ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╕реНрд╡рд╕реНрдерддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ!
use std::cell::Cell;
use std::fmt::*;
struct Foo<'a, 'b> {
a: &'a Cell<&'a i32>,
b: &'b i32,
}
impl<'a, 'b> Debug for Foo<'a, 'b> {
fn fmt(&self, _: &mut Formatter) -> Result {
Ok(())
}
}
impl<'a> Display for Foo<'a, 'a> {
fn fmt(&self, _: &mut Formatter) -> Result {
self.a.set(self.b);
Ok(())
}
}
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЙрд╕рдХреЗ рдХрд╛рд░рдг рдореИрдВ report
рдХреЛ Foo<'a, 'b>
$ рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ 'b
'a
рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЖрдЬреАрд╡рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж Display
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдЕрдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рддреНрд╡рд░рд┐рдд "рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдмрд╕ unwrap()
рд╕рдм рдХреБрдЫ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ 100 рдЧреБрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмреИрдХрдЯреНрд░реЗрд╕ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдпрджрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ let ... = File::open()
рд╣реИ, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдирд╣реАрдВ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рдлрд▓ рд╣реБрдЖред
рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рддреНрд╡рд░рд┐рдд "рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдмрд╕
unwrap()
рд╕рдм рдХреБрдЫ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ 100 рдЧреБрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмреИрдХрдЯреНрд░реЗрд╕ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдпрджрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░let ... = File::open()
рд╣реИ, рддреЛ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдирд╣реАрдВ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд┐рдлрд▓ рд╣реБрдЖред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ Display
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ map_err
рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдЕрдиреНрдп рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд▓рдд рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрдо рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред
@ рдХрд┐рдХреНрд╕реБрдирд┐рд▓ : рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд░рдгрдиреАрддрд┐ рдФрд░/рдпрд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░/рдпрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЖрд░рдПрдлрд╕реА рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдХреЛ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░! :рдореБрд╕реНрдХреБрд░рд╛рдУ:
рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирдЬрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рддреНрд░реБрдЯрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ:
use std::error::Error;
impl<E: fmt::Debug> Termination for Result<!, E> {
default fn report(self) -> i32 {
let Err(err) = self;
eprintln!("Error: {:?}", err);
ExitCode::FAILURE.report()
}
}
impl<E: fmt::Debug + Error> Termination for Result<!, E> {
fn report(self) -> i32 {
let Err(err) = self;
eprintln!("Error: {:?}", err);
for cause in Error::chain(&err).skip(1) {
eprintln!("Caused by: {:?}", cause);
}
ExitCode::FAILURE.report()
}
}
impl<T: Termination, E: Display> Termination for Result<T, E> {
fn report(self) -> i32 {
match self {
Ok(val) => val.report(),
Err(ref err) => {
print_diagnostics_for_error(err);
EXIT_FAILURE
}
}
}
}
рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрд░рдПрдлрд╕реА рдХрд╛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?
рд╣рдордиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓рдХреНрд╖рдгреЛрдВ рдФрд░ рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рдЯреАрдХ рд╕реЗрдЯ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рд╣реИрдВ, рдореБрдЭреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рд╡рд░рдг рдпрд╛рдж рдирд╣реАрдВ рд╣реИ - рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╡рд░рдг рдмрд╛рдХреА рд╣реИрдВред рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рдореБрджреНрджреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╕реНрдерд┐рд░реАрдХрд░рдг рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХрд╛ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ?
@ рдЧреНрд░реЗрдЬреИрдХ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рдордп рдкрд╣рд▓реЗ рдЙрддрд░рд╛ рдерд╛ред
рд╕рдЪ рд╣реИ, рдФрд░ рдореИрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛, рдореИрдВ Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд▓рд┐рдВрдХ рд╕реЗ рдпрд╣рд╛рдВ рдЖрдпрд╛ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫ рд░рд╣рд╛ рдерд╛, рдХреНрдпрд╛ termination_trait_lib
рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
Termination
рдХреЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдЦреБрд▓реА рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рдРрд╕реЗ рдмрд┐рдВрджреБ рдкрд░ рдЪрд┐рд▓реНрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдпрдж рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡рд╣рд╛рдВ рдерд╛ рддреЛ рдореИрдВ рдпрд╣рд╛рдВ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдкрдврд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзрд╛рдЧрд╛ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рд╣реЛрдЧреАред :-)
TL; DR - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛
Debug
рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдирд╛ рдПрдХ рдЧрд▓рддреА рдереА, рдФрд░ рдпрд╣ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗDisplay
рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛редрдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдореВрд▓ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐, рдЬреЛ рдХреЛрдИ _рд░реВрд╕реНрдЯ_ рдореЗрдВ _рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдХрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдпрд╛рдж рдирд╣реАрдВ рдЖрддреА рдХрд┐ $#$
Error
$#$ рдХрд╛Debug
рд╕рдВрджреЗрд╢ рдХреНрдпрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рддреНрд░реБрдЯрд┐ рдХрд╛Debug
рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ, рди рдХрд┐ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдЬрдм рдЖрдк рдПрдХ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдПDebug
рд╕рдВрджреЗрд╢ рдХреА рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдореИрдВрдиреЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдХрд┐рд╕реА рднреА рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЬрдВрдЧ рдорд╛рди рдХрд╛ рдбреАрдмрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЖрдо рддреМрд░ рдкрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдмрд┐рдВрджреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЙрдЪрд┐рдд рд▓реЛрдЧ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдореЗрд░реА рд░рд╛рдп рдХрд╛ рдХреБрдЫ рдЪреМрдВрдХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЛрдб рдЖрдкрдХреЛ рдПрдХ рдмрдЧ (рдлрд┐рд░ рд╕реЗ, рдЖрдИрдПрдордУ) рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредрдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
Debug
рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдХрд░, рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЦрд░рд╛рдм рдЕрднреНрдпрд╛рд╕ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд░рд╕реНрдЯ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╛Display
рднреА рдЕрдВрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИio::Error
ред рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рдмрд┐рдирд╛io::Error
рджрд┐рдЦрд╛рдирд╛ (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ/рдЦреЛрд▓рдиреЗ/рдмрдирд╛рдиреЗ рд╕реЗ рдЖрдпрд╛ рд╣реИ) рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗDebug
рддреНрд░реБрдЯрд┐ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдЪреБрдирд╛рд╡ рдХрд░рдХреЗ, рд╣рдордиреЗ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрди рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдХрдард┐рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред (рдЗрд╕рдХреЗ рдКрдкрд░,Debug
рдХрд╛io::Error
рдЕрдкрдиреЗDisplay
рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рджрд░реНрдж рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИред )рдЕрдВрдд рдореЗрдВ, рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рднреА рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рддрд╣рдд рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рднреА
?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рдореИрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЗрдВ рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ:рдЗрд╕рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░, рдЗрд╕реЗ
?-in-main
рд╕реЗ рдмрджрд▓рдирд╛ _lovely_ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗDisplay
рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдПрд▓рдЖрдИ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╢реЙрд░реНрдЯрдХрдЯ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрдЪрд┐рдд рд╕реАрдорд╛ рддрдХ) ) рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╣рд░ рдЬрдЧрд╣unwrap
рдЫрд┐рдбрд╝рдХреЗ рдмрд┐рдирд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд░рд╕реНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рд╕реЗ рдкреАрдЫреЗ рд╣рдЯ рдЧрдпрд╛ рд╣реВрдВ: рдЕрдм рдореИрдВ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЕрдиреБрдкрдпреЛрдЧреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред"рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рдХрд╛ рдкреИрдЯрд░реНрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреЙрд▓рд┐рд╢ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐
?-in-main
рдиреЗDisplay
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдЬ ripgrep рдореЗрдВmain
рдФрд░run
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:https://github.com/BurntSushi/ripgrep/blob/64317bda9f497d66bbeffa71ae6328601167a5bd/src/main.rs#L56 -L86
рдмреЗрд╢рдХ, рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ
?-in-main
Termination
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдмрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╕рд┐рд░реНрдлmain
рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдореЗрд░реЗ рдкрд╛рд╕impl
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХреЗрдВ, рдФрд░ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВ рдЖрдЬ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рднреА рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВ (main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдПрдХtry_main
)редрджреЗрдЦрдиреЗ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдпрд╣ рдХреЛрдб рдЖрдЬ рдЬрдВрдЧ рд╕реНрдерд┐рд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
Display
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдХреЛрдб рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрдХреНрдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ! рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрд╣рд╛рдЬ-рд╕реЗ-рдиреМрдХрд╛рдпрди рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдХрд╣рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕рдордЭрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдпрд╣ рднреА рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдУрд╡рд░рд░рд┐рдПрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдореБрдЭрд╕реЗ рдкреВрдЫрд╛ рд╣реИ "рдЖрдк?-in-main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?" рдореЗрд░реЗ рд╕реАрдПрд╕рд╡реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдФрд░ рдореЗрд░рд╛ рдЬрд╡рд╛рдм рдореВрд▓ рд░реВрдк рд╕реЗ рд░рд╣рд╛ рд╣реИ, "рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА рдЬрд┐рд╕реЗ?-in-main
рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣ рдкреНрд░рднрд╛рд╡ рдерд╛ред рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде , рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдбреЙрдХреНрдЯрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдФрд░ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред)