рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/rfcs#1216 рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛, рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП !
рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреА рд╣реИред
()
рддрдХ рдкреНрд░рддрд┐рдЧрдорди https://github.com/rust-lang/rust/issues/67225рд╣реБрдЬрд╝рд╛рд╣!
рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ WIP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ: https://github.com/canndrew/rust/tree/bang_type_coerced
рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ: рдпрд╣ рдкреБрд░рд╛рдиреЗ-рдЯреНрд░рд╛рдВрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдПрдХ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг if (return) {}
рдЬреИрд╕реЗ рдХреЛрдб рдЯреНрд░рд╛рдВрд╕ рдХреЗ рджреМрд░рд╛рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдВрдХ-рдЯрд╛рдЗрдо-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдирдХрд╛ рдореЗрд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд░реЛрдбрдореИрдк рд╣реИ:
FnOutput
, FnDiverging
рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд)ред!
рдХреЛ рдХреЗрд╡рд▓ рд╡рд╛рдкрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред()
ред()
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рд╕рдВрдЧрддрддрд╛ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдХреИрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ DefaultedUnit
рдирд╛рдордХ рдПрдПрд╕рдЯреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд░ ()
рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ ()
рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ ()
)ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рднреА рдмрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ - рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗредрдХреНрдпрд╛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рд╣реА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ? рдФрд░ рдХреНрдпрд╛ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рдореБрдЦреНрдп рднрдВрдбрд╛рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ
()
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдЧрддрддрд╛ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдХреИрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛DefaultedUnit
рдирд╛рдордХ рдПрдПрд╕рдЯреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд░()
рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ()
рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ (рдЬреИрд╕реЗ()
)ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рднреА рдмрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ - рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдВрдЧреЗред
@eddyb , @ arielb1 , @anyone_else : рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╡рд┐рдЪрд╛рд░? рдореИрдВ рдЗрд╕ рд╕реНрддрд░ рддрдХ рдХрд╛рдлреА рдКрдкрд░ рд╣реВрдВ (рдХреБрдЫ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЬреЛ рдореИрдВ (рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ) рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред
рд╣рдореЗрдВ рдХрд┐рди рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП !? рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреАрдЖрд░ #35162 рдореЗрдВ рдСрд░реНрдб рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХреНрдпрд╛ !
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ _all_ рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ:
trait Baz { ... }
trait Foo {
type Bar: Baz;
fn do_something(&self) -> Self::Bar;
}
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ !
Foo::Bar
рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ Bar
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
impl Foo for MyStruct {
type Bar = !;
fn do_something(&self) -> ! { panic!() }
}
рд▓реЗрдХрд┐рди рдпрд╣ рддрднреА рд╕рдВрднрд╡ рд╣реИ рдЬрдм !
рд╕рднреА рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗред
@tomaka рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ RFC рд╣реИ: https://github.com/rust-lang/rfcs/pull/1637
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ !
Trait
рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ !Trait
рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░! рдЧреБрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП !рд╡рд┐рд╢реЗрд╖рддрд╛...
рдлрд┐рд░ рд╡рд┐рд╢реЗрд╖-рдорд╛рдорд▓рд╛ !
рддрд╛рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗ?
@tomaka !
_all_ рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░/рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ (рдпрд╛рдиреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЛ Self
рд▓реЗрддреА рд╣реИрдВ)ред
!Trait
, рдХрд┐рд╕реА рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ !
Trait
_and_ !Trait
рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡рддрдГ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдзреНрд╡рдирд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рд▓рдХреНрд╖рдг рдмрд┐рд▓реНрдХреБрд▓ рднреА рдзреНрд╡рдирд┐ рдирд╣реАрдВ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ !
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Baz
рдХреЛ рд╕реНрд╡рддрдГ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдерд╛ред
рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ()
/ !
рд▓рд┐рдП рдбрд╛рдпрд╡рд░реНрдЬрд┐рдВрдЧ рдЯрд╛рдЗрдк рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрдм рдлреЗрдВрдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдХрд╣реАрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ? рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
let Ok(x) = Ok("hello");
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ " unable to infer enough type information about _
" рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _
рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ !
рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрдм рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рддреЛ рдореБрдЭреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд▓рдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдпреЗ рдкрд░реАрдХреНрд╖рдг рдЗрддрдиреЗ рдЬрдЯрд┐рд▓ рд╣реИрдВред
рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдореБрдЭреЗ рдорд┐рд▓рддреА рд╣реИ "_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде"ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ _ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрдм рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛ рддреЛ рдореБрдЭреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд▓рдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдпреЗ рдкрд░реАрдХреНрд╖рдг рдЗрддрдиреЗ рдЬрдЯрд┐рд▓ рд╣реИрдВред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред None
рд▓рд┐рдП рд╕рдорд╛рди рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ Option<!>
ред
@carllerche
unit_fallback
рдкрд░реАрдХреНрд╖рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЬреАрдм рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рдХрдо-рдореИрдХреНрд░реЛ-рдЖрдИ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ
trait Balls: Default {}
impl Balls for () {}
struct Flah;
impl Flah {
fn flah<T: Balls>(&self) -> T {
Default::default()
}
}
fn doit(cond: bool) {
let _ = if cond {
Flah.flah()
} else {
return
};
}
fn main() {
let _ = doit(true);
}
рдХреЗрд╡рд▓ return
/ break
/ panic!()
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ()/! рдФрд░ рд╣рдо рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрдм рдХрд░рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдХрд╣реАрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ?
"рдирд┐рд░реНрджрд┐рд╖реНрдЯ" рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред :) рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдСрдкрд░реЗрд╢рди, рдЬреЛ рдХреЛрдб рдХреЗ рдмрд╛рд╣рд░ рдХрд╣реАрдВ рднреА рд▓рд┐рдЦреЗ рдЧрдП рдирд╣реАрдВ рд╣реИрдВ, рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рдХрд╛рд░ рдЬреНрдЮрд╛рдд рд╣реЛред рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓рд╛ рдлрд╝реАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ ( .f
) рдФрд░ рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг ( .f()
) рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг deref ( *x
) рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдпрд╛ рджреЛ рдФрд░ рд╣реИрдВред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВ - рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдпрд╣ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдХреМрди рд╕рд╛ рд▓реЗрдирд╛ рд╣реИред (рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ, рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ "рд▓рдВрдмрд┐рдд рджрд╛рдпрд┐рддреНрд╡" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рд╣реИред)
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ fn рдХреЗ рдЕрдВрдд рддрдХ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рднреА рд▓рдВрдмрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдЪрдпрди рд╕рдВрдЪрд╛рд▓рди рддрдм рддрдХ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдЖ рдЬрд╛рддреАред рдпрд╣ рд╡рд╣ рдмрд┐рдВрджреБ рд╣реИ рдЬрд╣рд╛рдВ рдЪреВрдХ (рдЬреИрд╕реЗ, i32, рдЖрджрд┐) рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЖрд░рдПрдлрд╕реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ)ред
https://github.com/rust-lang/rust/issues/36011
https://github.com/rust-lang/rust/issues/36038
https://github.com/rust-lang/rust/issues/35940
рд▓рдВрдмрд┐рдд рдореБрджреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрдЧ рд╣реИрдВред
@canndrew рд╡реЗ рдХреБрдЫ рд╣рдж рддрдХ https://github.com/rust-lang/rust/issues/12609 рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВ
рд▓рдбрд╝рдХрд╛, рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдмрдЧ рд╣реИ! рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░рд╛ # 36038 рдЙрд╕реА рдХрд╛ рдПрдХ рдзреЛрдЦрд╛ рд╣реИ (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд╣реАрдВ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ !
рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рдЗрдо рдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рддрдп рди рд╣реЛ рдЬрд╛рдПред
рдХреНрдпрд╛ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреА рдердХрд╛рд╡рдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП !
рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ? рд╡рд░реНрддрдорд╛рди, рд╕рдВрднрд╡рддрдГ-рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
#![feature(never_type)]
fn main() {
let result: Result<_, !> = Ok(1);
match result {
// ^^^^^^ pattern `Err(_)` not covered
Ok(i) => println!("{}", i),
}
}
@tikue рд╣рд╛рдБ, рдпрд╣ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдмрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред
@lрдлреЗрдпрд░реА рд╡реВрдкреНрд╕, рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд┐рдд рдЪреЗрдХрдмреЙрдХреНрд╕ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рдХреНрдпрд╛ From<!> for T
рдФрд░ Add<T> for !
( !
рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдз рд╣реИ-- рдореИрдВ рдЗрд╕ рдкреАрдЖрд░ рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
From<!> for T
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред Add<T> for !
рд╢рд╛рдпрдж libs рдЯреАрдо рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ !
рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ, рд╡рд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
@canndrew рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рд╕реНрдХреИрд▓рд╛ рдХреЗ Nothing
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдк рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣реАрдВ рднреА рдПрдХ рдореВрд▓реНрдп рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реВрдВ рдЬреЛ impl All for !
рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЬрдВрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╣реЛрдВрдЧреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реАрдорд╛рдУрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВред
рдкреНрд░рддрд┐ https://github.com/rust-lang/rfcs/issues/1723#issuecomment -241595070 From<!> for T
рдореЗрдВ рд╕реБрд╕рдВрдЧрддрддрд╛ рдХреЗ рдореБрджреНрджреЗ рд╣реИрдВред
рдЖрд╣ рдареАрдХ рд╣реИ, рд╣рд╛рдБред рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдХреЗрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
impl<T> From<T> for T
overridden_by<T> From<!> for T
{ ... }
impl<T> From<!> for T { ... }
рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛? рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд▓реА рдХрд╛ рдирд┐рдпрдо рд╣реИред
рдХреНрдпрд╛ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╢реЗрд╖ рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ?
рдпреЗ рд╕рднреА match (res: Res<A, !>) { Ok(a) /* No Err */ }
, Result
рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рдмрд╣реБрдд рд╣реА рдХрд╛рд▓реНрдкрдирд┐рдХ рд▓рдЧрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдФрд░ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ !
рдПрдХ @canndrew рдХреА рдкрд╛рд▓рддреВ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдЗрд╕реЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдпрд╣ рдЧрд▓рдд рджрд┐рд╢рд╛ рд╣реЛ рдФрд░ #12609 рдХреЛрдИ рдмрдЧ рднреА рдирд╣реАрдВ рд╣реИ?
@petrochenkov # 12609 рдиреЗрд╡рд░ рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдЧ рдлрд┐рдХреНрд╕ рд╣реИред
@petrochenkov !
рднреВрд▓ рдЬрд╛рдУ рдФрд░ рдмрд╕ рдПрдирдо рдХреЛ рджреЗрдЦреЛред
рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рд╣реИ рддреЛ рдореИрдВ рдЙрд╕ рдкрд░ рджреЛ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ:
enum Foo {
Flim,
Flam,
}
let foo: Foo = ...;
match foo {
Foo::Flim => ...,
Foo::Flam => ...,
}
рдпрд╣ рдХрд┐рд╕реА рднреА n рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд░реНрдл рджреЛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╢реВрдиреНрдп рд╡реЗрд░рд┐рдПрдВрдЯ рд╡рд╛рд▓рд╛ рдПрдирдо рд╣реИ рддреЛ рдореИрдВ рдЙрд╕ рдкрд░ рд╢реВрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
enum Void {
}
let void: Void = ...;
match void {
}
рдЕрдм рддрдХ рд╕рдм рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рджреЗрдЦреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдкреИрдЯрд░реНрди рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ Result
рдЕрдВрджрд░ рджреЛ-рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдПрдирдо рдкрд░ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
enum Foo {
Flim,
Flam,
}
let result_foo: Result<T, Foo> = ...;
match result_foo {
Ok(t) => ...,
Err(Flim) => ...,
Err(Flam) => ...,
}
рд╣рдо рдмрд╛рд╣рд░реА рдкреИрдЯрд░реНрди рдХреЗ рдЕрдВрджрд░ рдЖрдВрддрд░рд┐рдХ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛ Foo
рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП Err
рд▓рд┐рдП рджреЛ рдорд╛рдорд▓реЗ рд╣реИрдВред рд╣рдореЗрдВ Result
рдФрд░ Foo
рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд┐рд▓рд╛рди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... _рд╕рд┐рд╡рд╛рдп рд╢реВрдиреНрдп_ред
enum Void {
}
let result_void: Result<T, Void> = ...;
match result_void {
Ok(t) => ...,
// ERROR!
}
рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдЗрд╕реЗ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди" рдЬреЛрдбрд╝рдиреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдХрд╣реВрдВрдЧрд╛ред
@petrochenkov рд╢рд╛рдпрдж рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рдереЗ рдЙрд╕реЗ рдЧрд▓рдд рд╕рдордЭрд╛ред #12609 рд╕реВрддреНрд░ рдореЗрдВ рджреЛ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ:
(0) рдХреНрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?
let res: Result<u32, !> = ...;
match res {
Ok(x) => ...,
}
(1) рдХреНрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?
let res: Result<u32, !> = ...;
match res {
Ok(x) => ...,
Err(_) => ...,
}
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрддреНрддрд░ рдХреНрд░рдорд╢рдГ "рдирд╣реАрдВ" рдФрд░ "рд╣рд╛рдВ" рд╣реИрдВред #12609 (1) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрджреНрджреЗ рдореЗрдВ рд╣реА рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рддреЛ рдореИрдВ (0) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдЙрддреНрддрд░ _ should_ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ (0) рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рд╣рд╛рдВ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди (1) рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИред
@canndrew
рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ (1), рдпрд╛рдиреА рдЕрдЧрдореНрдп рдкреИрдЯрд░реНрди, рдПрдХ рд▓рд┐рдВрдЯ рдФрд░ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, RFC 1445 рдореЗрдВ рдЗрд╕рдХреЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ (0) рдореИрдВ рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╕реЗ рдХрдореЛрдмреЗрд╢ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВред рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдкреИрдЯрд░реНрди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ (0) рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/rust-lang/rust/pull/36476
рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдпрд╣ рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдкреИрдЯрд░реНрди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рдд: рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рд╣реИрдХ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ (1) рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ (1) рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрд╕реА рд▓рд┐рдВрдЯ рд╕реЗ рдпрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ:
fn a() -> u32 {
return 4;
5
}
warning: unreachable expression, #[warn(unreachable_code)] on by default
рдЬрдмрдХрд┐ рд╣рдо рдЗрд╕ рдкрд░ рд╣реИрдВ, рдХреНрдпрд╛ !
рдХреЗ рд╕рд╛рдордиреЗ рдХреБрдЫ рдкреИрдЯрд░реНрди рдХреЛ рдЕрдХрд╛рдЯреНрдп рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ?
let res: Result<u32, !> = ...;
let Ok(value) = res;
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЧреИрд░-рд╡рд┐рд╕реНрддреГрдд рдорд┐рд▓рд╛рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдпрд╛рдиреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреИрдЯрд░реНрди рдХреЗрд╡рд▓ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреАрдЖрд░ рд╕рдбрд╝рд╛рдВрдз рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмреИрдареЗ рд╣реИрдВред рдХреНрдпрд╛ рдЗрдирдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рд╢рд╛рдпрдж рдЙрди рдкрд░ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ #36476, #36449 рдФрд░ #36489 рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдореИрдВ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ (рдпрд╛ рдкреНрд░рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ "рдиреАрдЪреЗ" рдкреНрд░рдХрд╛рд░) рд╕реЛрдЪрдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦрд╛рд▓реА enum
рдкреНрд░рдХрд╛рд░ (рдпрд╛ рдкреНрд░рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ "рд╢реВрдиреНрдп" рдкреНрд░рдХрд╛рд░) рдХреЗ рд╕рдорд╛рди рд╣реИред рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреАрд╡ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреЛрдиреЛрдВ рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдирд┐рдЪрд▓рд╛ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
fn(A,B)->!
fn(A,fn(B,C)->!)->!
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП
let g:! = panic!("whatever");
рдпрд╛
fn(x:!) -> !{
x
}
рдпрд╛ рдФрд░ рднреА
type ID=fn(!)->!;
рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ !
рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ !
рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЦрд╛рд▓реА enum
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ, рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ
enum Empty {}
impl Empty {
fn new() -> Empty {
panic!("empty");
}
}
рдлрд┐рд░
match Empty::new() {}
рдХрд╣рдиреЗ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐, !
рдФрд░ Empty
рдмреАрдЪ рдПрдХ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рд╣реИ: рдЖрдк !
рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди Empty
рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .
@earthengine рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ (рдореЗрд░реА рдирдЬрд╝рд░ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреГрддреНрд░рд┐рдо) рдЕрдВрддрд░ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдлрд╛рдпрджрд╛ рд╣реИ?
рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреЗ рди рд╣реЛрдиреЗ рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╕рд╛рдордиреЗ рдЖрдП рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Result<!, E>
рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрднреА рднреА Result
рдкрд░ рдореЛрдиреИрдбрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред map
рдФрд░ map_err
ред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдЦрд╛рд▓реА рдкреНрд░рдХрд╛рд░ ( zero
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдорд╛рди рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк bottom
рдЯрд╛рдЗрдк рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдЖрдо рддреМрд░ рдкрд░ bottom
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдк рдкреНрд░рдХрд╛рд░ рд╣реИ - рд▓реЗрдХрд┐рди рдЙрд╕ рдЕрд░реНрде рдореЗрдВ, рди рддреЛ !
рдПрдХ рдЦрд╛рд▓реА рдПрдирдо рдирд╣реАрдВ рд╣реИ bottom
рдЬрдВрдЧ рдореЗрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, zero
bottom
рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЯрд╛рдЗрдк рдереНрдпреЛрд░реА рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред
рдХрд╣рдиреЗ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдпрд╣ рд╣реИ рдХрд┐,
!
рдФрд░Empty
рдмреАрдЪ рдПрдХ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рд╣реИ: рдЖрдк!
рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рдиEmpty
рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .
рдпрд╣реА RFC рдареАрдХ рдХрд░ рд░рд╣рд╛ рд╣реИред !
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ "рдкреНрд░рдХрд╛рд░" рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ
рд╡реЗ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд░реИрдЦрд┐рдХ рддрд░реНрдХ рд╕реЗ рд╣реИрдВ https://en.wikipedia.org/wiki/Linear_logic
рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реИрдВ, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░ рд▓реВрдВрдЧрд╛ рддреЛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред
top
рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдмрдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рддрдм bottom
ред
@eddyb рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдБ рдХреА рд╣реИрдВ, рдХреГрдкрдпрд╛ рдореЗрд░реЗ рдирдП рдЕрдкрдбреЗрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
рдпрд╣ рдкреАрдЖрд░ - рдЬреЛ рдПрдХ рджрд┐рди рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЧрдпрд╛ - рдореЗрд░реЗ рдкреИрдЯрд░реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдмреИрдард╛ рд╣реИред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рджреВрд╕рд░рд╛ рдкреИрдЯрд░реНрди рдкреАрдЖрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдЕрд╡рд┐рднрд╛рдЬреНрдп рд╣реЛ рдЧрдпрд╛ рдерд╛ рдФрд░ рджреЛ рдорд╣реАрдиреЗ рддрдХ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдмреИрдардиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред
рдПрдлрдПрдлрдПрд╕ рджреЛрд╕реНрддреЛрдВ
@canndrew рдЕрд░реНрдШ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред =(рдореИрдВ рдЖрдЬ рднреА рдЖрдкрдХреЗ рдкреАрдЖрд░ рдХреЛ r+' рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛...
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рдХрд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдЦрд┐рдВрдЪ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рде рдХрдИ рдкреАрдЖрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЕрдм рдореИрдВ рд╕рд┐рддрдВрдмрд░ рд╕реЗ рдЗрд╕ рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЛ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЕрдВрддрд░ рд╣реИ - рдЬрдм рдореИрдВ рдмрд┐рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реВрдВ рддреЛ рдЖрдк рд╕рднреА рдСрдирд▓рд╛рдЗрди рд╣реЛрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдкрд╡рд╛рдж рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЫреЗрдж рд╣реИрдВ, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЙрдиреНрд╣реЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рд╣реИрдВ!
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ https://is.gd/4EC1Dk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЙрд╕рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдП, рдФрд░ред
1) рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░реЗрдВ рдЬреЛ рдШрдмрд░рд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ -> Foo
рд╕реЗ -> Result<Foo,!>
2) any
рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИtypes would have their Error types implicitly be converted to
рдПрдирдо AnonMyErrWrapper { рдбрд╛рдИ (!), рдПрд░рд░} ```
3) рдЪреВрдВрдХрд┐ ! рд╢реВрдиреНрдп рдЖрдХрд╛рд░ рдХрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд░рд╣рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд▓рд╛рдЧрдд рд╣реЛрдЧреА, рдФрд░ рдЗрд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓рд╛рдн, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдард╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛, рдЙрди рдкрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрджрд┐ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ ... рдПрдХ рд╕рдореБрджрд╛рдп рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛, рдпрджрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдирд╣реАрдВред :)
рд╕рд╛рде рд╣реА, рдпрд╣ рд╕рдВрднрд╡рдд: рд╕рдВрднрд╛рд╡рд┐рдд рднрд╛рд╡реА рдкреНрд░рднрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рд╣реЛрддрд╛ рд╣реИред
@tupshin рдХрдо рд╕реЗ рдХрдо рдЬрд┐рдордирд╛рд╕реНрдЯрд┐рдХ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмрд┐рдирд╛ рдПрдХ рддреЛрдбрд╝рдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдХрд┐,ред рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ "рдкрд░рд┐рдгрд╛рдо" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред [рдФрд░ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдореБрджреНрджрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рд▓рд╛рдиреЗ рдХреА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ --- !
рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╢реНрди рдореЗрдВ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдХрд╛рдо рд╣реИред]
рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЗрд╕реЗ рддреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛, рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд┐рдордирд╛рд╕реНрдЯрд┐рдХ рдХреЗ рдмрд┐рдирд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдХрд╛рдо рд╣реЛрдЧрд╛ред рдФрд░ рд╣рд╛рдБ, рдЬреЛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЙрд╕рд╕реЗ рдореИрдВ рдХрд╛рдлреА рдЦреБрд╢ рд╣реВрдБ! рдЬрд╣рд╛рдБ рддрдХ, рдЬрд╣рд╛рдБ рддрдХ рдЬрд╛рддрд╛ рд╣реИред :)
@nikomatsakis рд▓рдВрдмрд┐рдд рдореБрджреНрджреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЗрди рджреЛрдиреЛрдВ рдкрд░
- # 35162 рд╕реЗ рдХреЛрдб рд╕рдлрд╛рдИ, expr_ty рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░рд┐рдЯрд░реНрди рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд╛рдЗрдкреЗрдХ рдХреЛ рдереНрд░реЗрдб рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ
- рдорд╛рдЪрд┐рд╕ рдореЗрдВ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдЪрд╛рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди
рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдФрд░ рджрд░рд╛рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ:
- () рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдЯреНрд░реЗрдЯ рдлреЙрд▓рдмреИрдХ рдЬрд╣рд╛рдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ?
рдореИрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TyTuple
рдПрдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд▓рди рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЙрд╕ рдзреНрд╡рдЬ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЪрдпрди рдореЗрдВ рдЬрд╛рдВрдЪ рд░рд╣рд╛ рдерд╛ред
@canndrew
рдореИрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TyTuple рдореЗрдВ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдЪрд▓рди рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЙрд╕ рдзреНрд╡рдЬ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЪрдпрди рдореЗрдВ рдЬрд╛рдВрдЪ рд░рд╣рд╛ рдерд╛ред
рдареАрдХ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реИ!
рдЕрдЪреНрдЫрд╛, рд╢рд╛рдпрдж рдмрдврд╝рд┐рдпрд╛ред =) рджреЛ рд╢рдмреНрджрд╛рд░реНрде рд╕рдордХрдХреНрд╖ рдкреНрд░рдХрд╛рд░ ( ()
рдмрдирд╛рдо ()
) рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред =(рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ TyTuple
рдПрдХ рдмреВрд▓ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ
TyTuple(&'tcx Slice<Ty<'tcx>>, bool),
рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдЗрд╕ рдкрд░ рдХреБрдЫ рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕ (рдЗрдХрд╛рдИ) рдЯрдкрд▓ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдФрд░ TyDefaultedUnit
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдореЗрд░реЗ рдореВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдмреВрд▓ рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
uninitialized
/ transmute
/ MaybeUninitialized
рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдПрдХ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛:
MaybeUninitialized
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП, рдХреЗ рддрд╣рдд mem
uninitialized
рдкрд░ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдмрд╛рдж рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдЕрдиреНрдпрдерд╛ рдПрдХ рдиреЛрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп MaybeUninitialized
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВредtransmute
рдкрд░ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдХрд┐ рдпрд╣ "рд╕реЗ" рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдирд┐рд░реНрдЬрди рд╣реИ рдпрджрд┐ рдпрд╣ "рд╕реЗ" рдкреНрд░рдХрд╛рд░ рднреА рд╣реИред рдЗрд╕реА рддрд░рд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрдард╛рдПрдБ рдЬреЛ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдмрди рдЬрд╛рдПрдЧреАредрд╡рд┐рдЪрд╛рд░?
рдердХрд╛рд╡рдЯ рдореЗрдВ рд╣рд╛рд▓ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдпрд╣ рдзрд╛рдЧрд╛ рджреЗрдЦреЗрдВ:
&!
рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрд╕рд╣рдорддрд┐ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред #39151 рдХреЗ рдмрд╛рдж, never_type
рдлреАрдЪрд░ рдЧреЗрдЯ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдореИрдЪреЛрдВ рдореЗрдВ рдирд┐рд░реНрдЬрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ !
рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддреЛ рдХрдо рд╕реЗ рдХрдо std
рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд▓рдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред void::Void
рдПрдХ рдмрдбрд╝реА рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ std
рдмрд╛рд╣рд░ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдВрдмрд▓ impl<T> From<Void> for T
рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо From<!>
рдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ Error
, Display
рдФрд░ Debug
рдХреЛ !
рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо
From<!>
рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ From<T> for T
impl рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ
From<T> for T
impl рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реИред
рдХрдо рд╕реЗ рдХрдо рдЬрдм рддрдХ рдЬрд╛рд▓реА рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬреЗрд╢рди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЪреНрдЫреЗ рдЕрдВрдХред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдПрдХ рджрд┐рди рдореИрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реБрдП рджреЗрдЦреВрдВрдЧрд╛ред
рдХреНрдпрд╛ [T; 0]
рдПрдХ [!; 0]
&[T]
рдЙрдк-рдкреНрд░рдХрд╛рд░ рдФрд░ &[!]
? рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ "рд╣рд╛рдВ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдиреНрдпрдерд╛ рд╕реЛрдЪрддрд╛ рд╣реИред
[!; 0]
рдмрд╕рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП &[!]
рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрд╕ рдмрд╛рд░ рд╕рдмрдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рджреЛрдиреЛрдВ [!; 0]
рдФрд░ &[!]
рдирд┐рд░реНрдЬрди рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди []
(рдпрд╛ &[]
) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рдиреЗ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рд╡реЗ рдирд┐рд░реНрдЬрди рд╣реИрдВ рдпрд╛ рд░рд╣рдиреЗ рдЪрд╛рд╣рд┐рдПред
let _: u32 = unsafe { mem::transmute(return) };
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ "0 рдмрд┐рдЯреНрд╕ рдФрд░ 32 рдмрд┐рдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░рдг"ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ !
-> ()
рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдЕрд╕рдВрдЧрддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдпрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред
рдореИрдВ рд╕рдмрдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЙрдк-рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ Fn
, FnMut
рдФрд░ FnOnce
рдХреЛ !
рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ?
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
struct Builder<F: FnOnce(Input) -> Output> {
func: Option<F>,
}
рдХреЗ рд░реВрдк рдореЗрдВ func
рдПрдХ рд╣реИ Option
, рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ None
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ F
ред рдЗрд╕рд▓рд┐рдП fn new
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмреИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
impl Builder<!> {
pub fn new() -> Builder<!> {
Builder {
func: None,
}
}
}
рдмрд┐рд▓реНрдбрд░ рдХрд╛ func
рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ Builder<!>
рдФрд░ Builder<F>
рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
impl<F: FnOnce(Input) -> Output> Builder<F> {
pub fn func<F2: FnOnce(Input) -> Output>(self, func: F) -> Builder<F2> {
Builder {
func: func,
}
}
}
рдЕрдм рд╕рдорд╕реНрдпрд╛: рд╡рд░реНрддрдорд╛рди рдореЗрдВ Fn*
рд▓рдХреНрд╖рдг !
рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Output
рдореЗрдВ Fn
)ред рддреЛ рдХреНрдпрд╛ Fn*
рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рд╡рд╛рд░ рдХреЛ !
рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ?
рдпрд╣ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ <! as Fn>::Output
рдХреЛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?
<! as Fn>::Output
!
, рд╣реИ рдирд╛?
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ <! as Fn>::Output
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП !
, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪреЗрдХрд░ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рдПрдВ: https://is.gd/4Mkxfm
@SimonSapin рдЗрд╕реЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдирд╛ рдкреНрд░рд╢реНрди рдЙрдард╛рддрд╛ рд╣реВрдВред рднрд╛рд╖рд╛ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ !
рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд╛рд╣рд┐рдП
#![feature(never_type)]
fn with_print<T>(i:i32, r:T) -> T {
println!("{}", i);
r
}
fn main() {
#[allow(unreachable_code)]
*with_print(10,&return)
}
10
рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ? рдЕрднреА рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЫрд╛рдкрддрд╛ рд╣реИред рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЬреЛ рдкреНрд░рд┐рдВрдЯ рд╣реЛрдиреЗ рддрдХ return
рджреЗрд░реА рдХрд░реЗрдЧрд╛?
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ !
рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рдПрдХ рдЖрд▓рд╕реА рд╣реИ рдФрд░ рдПрдХ рдЙрддреНрд╕реБрдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХреЗрддрди рдПрдХ рдЙрддреНрд╕реБрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╣рдореЗрдВ рдЖрд▓рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ @RalfJung рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд░реБрдЪрд┐ &return
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░, рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрд╛рдж рдореЗрдВ return
рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣рд╛рдВ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ return
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рди рдХрд┐ break
рдпрд╛ continue
рдЖрджрд┐ рдХрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рд▓рд┐рдЦ рд╕рдХреЗрдВ
#![feature(never_type)]
fn with_print<T>(i:i32, r:T) -> T {
println!("{}", i);
r
}
fn main() {
for i in 1..10 {
if i==5 { with_print(i, /* delay */break) }
with_print(i, i);
}
}
рдмреНрд░реЗрдХ рдХреЗ рд╕рд╛рде 5
рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рддрдХ рджреЗрд░реА рд╣реБрдИред
@earthengine рдирд╣реАрдВ-- рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред !
рдирд┐рд░реНрдЬрди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ !
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рднреА рдорд╛рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ !
рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рди рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдореГрдд рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВред
рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ return
рдХрд╛ рдкреНрд░рдХрд╛рд░ !
рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдЪрд▓рди рдХрд░рддрд╛ рд╣реИред рдХреЛрдб рдЬреЛ return
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ return
рдХрднреА рднреА "рд╕рдорд╛рдкреНрдд" рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
o рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЖрдк &return
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ return
рдХрд╛ рдкрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?^^
рд▓реЗрдХрд┐рди, рд╡реИрд╕реЗ рднреА, @earthengine рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ, рддрд░реНрдХреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди quit_with_print
рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди return
рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ foo({ return; 2 })
-- foo
рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@RalfJung return
!
рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдЬреИрд╕реЗ break
рдпрд╛ continue
ред рдЗрд╕рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдЬрди рд╣реИред
!
рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рд░рд╛рддреНрд░рд┐ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдмрд╛рдд рдЬрд┐рд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ !
(рдпрд╛рдиреА uninitialized
, ptr::read
рдФрд░ transmute
) рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред uninitialized
, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ рд╕реБрдирд╛ рдерд╛ рдХрд┐ рдПрдХ рдЖрдо рд╕рд╣рдорддрд┐ рдереА рдХрд┐ рдЗрд╕реЗ MaybeUninit
рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╡рд┐рд╖реНрдп &in
, &out
, &uninit
рдкрдХреНрд╖ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рдХрд╛ uninitialized
рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирдпрд╛ Inhabited
рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЙрд╕ RFC рдХреЛ рдЦрддреНрдо рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ "рдмрд╣рд┐рд╖реНрдХреГрдд uninitialized
" рдФрд░ " MaybeUninit
" RFCs рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
ptr::read
, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдпреВрдмреА рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдирд╛ рдареАрдХ рд╣реИред рдЬрдм рдХреЛрдИ ptr::read
рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡реЗ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЛ рдбреЗрдЯрд╛ рд╡реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдорд╛рдиреНрдп рд╣реИ, рдФрд░ !
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ рд░рд╛рдп рд╣реЛ?
transmute
рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдмрд╕ рдЗрд╕реЗ рдПрдХ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░ (рдЖрдИрд╕реАрдИрдЗрдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддрд╛ рд╣реИ) рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд░реЗрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдерд╛ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдбреЗрдЯрд╛ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рддреЛ рдЗрд╕ рд╕рдордп рд╣рдо рдЗрдирдХреЗ рд╕рд╛рде рдХрд╣рд╛рдБ рд╣реИрдВ? (/cc @nikomatsakis)? рдХреНрдпрд╛ рд╣рдо uninitialized
рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдФрд░ MaybeUninit
рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ? рдЕрдЧрд░ рд╣рдо !
рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЗрди рдЖрдВрддрд░рд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрддрдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдЯреЙрдк-рдЧреИрдк рдЙрдкрд╛рдп рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ !
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛?
рд╕реВрдЪреАрдмрджреНрдз рд▓рдВрдмрд┐рдд рдореБрджреНрджреЗ рднреА рд╣реИрдВ:
!
рд▓рд┐рдП рд╣рдореЗрдВ рдХреМрди рд╕реЗ рдЧреБрдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП? рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреАрдЖрд░ #35162 рдореЗрдВOrd
рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЯреА-рд▓рд┐рдмреНрд╕ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдЯреИрдЧ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдлреА рдмреБрдирд┐рдпрд╛рджреА рдЪрдпрди рд╣реИ: PartialEq
, Eq
, PartialOrd
, Ord
, Debug
, Display
, Error
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ Clone
, рдЬрд┐рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдЬреЛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ? рдЕрдЧрд░ рд╣рдо рдлрд┐рдЯ рджрд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
(): Trait
рдлрд╝реЙрд▓рдмреИрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ?
resolve_trait_on_defaulted_unit
рдЪреЗрддрд╛рд╡рдиреА рд▓рд╛рдЧреВ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рд░ рд╣реИред
рдЬрдмрд░рджрд╕реНрддреА рдореЗрдВ
!
рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рд╢рдмреНрджрд╛рд░реНрде (#40800)
рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ!
(#40801) рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП
рдпреЗ рдЕрд╕рд▓реА рдЕрд╡рд░реЛрдзрдХреЛрдВ рдХреА рддрд░рд╣ рд▓рдЧрддреЗ рд╣реИрдВред @nikomatsakis : рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдареЛрд╕ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЬреЛ рдЕрднреА рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдХреНрдпрд╛ рдпрд╣ !
рд▓рд┐рдП Sync
рдФрд░ Send
рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдРрд╕реЗ рдХрдИ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ Sync
рдФрд░/рдпрд╛ Send
рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рдЬрд╣рд╛рдВ !
рдХреЛ "рдЕрд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
@canndrew рдореИрдВ рдЗрд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рдордирд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВред unreachable
рдЯреЛрдХрд░рд╛ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдореНрдпреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рдХ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдХреБрдЫ рд╢рд╛рдЦрд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдореЗрд░реА рдпреЛрдЬрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЗ рд╕реЗ рдРрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЯреЛрдХрд░рд╛ рдмрдирд╛рдиреЗ рдХреА рд╣реИред
@Kixunil рдпрд╣рд╛рдВ https://doc.rust-lang.org/beta/std/intrinsics/fn.unreachable.html рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛?
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдпрд╣ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реНрдерд┐рд░ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред
@jsgf рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рдБ, !
рд╕рднреА рдорд╛рд░реНрдХрд░ рд▓рдХреНрд╖рдгреЛрдВ ( Send
, Sync
, Copy
, Sized
) рдХреЛ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
@ рдХрд┐рдХреНрд╕реБрдирд┐рд▓ рд╣рдореНрдо, рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ unreachable
рдЖрдВрддрд░рд┐рдХ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рд╕реНрдерд┐рд░реАрдХрд░рдг-рдЕрд╡рд░реЛрдзрдХ рдирд╣реАрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрдг, рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Result<T, !>
рдПрдирдо рд▓реЗрдЖрдЙрдЯ рдпрд╛ рдореИрдЪ рдХреЛрдбрдЬреЗрди рдореЗрдВ !
рдирд┐рд░реНрдЬрдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ: https://github.com /рдЬрдВрдЧ-рд▓рдВрдЧ/рдЬрдВрдЧ/рдореБрджреНрджреЗ/43278
рдпрд╣ рдЗрддрдирд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рджреЛрд╖реА рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди:
рдХреНрдпрд╛ рдЪрд╛рдХ рд╕рдВрднрд╡рддрдГ !: Trait
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдХрдард┐рди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
@ExpHP рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред рдЙрди рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП !: Trait
рд╕реНрд╡рддрдГ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░/рдЖрдзрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдзреНрд╡рдирд┐ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЕрдиреНрдп рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ/рд╕реНрдерд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреА рдорд╛рди рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЕрдкрдиреА рдордирдорд╛рдиреА рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
rustc рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА resolve-trait-on-defaulted-unit
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реГрдХреНрд╖ рд╣реИред рдХреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдЯрдо рдкрд░ рд╕рд╣реА рдХрд╛ рдирд┐рд╢рд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
@canndrew рдХреНрдпрд╛ рд╕рдВрдмрджреНрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ !
?
@taralx рдпрд╣ рдЕрд╕реНрд╡рд╕реНрде рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрдз рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЖрдЬ рд╕рдВрдХрд▓рд┐рдд рд╣реИ:
trait Foo {
type Bar;
fn make_bar() -> Self::Bar;
}
impl Foo for ! {
type Bar = (i32, bool);
fn make_bar() -> Self::Bar { (42, true) }
}
@lрдлреЗрдпрд░реА рдпрд╣ рдЖрдкрдХреА рд░рд╛рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ "рд╡реИрдз" рдХреЛрдб рдХреНрдпрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдВ рдЦреБрд╢реА-рдЦреБрд╢реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рдХреЛрдб рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ "рдЕрдорд╛рдиреНрдп" рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ !
рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@earthengine рдореБрдЭреЗ рд╡рд╣ рдмрд┐рдВрджреБ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк !
рд╕реЗ "рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк !
рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХреБрдЫ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рди рд╣реЛрдВред рдЖрдк рдПрдХ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ !
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкрд░ рдЧреИрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ !
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рдХреЛрдИ рднреА рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдо рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ 1 рд╡реИрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ !
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд▓рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ)ред
рд╣рдо рдЬрд┐рд╕ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ рд╡рд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдпрд╛ рдЕрдзрд┐рдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдХрд┐ рдХреЛрдИ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд╣рд┐рддрд╛рд░реНрде рднреА рдлрд┐рдЯ рдирд╣реАрдВ рдмреИрдарддрд╛)ред
@ Ericson2314 рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
@SimonSapin "рдиреЛ panic!()
рдпрд╛ loop { }
, рд▓реЗрдХрд┐рди рдПрдХ v: !
рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рдареАрдХ рд╣реИред рдРрд╕реЗ рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд┐рдиреНрд╣реЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрдИ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реЛрддрд╛ рд╣реИ ! рд╡рд╣ рдЯрд╛рдЗрдк-рдЪреЗрдХред (рджреВрд╕рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЕрдиреБрдмрдВрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ 1 рдирд┐рд╣рд┐рддрд╛рд░реНрде рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрдирд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдкрдЯ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред)
// two implementations: constant functions returning true and false.
// And infinitely more with side effects taken into account.
trait Foo { fn() -> bool }
// Exactly one implementation because the body is unreachable no matter what.
trait Bar { fn(Self) -> Self }
рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, !
рдПрдХ "рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрддреНрд╡" рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ !
рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдпрд╛рдиреА, рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд░рд╛рдмрд░ рд╣реИрдВ - рдЬрдм рдмрд╛рд╣рд░ рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрди рд╕рднреА рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рд╕реЗ рдХреНрдпрд╛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ mem::uninitialized
рд╕реНрдерд┐рддрд┐ рд╣реИ рдпрд╛ рдХреБрдЫ рдФрд░?
@ arielb1 : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ #40800 рдФрд░ #40801 рднреА рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрди рдкрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ?
рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдпрд╛ рд▓реЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдПрд╕рдЯреАрдбреА рдбреЙрдХреНрд╕ (#43529, #43560) рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╣рд╛рд▓ рдХреЗ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде, ! рдЯрд╛рдЗрдк рдХрд░реЗрдВ рд╡рд╣рд╛рдБ рдПрдХ рдкреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рд╕рдВрджрд░реНрдн рд╢рд╛рдпрдж рдЕрдкрдбреЗрдЯ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ рдХрд┐ рдПрдПрд╕рдПрдо рд╡рд┐рдЪрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЪреАрдЬреЗрдВ рд▓рд┐рдЦ рд╕рдХреЗрдВ?
#[naked]
unsafe fn error() -> !{
asm!("hlt");
}
рдЯрд╛рдЗрдк рдЪреЗрдХрд░ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП loop{}
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ core::intrinsics::unreachable
рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@ Eoc33 рдЬрдм !
рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
#[naked]
unsafe fn error() -> ! {
asm!("hlt");
std::mem::uninitialized()
}
рддрдм рддрдХ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
#[naked]
unsafe fn error() -> ! {
asm!("hlt");
enum Never {}
let never: Never = std::mem::uninitialized();
match never {}
}
@Kixunil !
рд░рд╛рдд рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ asm!
ред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
#[naked]
unsafe fn error() -> ! {
asm!("hlt");
std::intrinsics::unreachable();
}
@Kixunil рдЗрд╕реЗ std::intrinics::unreachable()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХреЛрдб рдЕрд▓рдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИред
@Kixunil рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рд╕реЗ std::mem::uninitialized
!
рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ? рдЬрдм рддрдХ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рд╕рдордЭрд╛?
рдЙрдкрд░реЛрдХреНрдд рдЪрд░реНрдЪрд╛ рд╕реЗ
std::mem::uninitialized
!
рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрдзреАрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ? рдЬрдм рддрдХ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рд╕рдордЭрд╛?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ uninitialized
рдХреЛ рдЕрдВрддрддрдГ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░, рд╕реНрдЯреЙрдк рдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ, !
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдШрдмрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред
рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ std::intrinsics::unreachable
рдХреЛ libcore рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ unchecked_unreachable
рдпрд╛ unreachable!
рдореИрдХреНрд░реЛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА рд▓рд┐рдЦрдиреЗ рдХрд╛ рдорддрд▓рдм рд░рд╣рд╛ рд╣реВрдВред
@eddyb рдЖрд╣, рд╣рд╛рдБ, рднреВрд▓ рдЧрдП рдХрд┐ asm!()
рдЕрд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП std::intrinsics::unreachable()
рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@ tbu- рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдЕрддреНрдпрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ, рдпрд╣ рдЕрд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреА рд╢рд╛рдЦрд╛ рдХреЛ рдЕрдЧрдореНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛, рддреЛ рдпрд╣ рди рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреА рдмрдирд╛ рджреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдЬрдВрдЧ рдХреА рдкреНрд░рддрд┐рд╖реНрдард╛ рдХреЛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧреА (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЧрд░реНрд╡ рд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реБрдП)ред рдЬрд┐рддрдирд╛ рдореИрдВ рд░рд╕реНрдЯ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдРрд╕реА рдЪреАрдЬ рдореБрдЭреЗ рдЙрдкрдпреЛрдЧреА рднрд╛рд╖рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рджреЗрдЧреАред
@ Eroc33 рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрдгрдп рдирд╣реАрдВред рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦрдбрд╝рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рдЬрдВрдЧ рдХреЛ 2.0 рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рджреЗрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдмреБрд░рд╛рдИ рд╣реИред рдпрджрд┐ рд▓реЛрдЧ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реГрдХреНрд╖ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред
@canndrew рдЖрдкрдХреЛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ uninitialized
рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореИрдВ рдРрд╕реА рдмрд╛рдд рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдпрд╣ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХреЛрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореМрдЬреВрдж рди рд╣реЛ, рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ intrinsics::unreachable()
рдореМрдЬреВрджрд╛ рд╣реИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЙрди рд╣реИрдХреНрд╕ рдХреЛ рдордирд╛ рдХрд░рдиреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рди рд╣реЛред
рдЕрдкреНрд░рд╛рд░рдВрдн рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕рдВрдШ рд╣реИ { !, T }ред рдЖрдк рджреНрд╡рд╛рд░рд╛ рдЕрдЧрдореНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
ptr::read::<*const !>()ing рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗред
рдЕрдЧрд╕реНрдд 8, 2017 рдЕрдкрд░рд╛рд╣реНрди 3:58 рдкрд░, "рдорд╛рд░реНрдЯрд┐рди рд╣рдмреЛрд╡реЗрдЯрд┐рдпрд╛рдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:
@eddyb https://github.com/eddyb рдЖрд╣, рд╣рд╛рдБ, рднреВрд▓ рдЧрдпрд╛ рдХрд┐ asm!() is
рдЕрд╕реНрдерд┐рд░, рдЗрд╕рд▓рд┐рдП std::intrinsics::unreachable() рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред@tbu- https://github.com/tbu- рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреЛ рдмрд╣реБрдд рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ
рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ, рдпрд╣ рдЕрд╕реНрдерд┐рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдпрд╣ рдерд╛
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреА рд╢рд╛рдЦрд╛ рдХреЛ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛
рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреА рдмрдирд╛рдПрдВред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рдЬрдВрдЧ рдХреА рдкреНрд░рддрд┐рд╖реНрдард╛ рдХреЛ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП
рдЧрд░реНрд╡ рд╕реЗ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд░рд╕реНрдЯ рд╕реЗ рдЬрд┐рддрдирд╛ рдкреНрдпрд╛рд░ рд╣реИ, рдЙрддрдиреА рдмрд╛рдд рд╣реЛрдЧреА
рдореБрдЭреЗ рдпрд╣ рдЙрдкрдпреЛрдЧреА рднрд╛рд╖рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред@Eroc33 https://github.com/eroc33 рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ
рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░реНрдгрдп рдирд╣реАрдВред рдФрд░ рдореИрдВ
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦрдбрд╝реЗ рд╣реЛ рдЬрд╛рдУ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛,
рдЬрдВрдЧ рдХреЛ 2.0 рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдмреБрд░рд╛рдИ рд╣реИред
рдпрджрд┐ рд▓реЛрдЧ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ, рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реГрдХреНрд╖ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред@canndrew https://github.com/canndrew рдЖрдкрдХреЛ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ?
рдкрджрд╛рд╡рдирдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореИрдВ рдРрд╕реА рдмрд╛рдд рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдпрд╣ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ,
рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХреЛрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореМрдЬреВрдж рди рд╣реЛ, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛
рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗредрдЕрдВрдд рдореЗрдВ, рдореИрдВ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ :: рдЕрдЧрдореНрдп ()
рд╡рд░реНрддрдорд╛рди рд╣реИрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛрдиреЗ рддрдХ рдЙрди рд╣реИрдХреНрд╕ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ред-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/35121#issuecomment-320948013 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AApc0iEK3vInreO03Bt6L3EAByBHQCv9ks5sWFt3gaJpZM4JYi9D
.
@ рдирдЧреАрд╕рд╛ рдзрдиреНрдпрд╡рд╛рдж! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рддрдХрдиреАрдХреА рд╕реНрддрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ !
рдХреЛ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдЯрд╛рдЗрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ? рдЕрднреА рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдп рд╣реИ
fn foo() -> ! { ┬╖┬╖┬╖ }
рдФрд░ ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
fn foo() -> io::Result<!> { ┬╖┬╖┬╖ }
рдХреНрдпрд╛ рдХрд╛рдВрдЯреЗрджрд╛рд░ рдЬрдмрд░рджрд╕реНрддреА рдФрд░ рдЯрд╛рдЗрдк рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╢реНрди рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?
match
, рджреЗрдЦреЗрдВ https://public.etherpad-mozilla.org/p/rust-compiler-design-sprint-paris-2017-ucg
!
рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ #43061 рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдХреЛрдИ рднреА рдЦреБрд▓рд╛ I-unsound рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рдереА, рдЬрд┐рд╕рдореЗрдВ рдХрднреА рдирд╣реАрдВ_рдЯрд╛рдЗрдк рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рджрд╛рдпрд░ рдХрд┐рдпрд╛: #47563ред рдЪреАрдЬреЗрдВ рдорд╛рдирддреА рд╣реИрдВ рдХрд┐ [!; 0]
рдирд┐рд░реНрдЬрди рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг []
рд╕рд╛рде рдПрдХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред
@dtolnay рдиреЗ рд╣реЗрдбрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛
@canndrew рдЖрдк рд╕рдордп рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд╣реИрдВ? рдореИрдВ !
рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рдП (рдЬреЛ рд╕рдВрдкреВрд░реНрдг рд╣реИ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЬрд╣рд╛рдБ рд╣реИрдВ, рдЙрд╕рдХрд╛ рд╕реВрддреНрд░ рдЦреЛ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЪреИрдВрдкрд┐рдпрди рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ рдмрдирдиреЗ рдХрд╛ рд╕рдордп рд╣реИ?
@nikomatsakis рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╕рд╛рдорд╛рди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬреБрдбрд╝реА рд╣реБрдИ рдмрдЧ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @varkor рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдФрд░ рдмрд╛рдд: рдХреНрдпрд╛ рд╣рдо рд░рди-рдЯрд╛рдЗрдо рдкрд░ mem::uninitialized::<!>()
рдЖрддрдВрдХрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпреВрдмреА рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ)? рдпрд╛ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдк-рдЯреВ-рд╕реНрдкреАрдб рдирд╣реАрдВ рд╣реВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЛрдЬрдирд╛ рдЕрднреА рднреА https://github.com/rust-lang/rfcs/pull/1892 рд╣реИ , рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИред :)
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рд╣реИ? рдореИрдВ рдЖрдЬ рдЬреЛ рдХрд╣рддреЗ рд╣реИрдВ рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ MaybeUninit
рдФрд░ deprecates uninitialized
ред
@canndrew рдЪреВрдВрдХрд┐ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╕рднреА рддреАрди рд░рд┐рд▓реАрдЬ рдЪреИрдирд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИрдВ рдФрд░ uninitialized
рд╕реНрдерд┐рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рд╕реНрдерд┐рд░ рдЪреИрдирд▓ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдирд╛рдЗрдЯрд▓реА рдкрд░ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдбреЙрдХреНрдЯрд░-рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд░рдо рдмрд╣рд┐рд╖реНрдХрд░рдг рдареАрдХ рд╣реИред
рдореИрдВрдиреЗ !
рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/rust-lang/rust/pull/47630ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдЕрднреА рддрдХ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ @varkor рдХреЗ рдкреАрдЖрд░ рд╢реЗрд╖ рдЦреБрд▓реЗ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ https://github.com/rust-lang/rfcs/pull/1699 рдкрд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд▓реЛрдЧ !
рд▓рд┐рдП рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ impls рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВред
@canndrew : рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рдЖрд░рдПрдлрд╕реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ https://github.com/rust-lang/rust/issues/20021 рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ
https://github.com/rust-lang/rust/issues/36479 рдХреЛ рд╢рд╛рдпрдж рдЗрд╢реНрдпреВ рд╣реЗрдбрд░ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
@varkor рдпрд╣ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИред рдЕрдкрдиреЗ рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦреА рд╣реИ рдЬрд┐рд╕реЗ рдЕрдм рдЕрдЧрдореНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ?:
impl fmt::Debug for ! {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
*self // unreachable!
}
}
рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрди рдЬреИрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдХрд╛рдлреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
@canndrew рдХреБрдЫ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рдХрд╛рд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ "рд╕рд╛рд░рд╛рдВрд╢ рдореБрджреНрджрд╛" рд╣реИ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рд╕реНрдерд┐рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдЖрд░рдПрдлрд╕реА рдХреЗ рдмрд╛рдж рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдмреБрд▓реЗрдЯ-рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ ред
рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рд╢реНрди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА "рд░реВрдкрд░реЗрдЦрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╕рд╛рде рдереЛрдбрд╝реА рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -- рдпрд╛ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ https://github.com/rust-lang/rust/issues/46325 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╢рд╛рдпрдж рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
@nikomatsakis рдореИрдВ рдХрд┐рд╕реА рднреА рдЪреЗрддрд╛рд╡рдиреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ
@canndrew : рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рдВрднрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ !
рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реЛрдЧрд╛ред
@nikomatsakis
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА "рд░реВрдкрд░реЗрдЦрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╕рд╛рде рдереЛрдбрд╝реА рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -- рдпрд╛ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдорд╕реМрджрд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддрд╛ рдерд╛ рдФрд░ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рдереЗ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдпрд╣реА рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
@nikomatsakis рдРрд╕рд╛ рдХреБрдЫ?
!
рд╕реНрдерд┐рд░реАрдХрд░рдг!
рдЕрдм рдПрдХ рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЕрдм рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ (рдЬреИрд╕реЗ RFC 1216 ) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред !
рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rust/tree/master/src/test/run-fail/adjust_never.rs рджреЗрдЦреЗрдВредрдкреНрд░рдХрд╛рд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдЕрдм рд╕реНрд╡реЗрдЪреНрдЫрд╛рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдЪрд░ рд▓рд╛рдЧреВ рд╣реЛ рдЬрд╛рдПрдЧреА !
рдХреЗ рдмрдЬрд╛рдп ()
ред resolve_trait_on_defaulted_unit
рд▓рд┐рдВрдЯ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХрд╣рд╛рдВ рдЖрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:
// We didn't specify the type of `x`. Under some circumstances, type inference
// will pick a type for us rather than erroring
let x = Deserialize::deserialize(data);
рдкреБрд░рд╛рдиреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд рдпрд╣ рдПрдХ ()
рдХреЛ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛, рдЬрдмрдХрд┐ рдирдП рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд рдпрд╣ рдПрдХ !
рдХреЛ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛ред
never_type
рдлреАрдЪрд░ рдЧреЗрдЯ рд╕реНрдерд┐рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдм рдирдП exhaustive_patterns
рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ рд░рд╣рддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
let x: Result<u32, !> = ...;
let Ok(y) = x;
рдпрд╣ рдХреЛрдб рдЕрднреА рднреА рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдХрд┐ Ok(_)
рдПрдХ рдЦрдВрдбрди рдпреЛрдЧреНрдп рдкреИрдЯрд░реНрди рд╣реИред рдЗрд╕реЗ exhaustive_patterns
рдлреАрдЪрд░ рдЧреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП RFC 1872 рджреЗрдЦреЗрдВред рдЯреЗрд╕реНрдЯрдХреЗрд╕ рдХреЗ рд▓рд┐рдП https://github.com/rust-lang/rust/tree/master/src/test/ui/feature-gate-exhaustive-patterns.rs рджреЗрдЦреЗрдВ рдЬреЛ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рдЧреЗрдЯреЗрдб рд╣реИред
рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ #46325 рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЗрд╕ рддрд░рд╣ рд╣рд░ рдвреАрд▓реЗ рд╕рд┐рд░реЗ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╡рд░реЛрдзрдХ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
@canndrew
рдХреБрдЫ рдЗрд╕ рддрд░рд╣?
рд╣рд╛рдБ, рдзрдиреНрдпрд╡рд╛рдж! рдПрдХ рджрдо рдмрдврд╝рд┐рдпрд╛ред
рдореБрдЦреНрдп рдмрд╛рдд рдЬреЛ рдЧрд╛рдпрдм рд╣реИ, рд╡рд╣ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рд╣реИрдВ рдХрд┐ !
рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рджрд░реНрд╢рдХреЛрдВ рдХреЛ рд▓реИрдВрдЧ рдЯреАрдо рдпрд╛ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╛рд░реАрдХреА рд╕реЗ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп" рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЙрди рдЬрдЧрд╣реЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдЬрдмрд░рджрд╕реНрддреА рдХрд╛рдиреВрдиреА рд╣реИрдВ, рдпрд╛ рдЬрд╣рд╛рдВ !
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЙрди рд╡реГрд╖рдгреЛрдВ рдХреЛ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдореЗрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди (рдлреАрдЪрд░ рдЧреЗрдЯ рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛) рдЕрднреА рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
@canndrew
рдЗрд╕ рддрд░рд╣ рд╣рд░ рдвреАрд▓реЗ рд╕рд┐рд░реЗ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╡рд░реЛрдзрдХ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
рдареАрдХ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдирдП рдХреЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреБрд░рдВрдд рдмрджрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, let x: ! = ...
рдХреНрдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛)ред рдЕрдЧрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓реЗ рдЧрдП рдкреАрдЖрд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреАрдЖрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рдХреНрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?
@nikomatsakis рдореИрдВрдиреЗ рдХреБрдЫ рд▓рд┐рдВрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕рд╛рд░рд╛рдВрд╢ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦреЗрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛, рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рд░рд╣рд╛ рд╣реВрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓реЗ рдЧрдП рдкреАрдЖрд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреАрдЖрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рдХреНрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?
рдХрд┐рдпрд╛ рд╣реБрдЖред
@rfcbot fcp рдорд░реНрдЬ
рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо !
рдкреНрд░рдХрд╛рд░ -- рдпрд╛ рдЙрд╕рдХреЗ рдХрдо рд╕реЗ рдХрдо рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдкреАрдЖрд░ рдпрд╣рд╛рдБ рд╣реИ ред
рдПрдХ рдмрд┐рдЯ рдбреЗрдЯрд╛ рдЬреЛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рд╡рд╣ рд╣реИ рдХреНрд░реЗрдЯрд░ рд░рдиред рдореИрдВ https://github.com/rust-lang/rust/pull/47630 рдХреЛ рдлрд┐рд░ рд╕реЗ рдмреЗрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ (рдЪреВрдВрдХрд┐
рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп @nikomatsakis рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдмрд╛рдХреА рдЯреИрдЧ рдХреА рдЧрдИ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рд╣реИ:
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдореАрдХреНрд╖рдХреЛрдВ рдиреЗ рд╕реНрд╡реАрдХреГрддрд┐ рджреЗ рджреА (рдФрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ), рддреЛ рдпрд╣ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдирдЬрд╝рд░ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдмреЛрд▓реЗрдВ!
рдЯреИрдЧ рдХреА рдЧрдИ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдореБрдЭреЗ рдХреНрдпрд╛ рдЖрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП
рдУрд╣, рдХреБрдЫ рдмрд╛рддреЗрдВ рдЬреЛ рдореБрдЭреЗ рдЕрднреА-рдЕрднреА рдпрд╛рдж рдЖрдИрдВ:
!
рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдВред рдЯреАрдПрд▓; рдбреАрдЖрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ !
рдореВрд▓реНрдп рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП Clone
рдХреЛ !
рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди Default
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд░рдЦреЛ, рдЕрдЧрд░ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдВрдзрд╛рдзреБрдВрдз рд░реВрдк рд╕реЗ panic!
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддреЛ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕рдВрдХреЗрдд рд╣реИред =)@nikomatsakis рдХреНрдпрд╛ рд╣рдо рдПрдХ рдирдП рдпреБрдЧ рдореЗрдВ рдлрд╝реЙрд▓рдмреИрдХ рдирд┐рдпрдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА 2015 рдХреЗ рдпреБрдЧ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ !
?
@nikomatsakis
рд╣рдореЗрдВ рдЗрд╕реЗ рдирдП рдпреБрдЧ рдореЗрдВ рд╣реА рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдПрдХ рдХреНрд░реЗрдЯрд░ рд░рди рдХрд┐рдпрд╛ рдерд╛ (рдЬреЛ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдерд╛) рдлреЙрд▓рдмреИрдХ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдирддреАрдЬрд╛ рдХрд╛рдлреА рдХрдо рдерд╛ред рд╣рдо рдЙрд╕ рдХреЛрдб рдХрд╛ рднреА рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░рд╛, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рднреА рдерд╛ рдХрд┐
!
рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдВред
!
рд▓рд┐рдП рдбреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛
@SimonSapin
рдХреНрдпрд╛ рд╣рдо рдПрдХ рдирдП рдпреБрдЧ рдореЗрдВ рдлрд╝реЙрд▓рдмреИрдХ рдирд┐рдпрдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ ! 2015 рдХреЗ рдпреБрдЧ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ?
рд╣рд╛рдВ
@canndrew
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдПрдХ рдХреНрд░реЗрдЯрд░ рд░рди рдХрд┐рдпрд╛ рдерд╛ (рдЬреЛ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдерд╛) рдлреЙрд▓рдмреИрдХ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдирддреАрдЬрд╛ рдХрд╛рдлреА рдХрдо рдерд╛ред рд╣рдо рдЙрд╕ рдХреЛрдб рдХрд╛ рднреА рд╡рд┐рд░реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд░реЗрдЯрд░ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЧрдбреНрдврд╛ рд╣реА рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рджреЗрддрд╛ рд╣реИ - рдФрд░ рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ "рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди" рд╣реИред рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдФрд░ рд╣рдо рдЬрдВрдЧрд▓реА рдореЗрдВ рдХреЛрдб рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде "рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ"ред
рдЯреАрдПрд▓; рдбреАрдЖрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ
!
рдореВрд▓реНрдп рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИрдВ
рдпрд╣ рд╕рд┐рд░реНрдл рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рд╣реИ - рдЬрдм рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ "рдЗрд╕реЗ рдПрдХ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ" рдШрдмрд░рд╛рд╣рдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ "рдкреВрд░реНрд╡ рдЭреВрдард╛" рдпреВрдмреА рд╢рд╛рдорд┐рд▓ рд╣реИред
@ arielb1 рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ !
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐ fn absurd(x: !) -> !
рдЬреЛ рдХрд┐ рдкрд╣реБрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдпрд╛ рддреЛ рдХрд╣реАрдВ libstd рдореЗрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА рдерд╛ ... рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЖрд░рдПрдлрд╕реА рдореБрджреНрджрд╛: https://github.com/rust-lang/rfcs/issues/1385
@RalfJung рдХреНрдпрд╛ рд╡рд╣ absurd
рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ identity
? рдпрд╣ рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рд╣реИ?
рдпрд╣ unsafe fn unreachable() -> !
рдЖрдВрддрд░рд┐рдХ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд-рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред
рдЦреИрд░, рд╣рд╛рдБ, рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╣реИред рдореИрдВ "рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛" рдХреЗ рдЕрд░реНрде рдореЗрдВ !
рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред (рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ absurd
fn absurd<T>(x: !) -> T
, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрдВрдЧ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред)
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ " !
рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ - рдХрд╣реАрдВ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдиреЗ рдкрд░ "рдкреВрд░реНрд╡ рдЭреВрдард╛" рддрд░реНрдХ рдПрдХ рдЪреАрдЬ рд╣реИред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рднреА рдЧрд▓рдд рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ ... рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ "рдПрдХреНрд╕ рдлрд╛рд▓реНрд╕реЛ" рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдереАред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдБред
fn absurd<T>(x: !) -> T
рдХреЛ match x {}
рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд░рд╕реНрдЯрдбреЙрдХ рдФрд░ рдХрд┐рддрд╛рдм рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред
рдПрдлрдПрди рдмреЗрддреБрдХрд╛
(x: !) -> T рдХреЛ рдореИрдЪ x {} рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ libstd рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╕реБрдЭрд╛рдИ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдХрд╣рд╛рдВ рд╣реИред
absurd
рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рдХреИрд╕реЗ! рд░рд┐рдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдПрдХреАрдХрд░рдг, рдпрджреНрдпрдкрд┐ред
fn absurd<T>(x: !) -> T
рдХреЛmatch x {}
рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЗрд╕реЗ рдХреЗрд╡рд▓ x
(AFAIK) рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЦрд╛рд▓реА enum
рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ match
enum
ред
рдПрдХ absurd(x: !) -> T
рдлрд╝рдВрдХреНрд╢рди рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╡рд╛рдпрджрд╛ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ !
рдФрд░ рджреВрд╕рд░реА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ T
ред рднрд▓реЗ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ !
рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ T
рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ !
рдФрд░ T
рдПрдХрдЬреБрдЯ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдХрднреА рдХрднреА рдЖрдк рдлрд┐рд░ рднреА рдореИрдиреНрдпреБрдЕрд▓ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред
рдЗрд╕реА рддрд░рд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Result
-рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ .infallible()
рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ Result<T, !>
рдХреЛ Result<T, E>
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИред
рдкрд░рд┐рдгрд╛рдо рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрдХ .infallible() рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИ
рдирддреАрдЬреЗ рдкрд░ .
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ Result<T, !> -> T
рдЯрд╛рдЗрдк рдХрд░реЗрдЧреАред
рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реЛрдЧреА
-> рдЯреА.
рдХреНрдпрд╛ рдпрд╣ unwrap
рдЬреИрд╕рд╛ рд╣реА рдирд╣реАрдВ рд╣реИ? Err
рдорд╛рдорд▓рд╛ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдШрдмрд░рд╛рд╣рдЯ рдХреЛ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@Amanieu рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдШрдмрд░рд╛рд╣рдЯ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдкреИрдирд┐рдХ рд▓рд┐рдВрдЯ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЯреНрд░рд┐рдк рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд▓рд┐рдВрдЯ рдХреЗ рдмрд┐рдирд╛, unwrap
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдлреИрдХреНрдЯрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдлрд╝реБрдЯрдЧрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдХрдо рдЖрддрдВрдХ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЗрд╡ рдХреЛрдб рдмрди рдЬрд╛рддрд╛ рд╣реИред
unwrap
рдкрдврд╝рддрд╛ рд╣реИ рдЬреИрд╕реЗ assert
- "рд░рди-рдЯрд╛рдЗрдо рдЪреЗрдХ рдлреЙрд░рд╡рд░реНрдб" (рдЖрдИрдЖрдИрдЖрд░рд╕реА рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рдереЗ рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рдЖрдП ... рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ)ред рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд░рди-рдЯрд╛рдЗрдо рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ infallible
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдЧрд╛ред
:рдШрдВрдЯреА: рдЙрдкрд░реЛрдХреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдЕрдм рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ред рдШрдВрдЯреА:
@rfcbot FCP рд░рджреНрдж рдХрд░реЗрдВ
@aturon рдФрд░ @pkfelix рдиреЗ рдЕрдкрдиреЗ рдмреЙрдХреНрд╕ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдП рд╣реИрдВ.
@cramertj рдкреНрд░рд╕реНрддрд╛рд╡ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред
@rfcbot fcp рдорд░реНрдЬ
https://internals.rust-lang.org/t/psa-tweaks-to-fcp-process/6775
рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп @cramertj рдиреЗ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдмрд╛рдХреА рдЯреИрдЧ рдХреА рдЧрдИ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рд╣реИ:
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдореАрдХреНрд╖рдХреЛрдВ рдиреЗ рд╕реНрд╡реАрдХреГрддрд┐ рджреЗ рджреА (рдФрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ), рддреЛ рдпрд╣ рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдирдЬрд╝рд░ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдмреЛрд▓реЗрдВ!
рдЯреИрдЧ рдХреА рдЧрдИ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдореБрдЭреЗ рдХреНрдпрд╛ рдЖрджреЗрд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП
:рдШрдВрдЯреА: рдЙрдкрд░реЛрдХреНрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдЕрдм рдЕрдкрдиреА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ред рдШрдВрдЯреА:
рд╣рдордиреЗ рдЖрдЬ рдХреА рдмреИрдардХ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреЛ рд▓реЗрдХрд░ рдлрдЯрд╛ рд╣реБрдЖ рд░рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдлреЙрд▓рдмреИрдХ рдХреЛ рдЕрднреА рдмрджрд▓реВрдВ рдпрд╛ рдХреЗрд╡рд▓ рдирдП рдпреБрдЧ рдореЗрдВред рдпрд╣рд╛рдБ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдВрджреБ рд╣реИрдВред
рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рднрд╛рд╡ рдЫреЛрдЯрд╛ рд╣реИред рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рдкреВрд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╕рд╛рд░рд╛рдВрд╢ рдпрд╣ рд╣реИ:
рдФрд░ рд╡рд╣ рд╕рд┐рд░реНрдл рджреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рддрд┐рдЧрдорди рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ: oplog-0.2.0 (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ bson-0.3.2 рд╣реИ рдЬреЛ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ) рдФрд░ rspec-1.0.0-beta.4ред рдпреЗ рджреЛрдиреЛрдВ рдкреБрд░рд╛рдиреЗ рдлреЙрд▓рдмреИрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╡реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЯреВрдЯ рд░рд╣реЗ рд╣реИрдВ, рд░рди рдЯрд╛рдЗрдо рдирд╣реАрдВред рдореИрдВ рдЗрди рдХреНрд░реЗрдЯреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░реВрдВрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ (рдФрд░ рдПрдХ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ)ред рд╡рд╣рд╛рдБ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣реИ рдХрд┐ рд╣рдо рд╣реИ ()
рдПрдХ рдЕрдХреЗрд▓реЗ рдЧрд░реАрдм рд╡рд┐рдХрд▓реНрдк рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИ рдХреЛрдб рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЛ рд▓реЗрдХрд░ рд╣рдо рднреА рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЖрдЧрд╛рд╣ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджрд░реНрд╢рдирд╢рд╛рд╕реНрддреНрд░ рдХрд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИ: рдЕрддреАрдд рдореЗрдВ, рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреБрдЧрд╛рдВрддрд░рдХрд╛рд░реА рддрдВрддреНрд░ рд╣реИ, рддреЛ рдпрд╣ рд╣рдореЗрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдмрд╛рд╣рд░, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдХрднреА-рдХрднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рд╛рд▓реЛрдВ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдЖрджрд┐ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред
рдореИрдВ рдереЛрдбрд╝рд╛ рдлрдЯрд╛ рд╣реБрдЖ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрддреБрд▓рди рдкрд░, рдЖрдЧреЗ-рдкреАрдЫреЗ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ "рдЪрд▓реЛ рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рджреЗрдВ" рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрдХреНрд╖рдкрд╛рддреА рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ dyn Trait
рдФрд░ catch
рдЬреИрд╕реЗ рд╕рд╛рдорд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХ рдмрдЧрдлрд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХреВрджрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдХрд╣рддрд╛ рд╣реИ, "рдЖрд╣ рд╣рд╛! рдЬрдВрдЧ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрддреА рд╣реИ! 1.0 рд╣рд┐рдЯ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдерд┐рд░рддрд╛ рдХрд╛ рдЙрдирдХрд╛ рд╡рд╛рджрд╛ рдЭреВрда рдерд╛!" рддреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╣реБрдд рд╣реА рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдЪрд░реНрдЪрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдирдЧрдгреНрдп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рднреА рдерд╛ред
рдареАрдХ рд╣реИ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдЪрд▓реЛ рдЗрд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред
рдПрдХ рд╕рдордЭреМрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдиреЛрдЯ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ - рдкреНрд░рд╢рдВрд╕рдиреАрдп рд▓рдЧрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
!: Foo
рдЬреИрд╕реА рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдФрд░ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ (): Foo
рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдлрд╝реЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рд╣реИ (рд╣рдо рддреНрд░реБрдЯрд┐-рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ), рддреЛ рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдиреЛрдбредрдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдЕрд╡рдзрд┐ рдЕрдм рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИред
рдХреНрдпрд╛ рд╢реАрд░реНрд╖ рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рдВрдмрд┐рдд рдЪреЗрдХ рдмреЙрдХреНрд╕ рдЕрднреА рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ? рдХреНрдпрд╛ рдЙрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рдкреВрд░реНрд╡рд╡рдд рд╣реИ?
@earthengine рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬреЛ рджреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ - рд╢реАрд░реНрд╖ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП, рдЗрдореНрдкреНрд▓рд╛рдВрдЯреНрд╕ рдХреЗ рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╕рдордп рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рд╣реЛрдирд╛ред
@nikomatsakis рдореИрдВрдиреЗ рдЕрднреА рдпрд╣рд╛рдВ рд╕рд╛рд░рд╛рдВрд╢ рдореБрджреНрджрд╛ рдмрдирд╛рдпрд╛ рд╣реИ: https://github.com/rust-lang/rust/issues/48950
рдХреНрдпрд╛ !
рдПрдХ рдРрд╕рд╛ рдкреИрдЯрд░реНрди рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ !
рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛ? (рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдФрд░ рдореВрд▓ рдЖрд░рдПрдлрд╕реА рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рдд grep рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдорд┐рд▓рд╛)ред
рдореБрдЭреЗ рдпрд╣ StreamFuture
рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧрд╛ !
рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ map_err
, рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп map_err
рдХреЙрд▓ рд╕рдВрдХрд▓рди рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛
let foo: Result<String, (!, String)> = Ok("hello".to_owned());
рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛
let bar: Result<String, String> = foo.map_err(|(!, _)| unreachable!());
рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рдХреЗ рдмрдЬрд╛рдп
let bar: Result<String, String> = foo.map_err(|_| unreachable!());
рдпрд╛ рдереЛрдбрд╝рд╛ рдХрдо рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг
let bar: Result<String, String> = foo.map_err(|(e, _)| e);
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: https://github.com/rust-lang/rfcs/pull/1872 рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ !
рдкреИрдЯрд░реНрди рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ match
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрдВрдж/рдХрд╛рд░реНрдп рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
@ рдирд┐рдореЛ157
рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ! рдПрдХ рдкреИрдЯрд░реНрди рдЬреЛ рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ! рдкреНрд░рдХрд╛рд░?
рджрд┐рд▓рдЪрд╕реНрдкред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдл рдЖрдкрдХреЛ рдРрд╕реЗ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереА, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ - рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдирд╛ рдерд╛ - рддреЛ рднреА рдЖрдкрдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдореИрдЪ рдЕрдм рд╕рдВрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред !
рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдпрджрд┐ рдпрд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд╛рде рдЕрд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ; рд╣рдо рдЗрд╕рдХрд╛ рд╣рд┐рд╕рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╣рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред
рдЕрд╕рд▓ рдореЗрдВ, рдкрд╣реБрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдкреИрдЯрд░реНрди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рдЪрд┐рд╕ рдХреА рддреАрд▓реА рдЕрд╕рдВрднрд╡ рд╕рд╛рдмрд┐рдд рд╣реЛрддреА, рддреЛ рд╢рд╛рдпрдж рдмрд╛рдВрд╣ рдХреЗ рдЕрдВрджрд░ рдХреЗ рдХреЛрдб рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдлрд┐рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕
fn foo() -> Result<String, String> {
let bar: Result<String, (!, String)> = Ok("hello".to_owned());
Ok(bar?)
}
рдпрд╣ рдЖрдЬ рднреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрдЧрд╛ (_рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдХрд░реАрдм рд▓рдЧрддрд╛ рд╣реИ_)
fn foo() -> Result<String, String> {
let bar: Result<String, (!, String)> = Ok("hello".to_owned());
Ok(match Try::into_result(bar) {
Result::Ok(e) => e,
Result::Err(e) => return Try::from_err(From::from(e)),
})
}
рд▓реЗрдХрд┐рди Result::Err
рд╢рд╛рдЦрд╛ рдХреЛ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЖрдЬ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА the trait bound `std::string::String: std::convert::From<(!, std::string::String)>` is not satisfied
рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд░рдПрдлрд╕реА 1872 рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╣рд╛рде рд╣реИ рдЬреЛ рдЙрдерд▓рд╛ рдореИрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ !
рдореВрд▓реНрдп рдХреА рд╡реИрдзрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╕рдВрдмрджреНрдз рд╢рд╛рдЦрд╛ рдХреЛ "рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ" рддрдм рддрдХ рдЪрд▓рд╛рдПрдВ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рд╢рд╛рдЦрд╛ e.0
рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рди рдХрд░реЗред
!
рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреИрд╕реЗ bool
, рдЗрд╕рд▓рд┐рдП рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд▓реЛрдЬрд░ рддрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рдЙрд╕ рдкрд░ рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрд▓реЛрдЬрд░ bool -> u32
рдХреЛ (рдмрджрд╕реВрд░рдд рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕) [~ |false| 23, |true| 45 ~] -> u32
рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХреЗрдВ, рдлрд┐рд░ рдХрд┐рд╕реА рднреА рдЦрд╛рд▓реА рдкреНрд░рдХрд╛рд░ рд╕реЗ u32
рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ [~ ~] -> u32
рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЕрдкрдиреЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦреЗрдВ, рдЖрдк foo.map_err(|_: (!, _)| unreachable!())
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ foo.map_err(|(e, _)| e)
рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ unreachable!
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред
!
рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╣реИ
рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЖрдк рдХреНрдпрд╛ рд╕рдордЭрддреЗ рд╣реИрдВ ?
рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд▓реЛрдЬрд░ рддрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ
рддрд░реНрдХ рд╕реВрдЪрд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдХрд╛рдЯреНрдп рдЙрдк-рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
let foo: Result<String, ((), String)> = Ok("hello".to_owned());
let bar: Result<String, String> = foo.map_err(|((), s)| s);
рдореИрдВ рдХреЗрд╡рд▓ !
рдкреИрдЯрд░реНрди рдХреЛ рдПрдХ рдЕрдХрд╛рдЯреНрдп рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреВрдВрдЧрд╛ рдЬреЛ !
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА 0 рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ ()
рдПрдХ рдЕрдХрд╛рдЯреНрдп рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рд╕рднреА 1 рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ ()
рдкреНрд░рдХрд╛рд░ред
рдореИрдВ рд╕рд┐рд░реНрдл рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ! рдкреИрдЯрд░реНрди рдПрдХ рдЕрдХрд╛рдЯреНрдп рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ рдЬреЛ рд╕рднреА 0 рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ! рдкреНрд░рдХрд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ () рдПрдХ рдЕрдХрд╛рдЯреНрдп рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ () рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА 1 рдорд╛рдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди 0 != 1.;) !
рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдХреЛрдИ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╡реНрдпрд░реНрде рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ (!, i32)
, рддреЛ |(!, x)| code_goes_here
рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдХреЛрдб рд╡реИрд╕реЗ рднреА рдорд░ рдЪреБрдХрд╛ рд╣реИред рдореИрдВ рд╢рд╛рдпрдж рд▓рд┐рдЦрддреЗ рдереЗ |(x, _)| match x {}
рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП x
рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИ !
ред рдпрд╛, рдКрдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд absurd
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, |(x, _)| absurd(x)
ред рдпрд╛ рд╢рд╛рдпрдж |(x, _)| x.absurd()
?
рдХреЛрдИ рдПрдХ рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рдХреЛрдб @canndrew рдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред match
рдореЗрдВ рдХрд┐рддрдиреА рднреА рд╢рд╛рдЦрд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╢рд╛рдЦрд╛
рдмрд╣реБрдд рдмреБрд░рд╛ рд╣рдо рдЕрднреА impl<T> From<!> for T
рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред (рдпрд╣ From<T> for T
рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рди рд╣реЛ?) рд╣рдо рд╢рд╛рдпрдж рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред ( !
рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдореЗрдВ, рдХреБрдЫ рдЯреЛрдХрд░рд╛ From<!> for SomeConcreteType
рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред)
@SimonSapin рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ! рдпрд╣ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рджреЛрдиреЛрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХреА рд╣реИрдХ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рд╡реЗ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ "рдкрд░рд┐рдЪрд╛рд▓рди рдЕрд╕рдВрдЧрддрд┐" рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдПрдХрдмрд╛рд░рдЧреА рд╣реИрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛
рдлрд┐рд░ рдЙрд╕ рд╣реИрдХ рдХреЛ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЙрддрд░рдирд╛ рд╣реЛрдЧрд╛ред (рдпрд╛ рдмреАрдЯрд╛ рдХреЗ рджреМрд░рд╛рди рдмреИрдХрдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)
@SimonSapin рдРрд╕реА рд╣реИрдХ рдХрд┐рддрдиреА рдЬрд▓реНрджреА/рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИ? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рднреА From<!> for T
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо From<!> for SomeConcreteType
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реИрдХ рдХреНрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд┐рд╣рд╛рдИ рд╣реИ, рддреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рджреЛ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдирд┐рд╣рд┐рддрд╛рд░реНрдереЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ "рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ" рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛:
From::from
рдХреЛ default fn
рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ рдПрд╕рдЯреАрдбреА рдХреЗ рдмрд╛рд╣рд░ "рджреГрд╢реНрдпрдорд╛рди" рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдПрд╕рдЯреАрдбреА рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЕрд╕реНрдерд┐рд░ рд╣реИредрдпрд╣рд╛рдВ рджреЛ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдХреЛрд╣реЗрд░реЗрдВрд╕ рдЪреЗрдХ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рдмреЗрддрд╣рд╛рд╢рд╛ рдЕрд╕реНрд╡рд╕реНрде рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдареАрдХ рд╣реИред рд╕рдВрдХрд▓рди рдореЗрдВ рдХреБрдЫ рдШрдмрд░рд╛рд╣рдЯ рдХреА рдпрд╛рддреНрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреА рдЙрдореНрдореАрдж рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╢реБрдХреНрд░ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореМрдЬреВрджрд╛ RFC рд╣реИ "рдпрджрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдирд┐рд╣рд┐рддрд╛рд░реНрде рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИрдВ рддреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдУрд╡рд░рд▓реИрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ" рд╡рд┐рдЪрд╛рд░? рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдирд╣реАрдВред рдкреЗрдВрдбреЗрдВрдЯрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╕реНрд╡рдпрдВ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдВрджрд░ рдХреЗ рддрд░реАрдХреЗ рд╕рднреА рдЕрдЪреВрдХ рд╣реИрдВ (рдХреЛрдИ рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдпрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ "рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп" рд╣реЛрддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣реИрдХ рдРрд╕реА рдЪреАрдЬ рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИ рддреЛ рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ #49593 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЬреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ! рдмреЗрд╣рддрд░ рдЦреЛрдЬ рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЕрд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред
рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ T: From<!>
рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреМрди рд╕реЗ рдирд┐рд╣рд┐рддрд╛рд░реНрде !
рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ !
рд▓рд┐рдП рдЗрдореНрдкреНрд▓рд╛рдВрдЯ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЬрд╣рд╛рдВ рдРрд╕реА рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдХреНрд░реЙрд╕-рдкреЛрд╕реНрдЯрд┐рдВрдЧ:
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ - рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдлреЙрд▓рдмреИрдХ () рдХреЛ "рд╣реИ" рдХреНрдпреЛрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо () рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛ - рдФрд░ рд╡рд╛рдкрд╕ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛! рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд▓рдмреИрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ "рд▓рд╛рдЗрд╡" рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдмреЗрд╢рдХ рдЗрд░рд╛рджрд╛ рдЕрдиреНрдпрдерд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реАрдХ рдХреЛ рд░реЛрдХрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╛рдпрд╛ рд╣реИ)ред
рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рдкреНрд░рддрд┐рдЧрдорди рд╣реБрдП рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реВрдВ:
!
рдкрд░ рдЖ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореГрдд рдХреЛрдб рдирд╣реАрдВ рдерд╛ред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдпреЛрдЬрдирд╛ рдХреА рдЬреНрдЮрд╛рдд рд╡рд┐рдлрд▓рддрд╛ рд╣реИ, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ match foo { P1 => ..., P2 => return }
ред рд░рд┐рдЯрд░реНрди "рдлреЙрд▓ рдмреИрдХ рдЯреВ !
рдЯрд╛рдЗрдк рд╡реЗрд░рд┐рдПрдмрд▓" рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреВрд╕рд░реЗ рд╣рд╛рде рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ https://github.com/rust-lang/rust/issues/40801ред(рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд▓реИрдВрдЧ-рдЯреАрдо рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрдиред)
рдмреИрдардХ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ - рдореИрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рдЕрдирд┐рдЪреНрдЫреБрдХ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреБрдЫ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирдП рдирд┐рдпрдо рдмреЗрд╣рддрд░ рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ/рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рдФрд░ рдкреВрд░реА рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХреЗрдВред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдиреБрдХрд╕рд╛рди рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред @рдХреНрд░реИрдорд░реНрдЯрдЬ рдиреЗ Ok(33)
рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ Result<i32, !>
рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдЖрдЬ рдХрд░реЗрдЧрд╛; рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рддреЛ рдХрд╣ рд░рд╣реЗ рдереЗ рдХрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рд░рдЦрдиреЗ return
рдХреЗ рд░реВрдк рдореЗрдВ ()
рддрд░рд╣ рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдУрд░реНрдереЛрдЧреЛрдирд▓), рдФрд░ рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рд╕рдВрдШрд░реНрд╖ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рд╣реИред
Err
рдлреАрдбрдмреИрдХ (#40801) рдХреЗ рд╕рд╛рде рдЪреБрдиреМрддреА рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рднреА рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
let mut x = Ok(22);
x = Err(Default::default());
рдЬрд╣рд╛рдВ x
рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдВрддрддрдГ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Result<T, !>
ред
(? рдФрд░ рд╢рд╛рдпрдж рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдпрд╛ рддреНрд░реБрдЯрд┐) рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдпреЛрдЬрдирд╛ рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдпрд╣ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ !
, рдпрд╣ рдХрд╛рдлреА рдХрдард┐рди рд╕рд╛рдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд▓рдЧрддрд╛ рд╣реИ - рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХрднреА "рдкреНрд░рднрд╛рд╡рд┐рдд" рд▓рд╛рдЗрд╡ рдХреЛрдб рдЬреИрд╕реЗ рд╣рдо рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЛ рд▓рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдПрдХ, рдФрд░ рд╢рд╛рдпрдж @SimonSapin рдХрд╛ рдорд╛рдорд▓рд╛)ред
рдЗрд╕ рдмрд╛рдд рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдлреЙрд▓рдмреИрдХ рдХреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛?
FYI рдХрд░реЗрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдг 1.26: #49932 . рдореЗрдВ рдкреНрд░рддрд┐рдЧрдорди рд╣реБрдЖ
(https://github.com/rust-lang/rust/issues/35121#issuecomment-368669041 рдкреНрд░рддрд┐ рд▓реЗрдмрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ред)
рдХреНрдпрд╛ !
рдореЗрдВ рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдЖрдЗрдЯрдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп https://github.com/rust-lang/rust/issues/50350 рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╕реНрдерд┐рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реА рдКрд░реНрдЬрд╛ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдХрд╣рд╛рдВ рд╣реИ?
@remexre рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЛ рд╡рд╛рдкрд╕ https://github.com/rust-lang/rust/issues/49593 рдкрд░ рд╣реИ
рддреЛ рдХреНрдпрд╛ рдПрдХ рдЙрдк-рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖-рдХреЗрд╕ рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛
рдбрд┐рдмреНрдмрд╛
рд╕реВрд░реНрдп рдкрд░, рдЬреБрд▓рд╛рдИ 8, 2018, 8:12 рдкреВрд░реНрд╡рд╛рд╣реНрди рд░рд╛рд▓реНрдл рдЬрдВрдЧ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@remexre https://github.com/remexre рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ
рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдкреВрд░реНрд╡рд╡рдд рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рд╡рд╣ #49593 . рдкрд░ рд╣реИ
https://github.com/rust-lang/rust/issues/49593-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редрдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rust-lang/rust/issues/35121#issuecomment-403286892 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AEAJtcnsEaFmHrrlHhuQeVOkR8Djzt50ks5uEgVLgaJpZM4JYi9D
.>
рдзрдиреНрдпрд╡рд╛рдж,
рдирд╛рдерди
рдЙрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ https://github.com/rust-lang/rust/issues/49593 рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ Box::<T>::new
рд▓рд┐рдП T: Sized
, рд▓реЗрдХрд┐рди рд╡рд╣ new
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ T = Error
(рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдбреАрдПрд╕рдЯреА) рд╣реЛрдиреЗ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИред
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреА рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг Box::new
рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ:
Box::new : T -> Box<U>
where T <: U,
T: Sized
рдпрд╛
Box::new : T -> Box<U>
where Box<T> <: Box<U>,
T: Sized
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ !
рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧрдгрд┐рддрдЬреНрдЮ Inf
рдЬреИрд╕рд╛ рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ usize::MAX
, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдХрдо рд╕реЗ рдХрдо panic
ред
рдпрджрд┐ !
Sized
рддреЛ, рд╣рдореЗрдВ Box::new(x as !)
рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ panic!
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ usize::MAX
рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВред
рдпрд╣ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ !
рдореЗрдВ рдЕрдирдВрдд/ usize::MAX
рдЖрдХрд╛рд░ рдмрдирд╛рдо ZST рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
use std::mem::size_of;
enum Void {}
fn main() { println!("{}", size_of::<Void>()); }
рд╡рд░реНрддрдорд╛рди рдореЗрдВ 0 рд╣реИред
рдкреНрд░рд╕реНрддреБрдд рдкрд╛рда рдореЗрдВ рддрд░реНрдХ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
bool
: рджреЛ рдорд╛рдиреНрдп рдорд╛рди => рд▓реЙрдЧ(2)/рд▓реЙрдЧ(2) = 1 рдмрд┐рдЯ
()
: 1 рдорд╛рдиреНрдп рдорд╛рди => рд▓реЙрдЧ (1)/рд▓реЙрдЧ (2) = 0 рдмрд┐рдЯ
!
: 0 рдорд╛рдиреНрдп рдорд╛рди => рд▓реЙрдЧ(0)/рд▓реЙрдЧ(2) = рдЗрдВрдл рдмрд┐рдЯреНрд╕
рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдкрд╛рд░рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдореИрдВ log(x)/log(y)
рдлреЙрд░реНрдореВрд▓реЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реБрдЖ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреА рд╣рд╛рдирд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдореЙрдбрд▓ рдХреА рд╢рд╛рди рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдирд╛ рд╣реИред (рдПрдХреЗрдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрд▓реЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЪрд╛рд▓рд╛рдХ рд╣реИ)
рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ !
рднреА рд╢реВрдиреНрдп-рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐:
bool
: рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреЛ рдорд╛рдиреНрдп рдорд╛рдиреЛрдВ => рд▓реЙрдЧ (2)/рд▓реЙрдЧ (2) = 1 рдмрд┐рдЯ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ()
: рдПрдХ рд╡реИрдз рдорд╛рди рдореЗрдВ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ => рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдкрд░реЗ рдХрд┐рд╕реА рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
: рдХреЛрдИ рдорд╛рдиреНрдп рдорд╛рди рднреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ => рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдкрд░реЗ рдХрд┐рд╕реА рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИрд╡реИрд╕реЗ рдпрд╣ -рдЗрдирдлрд┐рдирд┐рдЯреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреИрд╕реЗ ! рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ ! рд╕рд╛рде рд╣реА (c + -inf = -inf)ред рдЗрд╕рд▓рд┐рдП рдЪреВрдВрдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, 0 рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рдореВрд▓реНрдп рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ rustc рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди -inf рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред
рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
!
рднреА рд╢реВрдиреНрдп-рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
!
рдХреЛ рдЖрдХрд╛рд░ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрднреА рднреА рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИред
0 рдорд╛рдиреНрдп рдорд╛рди => рд▓реЙрдЧ(0)/рд▓реЙрдЧ(2) = рдЗрдВрдл рдмрд┐рдЯреНрд╕
рд▓реЙрдЧ (0) рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ; рдпрд╣ рдЕрдирдВрдд рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░реА рдУрд░, usize::MAX
рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдирд┐рд░реНрд╡рд╛рд╕рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрдард┐рди рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд?
@CryZe @varkor
рдпрд╣ рдЙрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рднреА рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореИрдВ рд╡реИрдзрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди !
рдХреЛ "рдкреВрд░реЗ рд╕реНрддрд░ рдкрд░ ZST" рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред (рдпрд╛рдиреА !
рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ()
рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рд╣реИред)
@CryZe
рдЖрдкрдХрд╛ рд╕реВрддреНрд░ -Inf + c == -Inf
рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм -Inf
рдХреЛ 0usize
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЕрдВрдХрдЧрдгрд┐рдд "рдХреИрдкреНрдб" рд╣реИ: рдХреЛрдИ рднреА рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ usize::MAX
рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ usize::MAX
рд╕реВрддреНрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИред
рдорд╕реНрддрд┐рд╖реНрдХ рдореЙрдбрд▓: рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ !
рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реИ, рддреЛ рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЖрдкрдХреЛ !
рд╕реЗ рднреА рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдВрд░рдЪрдирд╛ рдЖрдХрд╛рд░ usize::MAX
. рддреЛ рдЖрдкрдХреЛ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдЕрднреА рднреА usize::MAX
ред
рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ "рдХреНрд▓реИрдВрдк" рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ ( !
, рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд enum Void {}
) рд╕реЗ size=0,alignment=0
? рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдордЭрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ ...
@remexre
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: sizeof(Result<usize,!>) == sizeof(usize)
ред
рдЦреИрд░, Result<usize, !>
!
рд╕реАрдзреЗ sizeof(Result::Ok(usize)) == 8
, sizeof(Result::Err(!)) == 0
рдирд╣реАрдВ, рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ sizeof(Result::Err(!)) == usize::MAX
, рдХреНрдпреЛрдВрдХрд┐ Result::Err(!) :: Result<!,!>
ред
рдирд┐рдпрдо рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: enum
s рдореЗрдВ, !
рдЖрдХрд╛рд░ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдЖрдХрд╛рд░ рдорд╛рдиреЛрдВ рд╕реЗ рдХрдо рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди structs
, рдпрд╣ рдЕрдм рддрдХ рдХреА рдЫрд╡рд┐ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖:
!
рдбреАрдПрд╕рдЯреА рдирд╣реАрдВ рд╣реИред рдбреАрдПрд╕рдЯреА Sized
рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЫрд┐рдкреА рд╣реБрдИ рд╣реИред рд▓реЗрдХрд┐рди !
рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВред!
рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рд▓рд┐рдП Box::new(x as !)
рдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПредstruct
s рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ !
рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ !
, enum
s рдореЗрдВ !
рд╕реАрдзреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИредрдпрд╛ рддреЛ рд╣рдо sizeof(!)==0
рдпрд╛ sizeof(!)==usize::MAX
, рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЕрдВрдХрдЧрдгрд┐рдд рдкреЗрд╢ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:
sizeof(!)==0
: рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдореЗрдВ, 0 + n = 0
: рдЪрд┐рдВрддрд┐рдд:, рдПрдирдо рдореЗрдВ, max(0,n) = n
: рдмреНрд▓рд╢:ред
sizeof(!)==usize::MAX
: рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдореЗрдВ, usize::MAX + n =usize::MAX
:neutral_face:, enums рдореЗрдВ, max(usize::MAX,n) = n
: flushed:.
рд╣рд╛рд▓рд╛рдВрдХрд┐ usize::MAX
рд▓рд┐рдП рдПрдХ рд▓рд╛рдн рд╣реИ: рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдпрд╛рд╕ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ unsafe
рд╡рд╛рд▓реЗ рднреА, рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдн рд╣реИ :: рдореИрдХреНрд╕ рд╣рд╛рд▓рд╛рдВрдХрд┐: рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдпрд╛рд╕ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рднреА, рдРрд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЕрдЧрд░ unsafe
рд╢реЗрдВрдЧреЗрдирд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ: *transmute::<Box<usize>, Box<!>>(Box::new(0))
рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ !
ред usize::MAX
рдпрд╣ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ std::mem::zeroed<!>()
рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдбрд╛рд▓ рджреВрдВрдЧрд╛ рдЬреЛ рдЧрдгрд┐рдд рдХреЗ рдмрдЬрд╛рдп рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рдКрдкрд░ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ !
рдХрд╛ рдЖрдХрд╛рд░ _actually_ 0
-- рди рддреЛ MAX
рдФрд░ рди рд╣реА -INF
-рд╕реЗрдЪреБрд░реЗрдЯреЗрдб-рдЯреВ-0 - рдХреЛ рдЖрдВрд╢рд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдерд╛ https://github.com/rust-lang/rust/issues/49298#issuecomment -380844923 (рдФрд░ https://github.com/rust-lang/rust/pull/50622 рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд) рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ред
рдпрджрд┐ рдЖрдк рдпрд╣ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдпрд╛ рдкреАрдЖрд░ рдмрдирд╛рдПрдВ; рдпрд╣ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред
@remexre
Box::new : T -> Box<U> where T <: U, T: Sized
Box
(рдЬреНрдпрд╛рджрд╛рддрд░) рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреА new
рд╡рд┐рдзрд┐ рдХреЛ src/liballoc/boxed.rs
рдореЗрдВ рд░рд╕реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╡рд┐рд╡рд░рдг рдПрдХ <:
рдСрдкрд░реЗрдЯрд░ рдорд╛рдирддрд╛ рд╣реИ рдЬреЛ рдЬрдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рд╕рдмрдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗрд╡рд▓ рдЖрдЬреАрд╡рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
!
рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдордЬреЛрд░ рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА 'a
рдХреЗ рд▓рд┐рдП Vec<&'static Foo>
рднреА Vec<&'a Foo>
, рд▓реЗрдХрд┐рди Vec<!>
рд╕реЗ Vec<Foo>
рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реИ: http:/ /play.rust-lang.org/?gist=82d1c1e1fc707d804a57c483a3e0198f&version=nightly&mode=debug&edition=2015)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк unsafe
рдореЛрдб рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЙрдЪрд┐рдд рд╕рдордЭрддреЗ рд╣реИрдВ рд╡рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдпреВрдмреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ !
рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЖрдХрд╛рд░ usize::MAX
, рддреЛ рдЗрд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдЪреЗрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрднреА рднреА рддреНрд╡рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рдВрд░реЗрдЦрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ usize::MAX
, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрд░реЗрдЦрдг рднреА usize::MAX
рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рд╡реИрдз рд╕реВрдЪрдХ рдХреЛ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдЕрдорд╛рдиреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рднреА рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред
@рд╕реНрдХреЙрдЯрдПрдмреА
рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ Box::new(x as !)
рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рди рд╣реЛ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХрд╛ !
рдХрд╛ рдЖрдХрд╛рд░ рдмрдирд╛рдирд╛ рд╣реИред рдпрджрд┐ ZST рдорд╛рдирдХ рд╣реИ рддреЛ рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЕрдм рдФрд░ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдмрд╕ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдХрд┐ sizeof(!)==0
рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреЛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ::MAX
usize::MAX
рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╡реИрдз рд╕рдВрд░реЗрдЦрдг рдирд╣реАрдВ рд╣реИред рд╕рд╛рде рд╣реА, LLVM 1 << 29
рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ !
рд╡реИрд╕реЗ рднреА рдмрдбрд╝рд╛ рд╕рдВрд░реЗрдЦрдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ let x: (!, i32); x.1 = 4;
рдХреЛ рдХреЗрд╡рд▓ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕реНрдЯреИрдХ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЧреАрдЧрд╛рдмрд╛рдЗрдЯреНрд╕-рдпрд╛-рдЕрдзрд┐рдХ рдирд╣реАрдВред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕реВрддреНрд░ @earthengine рдмрдирд╛рдПрдВ ред
рдпрд╣рд╛рдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ Box::new(!)
рдПрдХ Box<$0>
рдЬрд╣рд╛рдВ рд╣рдо Box<Error>
рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ Box<$0>
рдХреЛ Box<Error>
рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдмрд╛рдж рдореЗрдВ рд╣рдореЗрдВ $0
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ !
рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, $0
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрддреА рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ $0 = Error
ред
рдЪреАрдЬреЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ hacky рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХреА рдЬрд╛рдПрдЧреА рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрд╛рдзрд╛ $0: Sized
(рдЙрдкрдкреНрд░рдХрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд?) рдФрд░ рдПрдХ рдмрд▓рд╛рддреНрдХрд╛рд░ рдЙрд╕ рдкрд░ keyed рдбрд╛рд▓рдиреЗ, рддрд╛рдХрд┐ Box
рдЕрднреА рднреА рдкреНрд░рдХрд╛рд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд░рддреЗ рд╣реИрдВ Fn
рдмрдВрдж рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЦрд┐рдВрдЪрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрднреА рднреА рдмрджрд╕реВрд░рддред
рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рджреМрд░рд╛рди рд╣рдо рдлреЙрд░реНрдо рдХреЗ рджрд╛рдпрд┐рддреНрд╡ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ $0: Unsize<Y>
рдЬрд╣рд╛рдВ Y
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдХрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ $0
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рди рдорд╛рдиреЗрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ "рдареАрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВ рдФрд░ рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВред
@ рдПрд░рд┐рдпрд▓рдм1
рддреЛ рдпрд╣ рдХреИрд╕реЗ Box::new(())
рд╕реЗ Box<Debug>
рдЬрдмрд░рджрд╕реНрддреА рд╕реЗ рдЕрд▓рдЧ рд╣реИ? std::error::Error
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреИрд╕реЗ Debug
, рди рдХрд┐ [u8]
рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░ред рджреВрд╕рд░реА рдУрд░ std::io::Error
рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Sized
ред
рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХрднреА рднреА рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ:
use std::fmt::Debug;
fn f(x:()) -> Box<Debug> {
Box::new(x)
}
fn main() {
}
@earthengine рдЗрд╕ рдореБрджреНрджреЗ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИ:
| рд▓рд┐рдЦрд┐рдд | Box::new(!): Box<Debug>
| Box::new(()): Box<Debug>
|
| ------ | ------ | ------- |
| рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ | Box::new(! as Debug): Debug
| (Box::new(()) as Box<Debug>): Debug
|
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ !
рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ Debug
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Box::new
ред рдпрд╣ ()
рд╕рд╛рде рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - Box::new
рдмрд╛рдж рд╡рд╣рд╛рдВ рдЬрдмрд░рджрд╕реНрддреА рд╣реЛрддреА рд╣реИред
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ
рдореЗрд░рд╛ рджрд┐рдорд╛рдЧреА рдореЙрдбрд▓ рдпрд╣ рд╣реИ рдХрд┐ рдбреАрдПрд╕рдЯреА рдЬрдВрдЧрд▓реА рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ - рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдФрд░ рдареЛрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдЖрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рддрдм рднреА рд╕рдЪ рд╣реИ рдЬрдм рд╣рдо рдбреАрдПрд╕рдЯреА рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдпрджрд┐ рд░рд┐рдЯрд░реНрди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЬрдм рддрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реВрдЪрдХ рдХреЗ рдкреАрдЫреЗ рд░рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдПрдХ рдбреАрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдпрд╣ !
ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
let v: str = !;
let v: [u8] = !;
let v: dyn Debug = !;
рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдк !
рдХреЛ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рд░рд╕реНрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдпрд╣ () рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ
рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВ? рдпрджрд┐ () as dyn Debug
рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ ! as dyn Debug
рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред &() as &Debug
рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП &! as &Debug
, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ () as dyn Debug
рдХрд┐рд╕реА рджрд┐рди рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╡рд╣ ()
рд▓рд┐рдП рджреЛрд╣рд░рд╛рдИ рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП DST RFC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдХреЗ рдХрд╛рд░рдг рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ !
ред
!
рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдЕрд╕рдВрднрд╡ рд╣реИред "рдкреВрд░реНрд╡ рдлрд╛рд▓реЛ рдХреНрд╡реЛрдбрд▓рд┐рдмреЗрдЯ"ред рддреЛ рдЖрдкрдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд
рдпрд╣ "рдбреАрдЯреАрдПрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛" рдХрд╛ рднреА рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ !
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред :)
() as dyn Debug
рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рд╕рдВрдХрд▓рди рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ !
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрдб рдХреЛрдб рдореЗрдВ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ (рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ @ arielb1 рдиреЗ рдКрдкрд░ рднреА рдпрд╣реА рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реЛ): рдХреНрдпрд╛ !
рдЬрдмрд░рджрд╕реНрддреА рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░ (рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЖрдХрд╛рд░ рдХрд╛ рд╣реЛ ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред :D рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рдХрд╣рд╛ "рдбреАрдЯреАрдПрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛" рдореЗрд░рд╛ рдорддрд▓рдм рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рдореЗрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, str
рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░реА рдУрд░, !
рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╢рдмреНрджрд╛рд░реНрде рд╣реИред рддреБрдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реЛ
let v = exit(0);
рд╕рдВрджрд░реНрдн рдореЗрдВ v
рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ !
рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдмрд╛рдзреНрдпрдХрд╛рд░реА рднреА рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред
рддреЛ рдпрд╣рд╛рдВ рдХрд╛рд░рдг рд╣реИ: рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП !
рдЬрдмрд░рджрд╕реНрддреА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЬрдм рдЖрдк рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд╡рд▓реНрдпреВрдЬрд╝ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд╡реЗрд▓реНрдпреВ рд╣реЛрдВ, !
рдХреЛ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдЯрд╛рдЗрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗред рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди Box::new
рдХреЛ рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ str рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реИ: https://github.com/rust-lang/rust/issues/48055
@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ
рдпрд╣ рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рджреЛрдмрд╛рд░рд╛, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ Box::new(!: $0): Box<dyn fmt::Debug>
рдЬрд╣рд╛рдВ $0
рдПрдХ рдкреНрд░рдХрд╛рд░ рдЪрд░ рд╣реИред
рддрдм рд╕рдВрдХрд▓рдХ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ $0: Sized
(рдХреНрдпреЛрдВрдХрд┐ $0
Box::new
рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ T: Sized
рдмрд╛рдзреНрдп рд╣реИ)ред
рд╕рдорд╕реНрдпрд╛ рддрдм рдЖрддреА рд╣реИ рдЬрдм рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ Box<$0>
рдХреЛ Box<dyn fmt::Debug>
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрдмрд░рджрд╕реНрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред "рд╕реНрдерд╛рдиреАрдп" рдкреАрдУрд╡реА рд╕реЗ, 2 рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
CoerceUnsized
рдЬрдмрд░рджрд╕реНрддреА рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Box<$0>: CoerceUnsized<Box<dyn fmt::Debug>>
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ $0 = !
рд▓рд┐рдП рдПрдХ рд╡реИрдз рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдФрд░ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред$0 = dyn fmt::Debug
рд╕рд╛рде рдПрдХ рдкрд╣рдЪрд╛рди рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд░реЗрдВред рдпрд╣ $0: Sized
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИредрдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп рд╕рдВрдХрд▓рдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рди рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рдФрд░ рд╣рд╛рд░реНрдб-рдЯреВ-рдбреАрдмрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рджреЛрдиреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЪреБрдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЬрдмрд░рджрд╕реНрддреА рдХрд╛рдлреА рдмреЗрд╡рдХреВрдл рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдбреЙрди T: CoerceUnsized<T>
, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк 1 рдЪреБрдирддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ "рдЕрдЯрдХ" рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдпрд╣ рд╡рд┐рдХрд▓реНрдк 2 рдЪреБрдирдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕реНрдорд╛рд░реНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рдХрд▓реНрдк 1 рдЪреБрдирдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред
рддреЛ рдЗрд╕ рдкреАрдУрд╡реА рд╕реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╕рд╣реА рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдЬрд╝рдмрд░рджрд╕реНрддреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрджрд┐
$0 = dyn fmt::Debug рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╣рдЪрд╛рди рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд░реЗрдВред рдпрд╣ $0: рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред
рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдпрд╣ рджреЗрдЦ рд╕рдХреВрдВ рдХрд┐ рд╣рдореЗрдВ let v: str=!
рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди let v: str;
ред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ (рд╢рд╛рдпрдж рдЕрд╕рдВрднрд╡) рдорд╛рди рдХреНрдпреЛрдВ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВ?
рдЬрдм рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд╡рд▓реНрдпреВ рдХреЛ рд╢рд┐рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реБрд╕рдВрдЧрдд рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рдЬрдмрд░рджрд╕реНрддреА рдХреЛ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рди рджреА рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ (рд╢рд╛рдпрдж рдЕрд╕реНрдерд╛рдпреА) рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛, рддрдм рднреА рдЬрдм рдпрд╣ рдХреЗрд╡рд▓ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рддреЛ рдореЗрд░рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ Box::new(!) as Box<Error>
рд╕рдорд╕реНрдпрд╛ рдЖрдХрд╛рд░рд╣реАрди рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд░реБрджреНрдз рдореБрджреНрджрд╛ рд╣реИ, рди рдХрд┐ !
рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПред !
рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рдирд┐рдпрдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
рдЖрдк
let v: T
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрдкlet v: T = !
рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдерд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде рддрдм рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Box::new(! as dyn Debug)
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдирд╣реАрдВред
рддреЛ рд╣рдо рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХреЛрдб рдкрд░ рдПрдХ рдлреАрдЪрд░ рдЧреЗрдЯ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдЬрд╝рдмрд░рджрд╕реНрддреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд╡реЗрд▓реНрдпреВ рдЪрд╛рд▓реВ рд╣реИ, рддреЛ рдЗрд╕ рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛, рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред рдпрджрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрдкрд▓рдмреНрдз рдЬрдмрд░рджрд╕реНрддреА рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ "рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд╛рдзреНрдп str: std::marker::Sized
рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдЗрд╕рд▓рд┐рдП
рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдмрд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реБрд╡рд┐рдзрд╛ рдЬрд╛рдБрдЪред
рдЗрд╕ рдмреАрдЪ, рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдареАрдХ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рджрд┐рд▓рдЪрд╕реНрдкред
рдЗрд╕
fn main() {
let _:str = *"";
}
рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
fn main() {
let v:str = *"";
}
рдирд╣реАрдВред рдпрд╣ !
рдкреНрд░рдХрд╛рд░ рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореБрджреНрджрд╛ рдмрдирд╛рдКрдВ?
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╣ рдЖрдЦрд┐рд░реА рд╡рд╛рд▓рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВред рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдирд╛ рдЖрдХрд╛рд░ рдХреЗ рд░реИрд╡рд▓реНрдпреВ рд╕рдорд░реНрдерди рдХреЗ, рд╕рдВрдХрд▓рдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдЪрд░ v
рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕реНрдЯреИрдХ рд╕реНрдерд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдбреАрдПрд╕рдЯреА рд╣реИред
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, _
рдкреИрдЯрд░реНрди рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╣реИ рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЪрд░ рднреА рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рддреЛ рд╡рд╣ рдХреЛрдб рд╕рдорд╛рди рд╣реИ fn main() { *""; }
рдмрд┐рдирд╛ let
ред рдПрдХ рд╕рдВрджрд░реНрдн (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдбреАрдПрд╕рдЯреА) рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╣реАред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
fn main() {
let _v:str = *"";
}
рд╕рдВрдХрд▓рд┐рдд рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде _
рдпрд╣ рд╡рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╣рдо рдЕрдкреНрд░рдпреБрдХреНрдд рдЪреАрдЬрд╝ рдХреЛ _v
рдмрдЬрд╛рдп _
ред
рдореБрдЭреЗ рдЬреЛ рдпрд╛рдж рд╣реИ, рдЙрд╕рд╕реЗ _v
рдФрд░ v
рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рдореБрдЦ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджрдмрд╛ рджреЗрддрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, _
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд░реНрде рд╣реИ "рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ" рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреБрдкрд▓ рдЕрдирдкреИрдХ, рддрд░реНрдХ рд╕реВрдЪреА, рдЖрджрд┐) рдмрд┐рдирд╛ рдХрд╛рд░рдг рдХреЗ рдПрдХ рдирд╛рдо рдЯрдХрд░рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ред
рджреВрд╕рд░реА рдУрд░, _ рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд░реНрде рд╣реИ "рдЗрд╕реЗ рддреНрдпрд╛рдЧреЗрдВ" рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдкреИрдЯрд░реНрди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрдкрд▓ рдЕрдирдкреИрдХ, рддрд░реНрдХ рд╕реВрдЪреА, рдЖрджрд┐) рдмрд┐рдирд╛ рдХрд┐рд╕реА рдирд╛рдо рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯрдХреНрдХрд░ред
рд╕рд╣реАред рдЖрдкрдиреЗ рдЬреЛ рдХрд╣рд╛ рдЙрд╕рдХреЗ рдКрдкрд░, let _ = foo()
рдУрд░ рдЬрд╛рддрд╛ рд╣реИ drop
рдХреЛ рддреБрд░рдВрдд рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ _v
рдХреЗрд╡рд▓ рддрднреА рдЧрд┐рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ v
)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, " _
рд╡рд┐рд╢реЗрд╖ рд╣реИ" рд╕реЗ рдореЗрд░рд╛ рдпрд╣реА рдорддрд▓рдм рд╣реИред
рддреЛ рдЕрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдВрдЧрд▓реА рдореЗрдВ рд╕рднреА рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ (рдЬрдм рддрдХ рдХрд┐ рдлреАрдЪрд░ "рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝" рдЪрд╛рд▓реВ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛) рдХреЛ рдирдХрд╛рд░рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рднрд╛рд╡ рдмрд╣реБрдд рдХрдо рд╣реЛрдЧрд╛ред
рдореИрдВ рддрдм рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ !
рд▓реЗрдХрд░ рдЕрдирд╕рд╛рдЗрдЬреНрдб рд░реИрд▓реНрдпреВрдЬ рддрдХ рдЬрдмрд░рджрд╕реНрддреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреАрдЪрд░ рдЧреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ let _:str = return;
рдЬреИрд╕реЗ рдХреЛрдб рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рдЬрдм рддрдХ !
рдкреНрд░рдХрд╛рд░ рдЕрд╕реНрдерд┐рд░ рд╣реИ, рд╣рдо рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЬрд╝рдмрд░рджрд╕реНрддреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо https://github.com/rust-lang/rust/issues/49593 рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдмрд░рджрд╕реНрддреА рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬрдм рд╣рдо рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рд╣рдо https://github.com/rust-lang/rust/issues/49593 рдлрд┐рд░ рд╕реЗ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ?
рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред # 49593 рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡рд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд░реБрджреНрдз рдореБрджреНрджрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реБрдЭрд╛рд╡ рд╣реИ, Box::new
(рдЗрд╕рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЛ рдЕрдирд╕рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рджреЗрдВ, рдФрд░ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
FWIW, _
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░ рдирд╛рдо рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ ред рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкреИрдЯрд░реНрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдЬреЛ рдорд┐рд▓рд╛рди рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд╣реАрдВред
рд╡реЗрд░рд┐рдПрдмрд▓ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм ref _x
, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдЙрдзрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж NLL рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
// The type `str` is the type of the place being matched. `x` has type `&str`.
let ref x: str = *"foo";
// Fully equivalent to this:
let x: &str = &*"foo";
@eddyb
рдЖрдкрдХреЛ рдореЗрд░реА рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдИред рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рднреА рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ рдХреЛрдб рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реЗ let _:str = *""
рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдореВрд▓реНрдп рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕реНрддрд░ рдореЗрдВ рдпрд╣ рд░рд╣рддрд╛ рд╣реИред рднреВрдд рдЬреИрд╕рд╛ рдХреБрдЫ...
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдХрд╛рдиреВрдиреА рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред str
рд╣реИ, рд▓реЗрдХрд┐рди &str
рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡реЗ let _:str = *"" рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдореВрд▓реНрдп рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕реНрддрд░ рдореЗрдВ рдпрд╣ рд░рд╣рддрд╛ рд╣реИред рднреВрдд рдЬреИрд╕рд╛ рдХреБрдЫ...
&*foo
рдЬреИрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд╕рдорд╛рди "рднреВрдд" рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЖрдк foo
рдбреАрд░реЗрдлрд░реЗрдВрд╕ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрд┐рдирд╛ рд╣рд┐рд▓рд╛рдП рдЙрд╕рдХрд╛ рдкрддрд╛ рд▓реЗрдВ ред рддреЛ рдпрд╣ & { *foo }
рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
@earthengine @SimonSapin рд╡рд╣рд╛рдВ рдХреЛрдИ рдЕрдирд╕рд╛рдЗрдЬрд╝реНрдб рд░реИрд▓реНрдпреВрдЬрд╝ ("рд╡реИрд▓реНрдпреВ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди") рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдЕрдВрддрд░рд╛рд▓ ("рд╕реНрдерд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐") рдХрд░рддреЗ рд╣реИрдВред *"foo"
рдПрдХ рдЬрдЧрд╣ рд╣реИ , рдФрд░ рдкреИрдЯрд░реНрди-рдорд┐рд▓рд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдЬрдЧрд╣ рд╣реИред
рдирд╛рдо "рд▓рд╛рд╡рд▓реНрдпреВ" рдФрд░ "рд░рд╛рд╡рд▓реНрдпреВ" рдЕрд╡рд╢реЗрд╖ рд╣реИрдВ рдФрд░ рд╕реА рдореЗрдВ рднреА рдХреБрдЫ рд╣рдж рддрдХ рднреНрд░рд╛рдордХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рд╕реНрдЯ рдореЗрдВ рдФрд░ рднреА рдмрджрддрд░ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдирд╛рдо рдХреЗ рдмрд╛рд╡рдЬреВрдж let
рдХрд╛ рдЖрд░рдПрдЪрдПрд╕ рдПрдХ "рд▓рд╛рд╡рд▓реНрдпреВ" (рд╕реНрдерд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рд╣реИред
(рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕реА рдирд╛рдо рдФрд░ рдирд┐рдпрдо рдЬрдВрдЧ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ)
рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, let x = *"foo";
, рдЗрд╕реЗ x
рд╕реЗ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕реА рддрд░рд╣, &*"foo"
рдПрдХ рдЬрдЧрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдЙрдзрд╛рд░ рд▓реЗрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ, рдЬрдмрдХрд┐ {*"foo"}
рд╣рдореЗрд╢рд╛ рдПрдХ рдореВрд▓реНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрд╕реАрдорд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
https://github.com/rust-lang/rust/pull/52420 рдореЗрдВ рдореИрдВрдиреЗ рд╡рд╣ рдорд╛рд░рд╛
let Ok(b): Result<B, !> = ...;
b
рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ?
AFAIK рд╣рд╛рдБ - рдЕрдЪреВрдХ рдкреИрдЯрд░реНрди рдХрд╣рд╛рдиреА рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ !
рд╕реЗ рдЕрд▓рдЧ рдлреАрдЪрд░ рдЧреЗрдЯ рд╣реИред https://github.com/rust-lang/rfcs/pull/1872 рдФрд░ https://github.com/rust-lang/rust/issues/48950 рднреА рджреЗрдЦреЗрдВ
@ Ericson2314 рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╣ рд╕реБрд╡рд┐рдзрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ liballoc
рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рд╡рд╣ рд╣реИ exhaustive_patterns
ред
рдзрдиреНрдпрд╡рд╛рдж!!
рдЗрдВрдЯрд░реНрдирд▓ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддрдЪреАрдд:
rust
fn make_iter() -> impl Iterator<Item=u32> {
unimplemented!() // Error: ! does not implement Iterator
}
!
рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ Iterator
рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред<! as Trait>::Assoc
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ редfn foo<T:Trait>() -> (T::Assoc, T::Assoc)
рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИредtypemap
рдЯреЛрдХрд░рд╛ рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рдПрдЧрд╛редрдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд▓рд╛рдЬ рдХреНрдпреЛрдВ рдирд╣реАрдВ! рдЦреБрдж рдХреЛ рдПрдХ рдЕрдиреБрдорд╛рди рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ?
рдЖрдЗрдЯрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ !
рд╕рд╛рде PhandomData
рд╕рд╛рде рдПрдХ рд░реИрдкрд░ рдмрдирд╛рдПрдВред
https://github.com/rust-lang/rust/issues/49593 рдЕрдм рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреА рд╡рд╛рдкрд╕реА рдХрд╛ рдпрд╣реА рдХрд╛рд░рдг рдерд╛ред рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рд░реАрдХрд░рдг рд░рд┐рдкреЛрд░реНрдЯ рдпрд╣рд╛рдБ рд╣реИ ред рдЖрдЗрдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЖрдЬрдорд╛рдПрдВ!
@rfcbot fcp рдорд░реНрдЬ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ rfcbot рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ FCP рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ. рдЖрдЗрдП рд╕реНрдерд┐рд░реАрдХрд░рдг рдХреЗ рдЗрд╕ рджреМрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ?
https://github.com/rust-lang/rust/pull/50121 рди рдХреЗрд╡рд▓ рд╡рд╛рдкрд╕ рд╕реНрдерд┐рд░реАрдХрд░рдг рдмрд▓реНрдХрд┐ рдлреЙрд▓рдмреИрдХ рд╢рдмреНрджрд╛рд░реНрде рднреАред рдХреНрдпрд╛ рдпрд╣ рдРрд╕реА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╢реЗрд╖ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реИ:
!
рд▓рд┐рдП рд╣рдореЗрдВ рдХреМрди рд╕реЗ рд▓рдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП? рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреАрдЖрд░ #35162 рдореЗрдВOrd
рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЯреА-рд▓рд┐рдмреНрд╕ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдЯреИрдЧ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред
рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрдореНрдкреНрд▓рд╛рдВрдЯреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдпрд╛ рдпрд╣ рдЕрд╡рд░реЛрдзрдХ рд╣реИ?
@SimonSapin рдиреЗ https://github.com/rust-lang/rust/issues/57012 рдЦреЛрд▓рд╛ !
рдлреЙрд▓рдмреИрдХ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдЗрдП рд╕реНрдерд┐рд░реАрдХрд░рдг рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ)ред
рдХреНрд░реЙрд╕-рд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ: https://github.com/rust-lang/rust/issues/58184
рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЗ рдкреАрдЫреЗ рдХрднреА рднреА рдЯрд╛рдЗрдк рдирд╣реАрдВ рд╣реЛрдиреЗ рдореЗрдВ рдмрдЧ/рдЫреЗрдж рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реНрдерд┐рд░ рдкрд░ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ: https://github.com/rust-lang/rust/issues/33417#issuecomment -467053097
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: https://github.com/rust-lang/rust/issues/58733 рджрд╛рдпрд░ рдХрд┐рдпрд╛
рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝рдирд╛:
trait MyTrait {
type Output;
}
impl<T> MyTrait for fn() -> T {
type Output = T;
}
type Void = <fn() -> ! as MyTrait>::Output;
fn main() {
let _a: Void;
}
рдпрд╣ рдЬрдВрдЧ 1.12.0 рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/rust-lang/rust/pull/35162 рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рд╣реИ
error: the trait bound `fn() -> !: MyTrait` is not satisfied [--explain E0277]
--> a.rs:12:13
|>
12 |> let _a: Void;
|> ^^^^
help: the following implementations were found:
help: <fn() -> T as MyTrait>
error: aborting due to previous error
рдЗрд╕ рдХреА рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ?
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ https://github.com/rust-lang/rust/issues/57012#issuecomment -467889706 рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдЦрд╛рд╕ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред
рдЗрд╕ рдХреА рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ?
@hosunrise : рд╡рд░реНрддрдорд╛рди рдореЗрдВ https://github.com/rust-lang/rust/issues/67225 рдкрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИ
рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдЬреЛ рд▓рд┐рдВрдЯ рдЪрд░реНрдЪрд╛ (https://github.com/rust-lang/rust/issues/66173) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╣реА рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддреЗ рд╣реИрдВ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдирдо рдореЗрдВ !
рд╢рд╛рдЦрд╛ рд╣реИ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА?
рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ https://github.com/rust-lang/rust/issues/67225 рдХреЗ рдУрдкреА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЗ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рдпрд╣рд╛рдВ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдЬреЛ рдХрд┐ рд▓рд┐рдВрдЯ рдЪрд░реНрдЪрд╛ (# 66173) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╣реА рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд▓рдЧрддреЗ рд╣реИрдВ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдирдо рдХреА рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ
!
рд╢рд╛рдЦрд╛ рд╣реИ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдПрдирдо рдХреЛ рдЦрддрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдирдВрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реЗрд░рд┐рдПрдВрдЯ рдереЗ рдЬреЛ рдХрднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡реЗ рд╕рднреА рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@petrochenkov
!
рднреВрд▓ рдЬрд╛рдУ рдФрд░ рдмрд╕ рдПрдирдо рдХреЛ рджреЗрдЦреЛредрдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирдо рд╣реИ рддреЛ рдореИрдВ рдЙрд╕ рдкрд░ рджреЛ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реВрдВ:
рдпрд╣ рдХрд┐рд╕реА рднреА n рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд░реНрдл рджреЛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╢реВрдиреНрдп рд╡реЗрд░рд┐рдПрдВрдЯ рд╡рд╛рд▓рд╛ рдПрдирдо рд╣реИ рддреЛ рдореИрдВ рдЙрд╕ рдкрд░ рд╢реВрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдЕрдм рддрдХ рд╕рдм рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рджреЗрдЦреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдкреИрдЯрд░реНрди рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ
Result
рдЕрдВрджрд░ рджреЛ-рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реЗ рдПрдирдо рдкрд░ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИредрд╣рдо рдмрд╛рд╣рд░реА рдкреИрдЯрд░реНрди рдХреЗ рдЕрдВрджрд░ рдЖрдВрддрд░рд┐рдХ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛ
Foo
рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдПErr
рд▓рд┐рдП рджреЛ рдорд╛рдорд▓реЗ рд╣реИрдВред рд╣рдореЗрдВResult
рдФрд░Foo
рдкрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд┐рд▓рд╛рди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ... _рд╕рд┐рд╡рд╛рдп рд╢реВрдиреНрдп_редрдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдЗрд╕реЗ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди" рдЬреЛрдбрд╝рдиреЗ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдХрд╣реВрдВрдЧрд╛ред