рдЬрдВрдЧ 1.34 рд░рд┐рд▓реАрдЬ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓реЗрдЦ "рдж рд░рд╕реНрдЯ рд░рд┐рд▓реАрдЬрд╝ рдЯреАрдо" рдХреА рдШреЛрд╖рдгрд╛ 1.34.0 рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдБред


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


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдЬрдВрдЧ рдХрд╛ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рддреЛ рдЬрдВрдЧ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1.34.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


$ rustup update stable 

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд░рд╕реНрдЯрдЕрдк рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреГрд╖реНрда рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 1.34.0 рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ


рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рд╕реБрдзрд╛рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдЧреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдХреНрдпрд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рд╕рдорд░реНрдерди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, #[attribute(...)] рдФрд░ TryFrom рд╕реНрдерд┐рд░реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рд╕реБрдзрд╛рд░ред рдкреНрд░рдореБрдЦ рдмрд╛рддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝реЗрдВ рдпрд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред


рд╡реИрдХрд▓реНрдкрд┐рдХ cargo рд░рдЬрд┐рд╕реНрдЯреНрд░рд┐рдпрд╛рдВ


рд╕рдВрд╕реНрдХрд░рдг 1.0 рд╕реЗ рдкрд╣рд▓реЗ, рд░рд╕реНрдЯ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдереА, crates.io ред рд▓реЛрдЧреЛрдВ рдиреЗ cargo publish рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдмрдХреНрд╕реЗ cargo publish рдФрд░ cargo publish Cargo.toml рдХреЗ [dependencies] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрди рдмрдХреНрд╕реЗ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝рд╛ред


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


рдЗрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдХрд╛рд░реНрдЧреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░рд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпреЗ crates.io рдХреЗ рд╕рд╛рде рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдкреБрди: рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ crates.io рдФрд░ рдЖрдкрдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, crates.io рд╕рдмрдХреНрд░реИрдХ рдмрд╛рд╣рд░реА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ .cargo/config рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЗ рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА ( ~/.cargo/config ) рдпрд╛ рдкреИрдХреЗрдЬ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред


 [registries] my-registry = { index = "https://my-intranet:8080/git/index" } 

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЬрдм рдЖрдк Cargo.toml рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ registry рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдХрд╛рд░реНрдЧреЛ рдХреЛ рдкрддрд╛ Cargo.toml рдХрд┐ рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗ рдЯреЛрдХрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:


 [dependencies] other-crate = { version = "1.0", registry = "my-registry" } 

рдЯреЛрдХрд░рд╛ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЕрдкрдирд╛ рдЯреЛрдХрд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ cargo login рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рдХреЛ ~/.cargo/credentials рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛:


 cargo login --registry=my-registry 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ --registry рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд░реИрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 cargo publish --registry=my-registry 

рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреИрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


? рдкреНрд░рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ


рдХреНрдпрд╛ RFC 1937 рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ ? fn main() , #[test] рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ Option<T> рдпрд╛ Result<T, E> рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ Result<T, E> рдЬрд╣рд╛рдВ fn main() рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд┐рд░рд╛рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕рдорд╛рдкреНрддрд┐ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред ред


fn main() рдФрд░ #[test] рдореЗрдВ рд╕рдорд░реНрдерди рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд▓рд╛рдЧреВ #[test] рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕рдорд░реНрдерди рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдерд╛ рдЬрд┐рдирдореЗрдВ fn main() рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж fn main() ред


? рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ ? рдкреНрд░рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВред рдЕрдм рдЖрдк рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдпрд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 /// ```rust /// use std::io; /// let mut input = String::new(); /// io::stdin().read_line(&mut input)?; /// # Ok::<(), io:Error>(()) /// ``` fn my_func() {} 

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


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдХрд╕реНрдЯрдо рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


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


 #[foo(bar)] #[foo = "bar"] #[foo = 0] #[foo(bar = true)] #[foo(bar, baz(quux, foo = "bar"))] 

рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпреЗ рд╕рд╣рд╛рдпрдХ рдЧреБрдг рдкрд░рд┐рд╕реАрдорди рдореЗрдВ рдЯреЛрдХрди рдХреА рдПрдХ рдордирдорд╛рдиреА рдзрд╛рд░рд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЖрдк #[range(0..10)] рдпрд╛ #[bound(T: MyTrait)] рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рдереЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдХреЗ рд░реИрдХ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП #[range("0..10")] ред


рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ #[attr($tokens)] рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реБрдП, $tokens рдореЗрдВ рдордирдорд╛рдиреА рдЯреЛрдХрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореИрдХреНрд░реЛ рдЯреЛрдХрд░рд╛ рдХреЗ рд▓реЗрдЦрдХ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


TryFrom рдФрд░ TryInto


TryFrom рдФрд░ TryInto рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ from_be_bytes рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЛ рдЕрдХреНрд╕рд░ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд▓рд╛рдЗрд╕ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдореИрдиреБрдЕрд▓ рд░реВрдкрд╛рдВрддрд░рдг рдердХрд╛рдК рд╣реИред рдирдП рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ .try_into() рдХреЗ рд╕рдорд╛рди рд▓рд╛рдЗрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 let num = u32::from_be_bytes(slice.try_into()?); 

рдРрд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛ рдЕрд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ, рдЬреИрд╕реЗ рдХрд┐ u8 рд╕реЗ u32 , u32 рдЯрд╛рдЗрдк рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, TryFrom рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ From рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо ! рд▓рд┐рдП Infallible рдЙрдкрдирд╛рдо рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ ! (рдХрднреА рдирд╣реАрдВ) ред


fn before_exec unsafe fn pre_exec рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд рд╣реИ


рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, CommandExt::before_exec рдиреЗ CommandExt::before_exec рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА exec ред


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


рдЗрд╕рд▓рд┐рдП, before_exec рдлрд╝рдВрдХреНрд╢рди рдХреЛ unsafe рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, рд╣рдордиреЗ fn before_exec рдХреЛ unsafe fn pre_exec рдкрдХреНрд╖ рдореЗрдВ unsafe fn pre_exec ред рдЬрдм CommandExt::pre_exec рдХреЙрд▓ рдХрд┐рдпрд╛ CommandExt::pre_exec рддреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдЕрдорд╛рдиреНрдп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрдирд╛рдХрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ CommandExt::pre_exec рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рддреЛ before_exec рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИред рдЕрдкреНрд░рдЪрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдФрд░ unsafe рд╕рд╛рде рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░реЗрдВред


рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд┐рд░реАрдХрд░рдг


1.34.0 рдореЗрдВ, рд╕реНрдерд┐рд░ рдкрд░рдорд╛рдгреБ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ 8 рдмрд┐рдЯ ( AtomicU8 8) рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ 64 рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖред


NonZeroU8 рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдЬреИрд╕реЗ NonZeroU8 рдкрд╣рд▓реЗ рд╕реНрдерд┐рд░ рдереЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, Option<NonZeroU8> u8 рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рд╣реИред рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ NonZeroI8 рдЬреИрд╕реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд┐рд░ NonZeroI8 ред


рдХрд╛рд░реНрдп iter::from_fn рдФрд░ iter::successors рд╕реНрдерд┐рд░ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЖрдкрдХреЛ FnMut() -> Option<T> рд╕реЗ FnMut() -> Option<T> рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реЗрдХреНрдЯрд░ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рдЖрдк from_fn(|| vec.pop()) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред


рд╕рд╛рде рд╣реА, рдирд┐рдореНрди API рдХреЛ рд╕реНрдерд┐рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд░рд┐рд▓реАрдЬрд╝ рдиреЛрдЯ рджреЗрдЦреЗрдВред

Source: https://habr.com/ru/post/hi448366/


All Articles