рдЬрдВрдЧ рдореЗрдВ рдЬреАрд╡рдирдХрд╛рд▓ рдкрд░ рдПрдХ рдФрд░ рд▓реЗрдЦ

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


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


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


рд▓рд╛рдЗрдлрдЯрд╛рдЗрдо (рдЬреАрд╡рди)


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


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЬреАрд╡рди рдирд┐рдореНрди рдЦрдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


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

рдореИрдВ рдПрдХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреЛ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рджрд╛рдпрд░реЗ рдореЗрдВ рдХрдИ рдореВрд▓реНрдп рд╣реИрдВ, рддреЛ рд╡реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред


рдПрдХ рдФрд░ рдмрд┐рдВрджреБ: рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рдКрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдХреЙрдкреА рдорд╛рд░реНрдХрд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрд┐рди рдорд╛рдиреЛрдВ рдореЗрдВ рдпрд╣ рдорд╛рд░реНрдХрд░ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреЙрдкреА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд╕реНрддрд╛ рдСрдкрд░реЗрд╢рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдХрджрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдкреНрд░рд╛рдЗрдорд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред


рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://play.rust-lang.org/


fn main() { { //    let a = "a".to_string(); // <-   "a" let b = 100; // <-   "b" // <-   b // <-   a } //    //     "a"  "b" } 

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рдЕрдЧрд▓рд╛ рдЪрд░рдг рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдХреНрд▓реЛрдЬрд░ рдЬреИрд╕реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


рд╡рд┐рд╕реНрдерд╛рдкрди


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


 fn f<T: std::fmt::Display>(x: T) { //   ,         . println!("{}", x); // <-  ,   "a",    . } fn main() { let a = "a".to_string(); // "a"    let b = 2; f(a); //   "a"  f //        f(a) -   ,    "a"        .    a  b,    ,      Copy   . // "b" . } 

рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рдеред


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


 fn main() { let a = "a".to_string(); // "a"    let b = 2; let f_1 = move || {println!("{}", a)}; //   "a" //    "a"    . // let f_2 = move || {println!("{}", a)}; f_1(); } 

рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рди рдкрд░ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдзрд╛рд░рдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдВрддрд┐ рд╕реЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рдореЗрдВ рдорд╛рди рдЪрд▓рддрд╛ рд╣реИред


 fn f(x: String) -> String { x + " and x" //    x   +,     . //  +   String,    . } fn main() { let a = "a".to_string(); //  "a" let b = f(a); //  "a"  "f",  f     b. println!("{}", b); // "a"   . } 

рдЙрдзрд╛рд░


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


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


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


 fn f(x: &String) { //   &,    . println!("{}", x); // <-  ,  "x"     } fn main() { let a = "a".to_string(); // "a"    f(&a); //   "a"  f //   f(&a); //    -  . println!("{}", a); //   // "a"  . } 

рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде:


 fn main() { let mut a = "a".to_string(); // "a"    let f_1 = || a.push_str("and x"); //   "a" let f_2 = || a.push_str("and x"); //   f_1(); f_2(); println!("{}", a); // "a"  . } 

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


рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓


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


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


 fn main() { let mut a = "abc".to_string(); for x in a.chars() { //   a.push_str(" and "); //  .  . a.push(x); } } 

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


 for x in a.clone().chars() { //  ,   . a.push_str(" and "); //  .      -   . 

рд▓реЗрдХрд┐рди рдореИрдВ рдирд┐рд░рдВрддрд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рдореЗрдВ "рдП" рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред


 fn main() { let mut a = "a".to_string(); // "a"    let mut f_1 = || a.push_str(" and x"); //   "a".   - ,  mut  mut. //      ,   f_1  . let mut f_2 = || a.push_str(" and y"); //     : second mutable borrow occurs here f_1(); f_2(); println!("{}", a); } 

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди


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


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


RefCell - рд╣рдо RefCell рдореЗрдВ рдХреНрдпрд╛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ - рд░реЗрдЦрд╛рдкреБрдВрдЬ рдЗрд╕реЗ рдиреАрдо рдпреЛрдЧреНрдп рдорд╛рдирддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдзрд╛рд░_рдореВрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд▓рд┐рдВрдХ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдорд╛рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг nance рд╣реИ: рд▓рд┐рдВрдХ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм RefCell рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдирд╣реАрдВ рд╣реИред рд╕рдХреНрд░рд┐рдп рдЛрдг, рдЕрдиреНрдпрдерд╛ рд╡рд╣ рдШрдмрд░рд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрджрд┐ try_borrow_mut () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдпрд╣рд╛рдБ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рджреЗрдЦрднрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЛрдг рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рд╕реНрд╡рдпрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╣ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рдореВрд▓реНрдп рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред


 use std::cell::RefCell; fn main() { let a = RefCell::new("a".to_string()); // "a"    let f_1 = || a.borrow_mut().push_str(" and x"); //    "a" let f_2 = || a.borrow_mut().push_str(" and y"); //    f_1(); //      a.borrow_mut() ,           mut    . f_2(); //   . println!("{}", a.borrow()); //         . } 

рдЖрд░рд╕реА рд▓рд┐рдВрдХ рдХрд╛рдЙрдВрдЯрд░


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


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


рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛, рдЖрдЗрдП рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреНрд▓реЛрдЬрд░ & T рдпрд╛ String рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд╛рд╣рддрд╛ рд╣реИ:


 fn f(x: String) { //  String,    &String println!("{}", x); } fn main() { let a = "a".to_string(); let f_1 = move || f(a); //   move,    ... let f_2 = move || f(a); // ...     ,           f_1(); f_2(); println!("{}", a); } 

рдпрджрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ fn f(x: &String) (рдпрд╛ & str) рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ &


рд╣рдо рдЖрд░ рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


 use std::rc::Rc; fn f(x: Rc<String>) { //       Rc println!("{}", x); //     ,  println          ,           ,       ,    . } fn main() { let a_rc = Rc::new("a".to_string()); //  Rc   let a_ref_1 = a.clone(); //   -,  . let a_ref_2 = a.clone(); //   let f_1 = move || f(a_ref_1); //      - let f_2 = move || f(a_ref_2); //  f_1(); f_2(); println!("{}", a_rc); //     Rc  . //    a_rc       . } 

рдореИрдВ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдЖрд░рд╕реА <RefCell> рд╣реИ

 use std::rc::Rc; use std::cell::RefCell; fn f(x: Rc<RefCell<String>>) { x.borrow_mut().push_str(" and x"); //      ,       ,   . } fn main() { let a = Rc::new(RefCell::new("a".to_string())); //      let a_ref_1 = a.clone(); let a_ref_2 = a.clone(); let f_1 = move || f(a_ref_1); let f_2 = move || f(a_ref_2); f_1(); f_2(); println!("{}", a.borrow()); // Rc   ,   RefCell   } 

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

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


All Articles