{"id":369361,"date":"2024-05-21T04:01:45","date_gmt":"2024-05-21T04:01:45","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=369361"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=369361","title":{"rendered":"<span>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Rust. 3\/4<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fj\/yi\/qn\/fjyiqnduv3l-rdgxnbu_t_qpgxk.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/fj\/yi\/qn\/fjyiqnduv3l-rdgxnbu_t_qpgxk.jpeg\" data-blurred=\"true\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>Hello world!<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0442\u0440\u0435\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e <a href=\"https:\/\/www.rust-lang.org\/ru\/\">Rust<\/a>.<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/790556\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/794941\/\">\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/801201\/\">\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/802609\/\">\u0411\u043e\u043d\u0443\u0441<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p><a href=\"https:\/\/my-js.org\/docs\/guide\/rust\/\">\u0414\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 <a href=\"https:\/\/google.github.io\/comprehensive-rust\/index.html\">Comprehensive Rust<\/a> \u2014 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e <code>Rust<\/code> \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>Android<\/code> \u0432 <code>Google<\/code> \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043d\u0430 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u043b\u044e\u0431\u044b\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0449\u0435 \u0440\u0430\u0437: \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043d\u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0442\u044c ?<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u043c\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 (lifetimes) \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 (borrow checker): \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<li>\u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 (smart pointers): \u0442\u0438\u043f\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/doc.rust-lang.ru\/book\">\u041a\u043d\u0438\u0433\u0430\/\u0443\u0447\u0435\u0431\u043d\u0438\u043a \u043f\u043e Rust<\/a> (\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435) \u2014 \u0433\u043b\u0430\u0432\u044b 4, 10 \u0438 15<\/li>\n<li><a href=\"https:\/\/github.com\/rust-lang\/rustlings\">rustlings<\/a> \u2014 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f 06, 16 \u0438 19<\/li>\n<li><a href=\"https:\/\/doc.rust-lang.ru\/stable\/rust-by-example\/\">Rust \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a> (\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435) \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u044b 15 \u0438 19<\/li>\n<li><a href=\"https:\/\/practice.rs\/why-exercise.html\">Rust by practice<\/a> \u2014 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f 5 \u0438 17<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u043c. <a href=\"https:\/\/my-js.org\/docs\/cheatsheet\/rust\/\">\u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0443 \u043f\u043e Rust<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"upravlenie-pamyatyu\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p>  <\/p>\n<p><strong>\u041e\u0431\u0437\u043e\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 (allocate) \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0441\u0442\u0435\u043a (stack): \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<br \/> \n<ul>\n<li>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/li>\n<li>\u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439: \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430 (stack pointer)<\/li>\n<li>\u043b\u0435\u0433\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c: \u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0437\u0430 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/li>\n<li>\u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 (\u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435)<\/li>\n<\/ul>\n<\/li>\n<li>\u043a\u0443\u0447\u0430 (heap): \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<br \/> \n<ul>\n<li>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/li>\n<li>\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u0442\u0435\u043a: \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b<\/li>\n<li>\u043d\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p><em>\u041f\u0440\u0438\u043c\u0435\u0440<\/em><\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>String<\/code> \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432 \u0441\u0442\u0435\u043a \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443) \u0432 \u043a\u0443\u0447\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let s1 = String::from(\"\u041f\u0440\u0438\u0432\u0435\u0442\"); }<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_t\/il\/gp\/_tilgpmiwllocf2uws7ks0rnqiq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_t\/il\/gp\/_tilgpmiwllocf2uws7ks0rnqiq.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let mut s1 = String::from(\"\u041f\u0440\u0438\u0432\u0435\u0442\");     s1.push(' ');     s1.push_str(\"\u0432\u0441\u0435\u043c\");     \/\/ \u0422\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.     \/\/ \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e     unsafe {         let (ptr, capacity, len): (usize, usize, usize) = std::mem::transmute(s1);         println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");     } }<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/strong><\/p>\n<p>  <\/p>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e, \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 2 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 \u0440\u0443\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e: C, C++, Pascal \u0438 \u0434\u0440.<br \/> \n<ul>\n<li>\u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043a\u0443\u0447\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442<\/li>\n<li>\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c<\/li>\n<li>\u043e\u043f\u044b\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438<\/li>\n<\/ul>\n<\/li>\n<li>\u043f\u043e\u043b\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<br \/> \n<ul>\n<li>\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0430 \u043d\u0435\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0438<\/li>\n<li>\u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a (reference counting), \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430 (garbage collection) \u0438\u043b\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0_%D0%B5%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">RAII<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p><code>Rust<\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f (ownership).<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0432 <code>C<\/code> \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>malloc<\/code> \u0438 <code>free<\/code>. \u0427\u0430\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435 <code>free<\/code>, \u0435\u0435 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u043b\u0438 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441<\/li>\n<li><code>C++<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 (<code>unique_ptr<\/code>, <code>shared_ptr<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b <code>C<\/code><\/li>\n<li><code>Java<\/code>, <code>Go<\/code>, <code>Python<\/code>, <code>JavaScript<\/code> \u0438 \u0434\u0440. \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 (garbage collector) \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0435\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u0430\u0433\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u0442.\u043f. \u041e\u0434\u043d\u0430\u043a\u043e GC \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0446\u0435\u043d\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u043e\u0434\u0435\u043b\u044c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f <code>Rust<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>C<\/code> \u0431\u0435\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0435\u043c\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0430\u043c\u044f\u0442\u0438. <code>Rust<\/code> \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 <code>C++<\/code>. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u0436\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u044b, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c).<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043b\u0430\u0434\u0435\u043d\u0438\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (scope). \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0435\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">struct Point(i32, i32);  fn main() {     {         let p = Point(3, 4);         println!(\"x: {}\", p.0);     }     println!(\"y: {}\", p.1); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u043b\u0430\u0434\u0435\u0435\u0442 (own) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c. \u041a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442\u0441\u044f (dropped), \u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f (freed). \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>GC \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (roots) \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0445 (reachable) \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f &#171;\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430&#187; \u0432 <code>Rust<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 (move) \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let s1: String = String::from(\"\u041f\u0440\u0438\u0432\u0435\u0442\");     let s2: String = s1;     println!(\"s2: {s2}\");     \/\/ println!(\"s1: {s1}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 <code>s1<\/code> <code>s2<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>\"\u041f\u0440\u0438\u0432\u0435\u0442\"<\/code><\/li>\n<li>\u043a\u043e\u0433\u0434\u0430 <code>s1<\/code> \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u0442<\/li>\n<li>\u043a\u043e\u0433\u0434\u0430 <code>s2<\/code> \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-h\/w5\/ne\/-hw5net5riimnnzzzzlfkatb7cs.png\" data-src=\"https:\/\/habrastorage.org\/webt\/-h\/w5\/ne\/-hw5net5riimnnzzzzlfkatb7cs.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cl\/vm\/z2\/clvmz2cl_5fnzorhlgty4r8nwwm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cl\/vm\/z2\/clvmz2cl_5fnzorhlgty4r8nwwm.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn say_hello(name: String) {     println!(\"\u041f\u0440\u0438\u0432\u0435\u0442 {name}\") }  fn main() {     let name = String::from(\"\u0410\u043b\u0438\u0441\u0430\");     \/\/ \u0412\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 `say_hello`     say_hello(name);     \/\/ say_hello(name); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0412\u044b\u0437\u044b\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>say_hello<\/code>, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>main<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0439 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>name<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e <code>name<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 <code>main<\/code><\/li>\n<li>\u043f\u0430\u043c\u044f\u0442\u044c, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0432 \u043a\u0443\u0447\u0435 \u0434\u043b\u044f <code>name<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <code>say_hello<\/code><\/li>\n<li><code>main<\/code> \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>name<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0432 <code>say_hello<\/code> \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e (<code>&amp;name<\/code>), \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u043c <code>say_hello<\/code>, \u0431\u0443\u0434\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 (<code>name: &amp;String<\/code>)<\/li>\n<li>\u0432\u0442\u043e\u0440\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 <code>say_hello<\/code> \u043a\u043e\u043f\u0438\u0438\/\u043a\u043b\u043e\u043d\u0430 <code>name<\/code> (<code>name.clone()<\/code>)<\/li>\n<li>\u0432 <code>Rust<\/code>, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 <code>C++<\/code>, \u043a\u043e\u043f\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>Clone<\/strong><\/p>\n<p>  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0442\u0440\u0435\u0439\u0442 <code>Clone<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Default)] struct Backends {     hostnames: Vec&lt;String>,     weights: Vec&lt;f64>, }  impl Backends {     fn set_hostnames(&amp;mut self, hostnames: &amp;Vec&lt;String>) {         \/\/ \u0412\u0435\u043a\u0442\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0440\u0435\u0439\u0442 `Clone` \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e         self.hostnames = hostnames.clone();         self.weights = hostnames.iter().map(|_| 1.0).collect();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0434\u0435\u044f <code>Clone<\/code> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u0443\u0447\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0438\u0445 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong><\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let x = 42;     let y = x;     println!(\"x: {x}\"); \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f `x` \u043d\u0435 \u0431\u044b\u043b\u0430 \u0431\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     println!(\"y: {y}\"); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0442\u0440\u0435\u0439\u0442 <code>Copy<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0438 \u0442\u0438\u043f\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Copy, Clone, Debug)] struct Point(i32, i32);  fn main() {     let p1 = Point(3, 4);     let p2 = p1;     println!(\"p1: {p1:?}\");     println!(\"p2: {p2:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u044f <code>p1<\/code> \u0438 <code>p2<\/code> \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/li>\n<li>\u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>p1.clone()<\/code> \u0434\u043b\u044f \u044f\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u043c\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438<\/li>\n<li>\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <code>C++<\/code>)<\/li>\n<li>\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0439\u0442\u0430 <code>Clone<\/code><\/li>\n<li>\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0442\u0438\u043f\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0442\u0440\u0435\u0439\u0442 <code>Drop<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u043b\u0435 <code>String<\/code> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>Point<\/code>. \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>String<\/code> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c<\/li>\n<li>\u0443\u0434\u0430\u043b\u0438\u0442\u0435 <code>Copy<\/code> \u0438\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <code>derive<\/code>. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>p1<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430<\/li>\n<li>\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>p1<\/code> \u044f\u0432\u043d\u043e<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0422\u0440\u0435\u0439\u0442 Drop<\/strong><\/p>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0439\u0442 <code>Drop<\/code>, \u043c\u043e\u0433\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0445 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">struct Droppable {     name: &amp;'static str, }  impl Drop for Droppable {     fn drop(&amp;mut self) {         println!(\"\u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 {}\", self.name);     } }  fn main() {     let a = Droppable { name: \"a\" };     {         let b = Droppable { name: \"b\" };         {             let c = Droppable { name: \"c\" };             let d = Droppable { name: \"d\" };             println!(\"\u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 B\");         }         println!(\"\u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 A\");     }     drop(a);     println!(\"\u0432\u044b\u0445\u043e\u0434 \u0438\u0437 main\"); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e <code>std::mem::drop<\/code> \u0438 <code>std::ops::Drop::drop<\/code> \u2014 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438<\/p>\n<p>  <\/li>\n<li>\n<p>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/p>\n<p>  <\/li>\n<li>\n<p>\u043f\u043e\u0441\u043b\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>Drop::drop<\/code>, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>std::ops::Drop<\/code><\/p>\n<p>  <\/li>\n<li>\n<p>\u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0442\u0430\u043a\u0436\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442\u0441\u044f, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u043e\u043d\u0438 <code>Drop<\/code> \u0438\u043b\u0438 \u043d\u0435\u0442<\/p>\n<p>  <\/li>\n<li>\n<p><code>std::mem::drop<\/code> \u2014 \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0412\u0430\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0435\u0435 \u0432\u044b\u0437\u043e\u0432\u0430. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u044b\u0439\u0434\u0443\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/p>\n<p>  <\/p>\n<ul>\n<li>\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438: \u0441\u043d\u044f\u0442\u0438\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 (releasing lock), \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 (\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430) \u0438 \u0434\u0440.<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 <code>Drop::drop<\/code> \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>self<\/code>?<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442: \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>std::mem::drop<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0431\u043b\u043e\u043a\u0430, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432\u0443 <code>Drop::drop<\/code> \u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0441\u0442\u0435\u043a\u0430!<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>drop(a)<\/code> \u043d\u0430 <code>a.drop()<\/code><\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0442\u0438\u043f &#171;\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c&#187;<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0438 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043b\u0430\u0434\u0435\u0435\u0442 \u0432\u0441\u0435\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/builder\/rust\/example\">&#171;\u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044f&#187;<\/a> (builder patterm) \u0434\u043b\u044f \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] enum Language {     Rust,     Java,     Perl, }  #[derive(Clone, Debug)] struct Dependency {     name: String,     version_expression: String, }  \/\/ \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u041f\u041e #[derive(Debug)] struct Package {     name: String,     version: String,     authors: Vec&lt;String>,     dependencies: Vec&lt;Dependency>,     \/\/ \u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c     language: Option&lt;Language>, }  impl Package {     \/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u043a\u0430\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438     \/\/ \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432     fn as_dependency(&amp;self) -> Dependency {         todo!(\"1\")     } }  \/\/ \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c \u043f\u0430\u043a\u0435\u0442\u0430. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f `Package` \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 `build` struct PackageBuilder(Package);  impl PackageBuilder {     fn new(name: impl Into&lt;String>) -> Self {         todo!(\"2\")     }      \/\/ \u041c\u0435\u0442\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430     fn version(mut self, version: impl Into&lt;String>) -> Self {         self.0.version = version.into();         self     }      \/\/ \u041c\u0435\u0442\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u0430     fn authors(mut self, authors: Vec&lt;String>) -> Self {         todo!(\"3\")     }      \/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438     fn dependency(mut self, dependency: Dependency) -> Self {         todo!(\"4\")     }      \/\/ \u041c\u0435\u0442\u043e\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f\u0437\u044b\u043a\u0430. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 `None`     fn language(mut self, language: Language) -> Self {         todo!(\"5\")     }      fn build(self) -> Package {         self.0     } }  fn main() {     let base64 = PackageBuilder::new(\"base64\").version(\"0.13\").build();     println!(\"base64: {base64:?}\");     let log =         PackageBuilder::new(\"log\").version(\"0.4\").language(Language::Rust).build();     println!(\"log: {log:?}\");     let serde = PackageBuilder::new(\"serde\")         .authors(vec![\"djmitche\".into()])         .version(String::from(\"4.0\"))         .dependency(base64.as_dependency())         .dependency(log.as_dependency())         .build();     println!(\"serde: {serde:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"rust\">impl Package {     fn as_dependency(&amp;self) -> Dependency {         Dependency {             name: self.name.clone(),             version_expression: self.version.clone(),         }     } }  impl PackageBuilder {     fn new(name: impl Into&lt;String>) -> Self {         Self(Package {             name: name.into(),             version: \"0.1\".into(),             authors: vec![],             dependencies: vec![],             language: None,         })     }      fn version(mut self, version: impl Into&lt;String>) -> Self {         self.0.version = version.into();         self     }      fn authors(mut self, authors: Vec&lt;String>) -> Self {         self.0.authors = authors;         self     }      fn dependency(mut self, dependency: Dependency) -> Self {         self.0.dependencies.push(dependency);         self     }      fn language(mut self, language: Language) -> Self {         self.0.language = Some(language);         self     }      fn build(self) -> Package {         self.0     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"umnye-ukazateli\">\u0423\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438<\/h2>\n<p>  <\/p>\n<p><strong>Box<\/strong>  <\/p>\n<p><a href=\"https:\/\/doc.rust-lang.org\/std\/boxed\/struct.Box.html\">Box<\/a> \u2014 \u044d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0443\u0447\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let five = Box::new(5);     println!(\"\u043f\u044f\u0442\u044c: {}\", *five); }<\/code><\/pre>\n<p>  <\/p>\n<p><code>Box&lt;T><\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>Deref&lt;Target = T><\/code>: \u043c\u044b \u043c\u043e\u0436\u0435\u043c <a href=\"https:\/\/doc.rust-lang.org\/std\/ops\/trait.Deref.html#more-on-deref-coercion\"><code>\u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b T<\/code> \u043f\u0440\u044f\u043c\u043e \u043d\u0430 <code>Box&lt;T><\/code><\/a>.<\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0438\u043b\u0438 \u0442\u0438\u043f\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Box<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] enum List&lt;T> {     \/\/ \u041d\u0435\u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a: \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0430     Element(T, Box&lt;List&lt;T>>),     \/\/ \u041f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a     Nil, }  fn main() {     let list: List&lt;i32> =         List::Element(1, Box::new(List::Element(2, Box::new(List::Nil))));     println!(\"{list:?}\"); }<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/y_\/mi\/gm\/y_migm2n3g0zfpdq8v7nc0ujmxm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/y_\/mi\/gm\/y_migm2n3g0zfpdq8v7nc0ujmxm.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>Box<\/code> \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <code>std::unique_ptr<\/code> \u0432 <code>C++<\/code>, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>NULL<\/code><\/li>\n<li><code>Box<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430<br \/> \n<ul>\n<li>\u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0438\u043f, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 <code>Rust<\/code> \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440<\/li>\n<li>\u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0435\u043a\u0435, \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0443\u0447\u0435 \u0432 <code>Box<\/code> \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c<\/li>\n<\/ul>\n<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c <code>List<\/code> \u043f\u0440\u044f\u043c\u043e \u0432 <code>List<\/code> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>Box<\/code>, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (<code>List<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440)<\/li>\n<li><code>Box<\/code> \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432 \u043a\u0443\u0447\u0435<\/li>\n<li>\u0443\u0434\u0430\u043b\u0438\u0442\u0435 <code>Box<\/code> \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <code>List<\/code> \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430<\/li>\n<\/ul>\n<p>  <\/p>\n<p><em>\u041d\u0438\u0448\u0435\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/em><\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] enum List&lt;T> {     Element(T, Box&lt;List&lt;T>>),     Nil, }  fn main() {     let list: List&lt;i32> =         List::Element(1, Box::new(List::Element(2, Box::new(List::Nil))));     println!(\"{list:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<p><code>Box<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>NULL<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1h\/nk\/vy\/1hnkvyqurluuqpnyhm2zk68jax0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/1h\/nk\/vy\/1hnkvyqurluuqpnyhm2zk68jax0.png\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p><strong>Rc<\/strong><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/doc.rust-lang.org\/std\/rc\/struct.Rc.html\">Rc<\/a> \u2014 \u044d\u0442\u043e \u043e\u0431\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0441\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">use std::rc::Rc;  fn main() {     let a = Rc::new(10);     let b = Rc::clone(&amp;a);      println!(\"a: {a}\");     println!(\"b: {b}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0412 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/google.github.io\/comprehensive-rust\/concurrency\/shared_state\/arc.html\">Arc<\/a> \u0438 <a href=\"https:\/\/doc.rust-lang.org\/std\/sync\/struct.Mutex.html\">Mutex<\/a><\/li>\n<li>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u043e \u0441\u043b\u0430\u0431\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f (<a href=\"https:\/\/doc.rust-lang.org\/std\/rc\/struct.Weak.html\">Weak<\/a>) \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u044b \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0441\u0447\u0435\u0442\u0447\u0438\u043a <code>Rc<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435\u0441\u044f \u0432 \u043d\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e<\/li>\n<li><code>Rc<\/code> \u0432 <code>Rust<\/code> \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <code>std::shared_ptr<\/code> \u0432 <code>C++<\/code><\/li>\n<li><code>Rc::clone<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u0448\u0435\u0432\u043e: \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0441\u044b\u043b\u043e\u043a. \u041e\u043d \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043a\u043b\u043e\u043d\u043e\u0432, \u0438 \u0435\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e<\/li>\n<li><code>make_mut<\/code> \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (&#171;\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438&#187; \u2014 clone-on-write) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443<\/li>\n<li><code>Rc::strong_count<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a<\/li>\n<li><code>Rc::downgrade<\/code> (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 <code>RefCell<\/code>) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e \u0441\u043b\u0430\u0431\u044b\u043c \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e<\/strong><\/p>\n<p>  <\/p>\n<p>\u0411\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e (binary tree) \u2014 \u044d\u0442\u043e \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0438\u043c\u0435\u0435\u0442 2 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (\u043b\u0435\u0432\u044b\u0439 \u0438 \u043f\u0440\u0430\u0432\u044b\u0439). \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0435\u0440\u0435\u0432\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0445\u0440\u0430\u043d\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 <code>N<\/code> \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0432 \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 <code>N<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043c\u0435\u043d\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0432 \u043f\u0440\u0430\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u0435 <code>N<\/code> \u2014 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u0430\u043c \u043b\u0435\u0433\u043a\u0438\u043c \u0438 \u0432\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0441 \u043d\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u0441\u044c, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">\/\/ \u0423\u0437\u0435\u043b \u0434\u0435\u0440\u0435\u0432\u0430 #[derive(Debug)] struct Node&lt;T: Ord> {     value: T,     left: Subtree&lt;T>,     right: Subtree&lt;T>, }  \/\/ \u041f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c #[derive(Debug)] struct Subtree&lt;T: Ord>(Option&lt;Box&lt;Node&lt;T>>>);  \/\/ \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430. \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f #[derive(Debug)] pub struct BinaryTree&lt;T: Ord> {     root: Subtree&lt;T>, }  impl&lt;T: Ord> BinaryTree&lt;T> {     fn new() -> Self {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn insert(&amp;mut self, value: T) {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn has(&amp;self, value: &amp;T) -> bool {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn len(&amp;self) -> usize {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     } }  impl&lt;T: Ord> Subtree&lt;T> {     fn new() -> Self {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn insert(&amp;mut self, value: T) {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn has(&amp;self, value: &amp;T) -> bool {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     }      fn len(&amp;self) -> usize {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     } }  impl&lt;T: Ord> Node&lt;T> {     fn new(value: T) -> Self {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     } }  fn main() {     let mut tree = BinaryTree::new();     tree.insert(\"foo\");     assert_eq!(tree.len(), 1);     tree.insert(\"bar\");     assert!(tree.has(&amp;\"foo\")); }  #[cfg(test)] mod tests {     use super::*;      #[test]     fn len() {         let mut tree = BinaryTree::new();         assert_eq!(tree.len(), 0);         tree.insert(2);         assert_eq!(tree.len(), 1);         tree.insert(1);         assert_eq!(tree.len(), 2);         tree.insert(2); \/\/ \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442         assert_eq!(tree.len(), 2);     }      #[test]     fn has() {         let mut tree = BinaryTree::new();         fn check_has(tree: &amp;BinaryTree&lt;i32>, exp: &amp;[bool]) {             let got: Vec&lt;bool> =                 (0..exp.len()).map(|i| tree.has(&amp;(i as i32))).collect();             assert_eq!(&amp;got, exp);         }          check_has(&amp;tree, &amp;[false, false, false, false, false]);         tree.insert(0);         check_has(&amp;tree, &amp;[true, false, false, false, false]);         tree.insert(4);         check_has(&amp;tree, &amp;[true, false, false, false, true]);         tree.insert(4);         check_has(&amp;tree, &amp;[true, false, false, false, true]);         tree.insert(3);         check_has(&amp;tree, &amp;[true, false, false, true, true]);     }      #[test]     fn unbalanced() {         let mut tree = BinaryTree::new();         for i in 0..100 {             tree.insert(i);         }         assert_eq!(tree.len(), 100);         assert!(tree.has(&amp;50));     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430: \u0434\u043b\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>std::cmp::Ordering<\/code>.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"rust\">impl&lt;T: Ord> BinaryTree&lt;T> {     fn new() -> Self {         Self { root: Subtree::new() }     }      fn insert(&amp;mut self, value: T) {         self.root.insert(value);     }      fn has(&amp;self, value: &amp;T) -> bool {         self.root.has(value)     }      fn len(&amp;self) -> usize {         self.root.len()     } }  impl&lt;T: Ord> Subtree&lt;T> {     fn new() -> Self {         Self(None)     }      fn insert(&amp;mut self, value: T) {         match &amp;mut self.0 {             None => self.0 = Some(Box::new(Node::new(value))),             Some(n) => match value.cmp(&amp;n.value) {                 Ordering::Less => n.left.insert(value),                 Ordering::Equal => {}                 Ordering::Greater => n.right.insert(value),             },         }     }      fn has(&amp;self, value: &amp;T) -> bool {         match &amp;self.0 {             None => false,             Some(n) => match value.cmp(&amp;n.value) {                 Ordering::Less => n.left.has(value),                 Ordering::Equal => true,                 Ordering::Greater => n.right.has(value),             },         }     }      fn len(&amp;self) -> usize {         match &amp;self.0 {             None => 0,             Some(n) => 1 + n.left.len() + n.right.len(),         }     } }  impl&lt;T: Ord> Node&lt;T> {     fn new(value: T) -> Self {         Self { value, left: Subtree::new(), right: Subtree::new() }     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"zaimstvovanie\">\u0417\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p><strong>\u0417\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f (ownership) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c (borrow) \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] struct Point(i32, i32);  fn add(p1: &amp;Point, p2: &amp;Point) -> Point {     Point(p1.0 + p2.0, p1.1 + p2.1) }  fn main() {     let p1 = Point(3, 4);     let p2 = Point(10, 20);     let p3 = add(&amp;p1, &amp;p2);     println!(\"{p1:?} + {p2:?} = {p3:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>add<\/code> \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442 2 \u0442\u043e\u0447\u043a\u0438 (point) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0442\u043e\u0447\u043a\u0443<\/li>\n<li>\u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 (caller, <code>main<\/code>) \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0430\u043c\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>add<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u0448\u0435\u0432\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<li>\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <code>Rust<\/code> \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (return value optimization \u2014 RVO)<\/li>\n<li>\u0432 <code>C++<\/code> \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u0412 <code>Rust<\/code> \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0415\u0441\u043b\u0438 <code>RVO<\/code> \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, <code>Rust<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>memcpy<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 (borrow checker) \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0435\/\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 (shared) \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438<\/li>\n<li>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u0443\u044e\/\u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e (exclusive) \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let mut a: i32 = 10;     let b: &amp;i32 = &amp;a;      {         let c: &amp;mut i32 = &amp;mut a;         *c = 20;     }      println!(\"a: {a}\");     println!(\"b: {b}\"); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f. \u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0441\u0441\u044b\u043b\u043a\u0430 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/li>\n<li>\u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>a<\/code> \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f (\u0447\u0435\u0440\u0435\u0437 <code>c<\/code>) \u0438 \u043a\u0430\u043a \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f (\u0447\u0435\u0440\u0435\u0437 <code>b<\/code>) \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/li>\n<li>\u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 <code>println!(\"b: {b}\");<\/code> \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>c<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434<\/li>\n<li>\u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e <code>b<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f <code>a<\/code>. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;\u043d\u0435\u043b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438&#187; (non-lexical lifetimes)<\/li>\n<li>\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u043c. <code>Rust<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0433\u043e\u043d\u043e\u043a \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (data races). <code>Rust<\/code> \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u041d\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u0441 \u043d\u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c<\/strong><\/p>\n<p>  <\/p>\n<p><code>Rust<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><em>Cell \u0438 RefCell<\/em><\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/doc.rust-lang.org\/std\/cell\/struct.Cell.html\">Cell<\/a> \u0438 <a href=\"https:\/\/doc.rust-lang.org\/std\/cell\/struct.RefCell.html\">RefCell<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0442\u043e, \u0447\u0442\u043e \u0432 <code>Rust<\/code> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0438\u0437\u043c\u0435\u043d\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e (interior mutability): \u043c\u0443\u0442\u0430\u0446\u0438\u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435.<\/p>\n<p>  <\/p>\n<p><code>Cell<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>RefCell<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0438\u0435 \u0438 \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">use std::cell::RefCell; use std::rc::Rc;  #[derive(Debug, Default)] struct Node {     value: i64,     children: Vec&lt;Rc&lt;RefCell&lt;Node>>>, }  impl Node {     fn new(value: i64) -> Rc&lt;RefCell&lt;Node>> {         Rc::new(RefCell::new(Node { value, ..Node::default() }))     }      fn sum(&amp;self) -> i64 {         self.value + self.children.iter().map(|c| c.borrow().sum()).sum::&lt;i64>()     } }  fn main() {     let root = Node::new(1);     root.borrow_mut().children.push(Node::new(5));     let subtree = Node::new(10);     subtree.borrow_mut().children.push(Node::new(11));     subtree.borrow_mut().children.push(Node::new(12));     root.borrow_mut().children.push(subtree);      println!(\"graph: {root:#?}\");     println!(\"graph sum: {}\", root.borrow().sum()); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0435\u0441\u043b\u0438 \u0431\u044b \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <code>Cell<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>RefCell<\/code>, \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c <code>Node<\/code> \u0438\u0437 <code>Rc<\/code>, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u042d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u044d\u0440\u0433\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u043e<\/li>\n<li>\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441 <code>Node<\/code>, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0435\u0442\u043e\u0434 <code>RefCell<\/code>, \u043e\u0431\u044b\u0447\u043d\u043e <code>borrow<\/code> \u0438\u043b\u0438 <code>borrow_mut<\/code><\/li>\n<li>\u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043f\u0443\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>root<\/code> \u0432 <code>subtree.children<\/code> (\u043d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b)<\/li>\n<li>\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0430\u043d\u0438\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>fn inc(&amp;mut self)<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 <code>self.value<\/code> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0443 \u0438\u0437-\u0437\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430: <code>thread 'main' panicked at 'already borrowed: BorrowMutError'<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043d\u0430\u0434 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>visit_doctor<\/code> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>User<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#![allow(dead_code)] pub struct User {     name: String,     age: u32,     height: f32,     visit_count: usize,     \/\/ \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435     last_blood_pressure: Option&lt;(u32, u32)>, }  pub struct Measurements {     height: f32,     blood_pressure: (u32, u32), }  \/\/ 'a - \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438, \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 pub struct HealthReport&lt;'a> {     patient_name: &amp;'a str,     visit_count: u32,     height_change: f32,     \/\/ \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435     blood_pressure_change: Option&lt;(i32, i32)>, }  impl User {     pub fn new(name: String, age: u32, height: f32) -> Self {         Self {             name,             age,             height,             visit_count: 0,             last_blood_pressure: None,         }     }      pub fn visit_doctor(&amp;mut self, measurements: Measurements) -> HealthReport {         todo!(\"\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0440\u0430\u0447\u0430\")     } }  fn main() {     let bob = User::new(String::from(\"Bob\"), 32, 155.2);     println!(\"I'm {} and my age is {}\", bob.name, bob.age); }  #[cfg(test)] mod tests {     use super::*;      #[test]     fn test_visit() {         let mut bob = User::new(String::from(\"Bob\"), 32, 155.2);         assert_eq!(bob.visit_count, 0);         let report = bob.visit_doctor(Measurements {             height: 156.1,             blood_pressure: (120, 80),         });         assert_eq!(report.patient_name, \"Bob\");         assert_eq!(report.visit_count, 1);         assert_eq!(report.blood_pressure_change, None);          let report = bob.visit_doctor(Measurements {             height: 156.1,             blood_pressure: (115, 76),         });          assert_eq!(report.visit_count, 2);         assert_eq!(report.blood_pressure_change, Some((-5, -4)));     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"rust\">impl User {     \/\/ ...      pub fn visit_doctor(&amp;mut self, measurements: Measurements) -> HealthReport {         \/\/ \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0439 \u0432\u0440\u0430\u0447\u0430         self.visit_count += 1;         \/\/ \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043a\u0440\u043e\u0432\u044f\u043d\u043e\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439         let bp = measurements.blood_pressure;         \/\/ \u041e\u0442\u0447\u0435\u0442         let report = HealthReport {             patient_name: &amp;self.name,             visit_count: self.visit_count as u32,             \/\/ \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u043e\u0441\u0442\u0430             height_change: measurements.height - self.height,             \/\/ \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f.             \/\/ \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c,             \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c             blood_pressure_change: match self.last_blood_pressure {                 Some(lbp) => {                     Some((bp.0 as i32 - lbp.0 as i32, bp.1 as i32 - lbp.1 as i32))                 }                 None => None,             },         };         self.height = measurements.height;         self.last_blood_pressure = Some(bp);         report     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"srezy-i-vremena-zhizni\">\u0421\u0440\u0435\u0437\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438<\/h2>\n<p>  <\/p>\n<p><strong>\u0421\u0440\u0435\u0437\u044b<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u0440\u0435\u0437 (slice) \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (view) (\u0447\u0430\u0441\u0442\u044c) \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let mut a: [i32; 6] = [10, 20, 30, 40, 50, 60];     println!(\"a: {a:?}\");      let s: &amp;[i32] = &amp;a[2..4];      println!(\"s: {s:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0421\u0440\u0435\u0437\u044b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430<\/li>\n<li>\u0412\u043e\u043f\u0440\u043e\u0441: \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>a[3]<\/code> \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0432\u043e\u0434\u043e\u043c <code>s<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b?<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0440\u0435\u0437 \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f <code>a<\/code> \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445<\/li>\n<li>\u0435\u0441\u043b\u0438 \u0441\u0440\u0435\u0437 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <code>0<\/code>, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 <code>Rust<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441: <code>&amp;a[0..a.len()]<\/code> == <code>&amp;a[..a.len()]<\/code><\/li>\n<li>\u0442\u043e\u0436\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430: <code>&amp;a[2..a.len()]<\/code> == <code>&amp;a[2..]<\/code><\/li>\n<li>\u0441\u0440\u0435\u0437 \u0432\u0441\u0435\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>&amp;a[..]<\/code><\/li>\n<li><code>s<\/code> \u2014 \u044d\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0440\u0435\u0437 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0442\u0438\u043f\u0435 <code>s<\/code> (<code>&amp;[i32]<\/code>) \u043d\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u0440\u0435\u0437\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432<\/li>\n<li>\u0441\u0440\u0435\u0437\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <code>a<\/code> \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f &#171;\u0436\u0438\u0432\u043e\u0439&#187; (\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438) \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 &#171;\u0436\u0438\u0432&#187; \u0435\u0433\u043e \u0441\u0440\u0435\u0437<\/li>\n<li>\u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 <code>a[3]<\/code> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044e, \u043d\u043e \u043e\u0442\u0432\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 <code>a<\/code> \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u0438\u0437 <code>a<\/code>, \u0442\u0430\u043a \u0438 \u0438\u0437 <code>s<\/code>. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0440\u0435\u0437\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <code>println!<\/code>, \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0435\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0421\u0442\u0440\u043e\u043a\u0438<\/strong><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0438\u043f\u043e\u043c <code>&amp;str<\/code>: \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 <code>&amp;[char]<\/code>, \u043d\u043e \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b (UTF-8).<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let s1: &amp;str = \"World\";     println!(\"s1: {s1}\");      let mut s2: String = String::from(\"Hello \");     println!(\"s2: {s2}\");     s2.push_str(s1);     println!(\"s2: {s2}\");      let s3: &amp;str = &amp;s2[6..];     println!(\"s3: {s3}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>&amp;str<\/code> \u2014 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0441\u0440\u0435\u0437<\/li>\n<li><code>String<\/code> \u2014 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0420\u0435\u043c\u0430\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>&amp;str<\/code> \u2014 \u044d\u0442\u043e \u0441\u0440\u0435\u0437 \u0441\u0442\u0440\u043e\u043a\u0438, \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 UTF-8 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b (<code>\"Hello\"<\/code>) \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0435 (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/li>\n<li>\u0442\u0438\u043f <code>String<\/code> \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0431\u0430\u0439\u0442\u043e\u0432. \u041a\u0430\u043a \u0438 <code>Vec&lt;T><\/code>, \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c (owned)<\/li>\n<li><code>String::from()<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438; <code>String::new()<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>push<\/code> \u0438 <code>push_str<\/code><\/li>\n<li>\u043c\u0430\u043a\u0440\u043e\u0441 <code>format!<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0421\u0442\u0438\u043b\u044c \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0445\u043e\u0436 \u0441 <code>println!<\/code><\/li>\n<li>\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0437\u044b <code>&amp;str<\/code> \u0438\u0437 <code>String<\/code> \u0447\u0435\u0440\u0435\u0437 <code>&amp;<\/code> \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u044b\u0431\u043e\u0440\u0430 (range selection). \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (character boundaries), \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442. \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 <code>chars<\/code> \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/li>\n<li>\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <code>&amp;[u8]<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"rust\">fn main() {     let byte_string = b\"abc\";     println!(\"{:?}\", byte_string);     assert_eq!(byte_string, &amp;[97, 98, 99]) }<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u0441\u044b\u043b\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 (lifetime), \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 &#171;\u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c&#187; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f. \u0421\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 (borrow checker).<\/p>\n<p>  <\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u044f\u0432\u043d\u043e \u2014 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440. \u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u044f\u0432\u043d\u044b\u043c\u0438: <code>&amp;'a Point<\/code>, <code>&amp;'static str<\/code>. \u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 <code>'<\/code> \u0438 <code>'a<\/code> \u2014 \u0438\u043c\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. <code>&amp;'a Point<\/code> \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a &#171;\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Point<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 <code>a<\/code>&#171;.<\/p>\n<p>  <\/p>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f (inferred) \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043e\u043d\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u044f\u0432\u043d\u043e. \u042f\u0432\u043d\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 (annotations) \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u0438; \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] struct Point(i32, i32);  fn left_most(p1: &amp;Point, p2: &amp;Point) -> &amp;Point {     if p1.0 &lt; p2.0 {         p1     } else {         p2     } }  fn main() {     let p1: Point = Point(10, 10);     let p2: Point = Point(20, 20);     let p3 = left_most(&amp;p1, &amp;p2); \/\/ \u043a\u0430\u043a\u043e\u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 `p3`?     println!(\"p3: {p3:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 <code>p3<\/code>. \u0415\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0430 \u043f\u043e\u043c\u043e\u0449\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn left_most&lt;'a>(p1: &amp;'a Point, p2: &amp;'a Point) -> &amp;'a Point { .. }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0436\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0433\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u044f\u0432\u043d\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b, \u043d\u043e \u0432 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 <code>Rust<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c (elide) \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"https:\/\/doc.rust-lang.org\/nomicon\/lifetime-elision.html\">\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b<\/a>:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0443 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438<\/li>\n<li>\u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0435\u0433\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/li>\n<li>\u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>self<\/code>, \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 <code>self<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] struct Point(i32, i32);  fn cab_distance(p1: &amp;Point, p2: &amp;Point) -> i32 {     (p1.0 - p2.0).abs() + (p1.1 - p2.1).abs() }  fn nearest&lt;'a>(points: &amp;'a [Point], query: &amp;Point) -> Option&lt;&amp;'a Point> {     let mut nearest = None;     for p in points {         if let Some((_, nearest_dist)) = nearest {             let dist = cab_distance(p, query);             if dist &lt; nearest_dist {                 nearest = Some((p, dist));             }         } else {             nearest = Some((p, cab_distance(p, query)));         };     }     nearest.map(|(p, _)| p) }  fn main() {     println!(         \"{:?}\",         nearest(             &amp;[Point(1, 0), Point(1, 0), Point(-1, 0), Point(0, -1),],             &amp;Point(0, 2)         )     ); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>cab_distance<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>p1<\/code> \u0438 <code>p2<\/code> \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<p>  <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>nearest<\/code> \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d \u0436\u0438\u0437\u043d\u0438. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">fn nearest&lt;'a, 'q'>(points: &amp;'a [Point], query: &amp;'q Point) -> Option&lt;&amp;'q Point> { .. }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0438 \u0442\u0438\u043f\u043e\u0432 \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0447\u0442\u043e \u0438\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e. \u0412 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u0427\u0430\u0441\u0442\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0440\u0435\u043c\u0435\u043d\u0430 \u0436\u0438\u0437\u043d\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445<\/strong><\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">#[derive(Debug)] struct Highlight&lt;'doc>(&amp;'doc str);  fn erase(text: String) {     println!(\"Bye {text}!\"); }  fn main() {     let text = String::from(\"The quick brown fox jumps over the lazy dog.\");     let fox = Highlight(&amp;text[4..19]);     let dog = Highlight(&amp;text[35..43]);     \/\/ erase(text);     println!(\"{fox:?}\");     println!(\"{dog:?}\"); }<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <code>Highlight<\/code> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 <code>&amp;str<\/code>, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0433\u043e, \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>Highlight<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435<\/li>\n<li>\u0435\u0441\u043b\u0438 <code>text<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d \u0434\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0438 <code>fox<\/code> (\u0438\u043b\u0438 <code>dog<\/code>), \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443<\/li>\n<li>\u0442\u0438\u043f\u044b \u0441 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u044e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 (lightweight views), \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/li>\n<li>\u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432\u043b\u0430\u0434\u0435\u043b\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/li>\n<li>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u0430\u043c\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435: \u0430\u043d\u0430\u043b\u0438\u0437 Protobuf<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 <a href=\"https:\/\/protobuf.dev\/programming-guides\/encoding\/\">\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 protobuf<\/a>. \u041d\u0435 \u0432\u043e\u043b\u043d\u0443\u0439\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f! \u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b (\u0441\u0440\u0435\u0437\u044b). \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f protobuf \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u043d\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043f\u043e\u043b\u0435\u0439, \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u043f\u043e\u043b\u0435\u0439. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>proto<\/code>. \u0412 \u044d\u0442\u043e\u043c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0438 \u043c\u044b \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">message PhoneNumber {   optional string number = 1;   optional string type = 2; }  message Person {   optional string name = 1;   optional int32 id = 2;   repeated PhoneNumber phones = 3; }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0442\u043e\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0435\u0440\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u0438\u0434\u0443\u0449\u0438\u0445 \u043e\u0434\u043d\u043e \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a &#171;\u0442\u0435\u0433&#187;, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0435\u0433 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>2<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u044f <code>id<\/code> \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>Person<\/code>) \u0438 \u0442\u0438\u043f \u043f\u043e\u043b\u044f, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439, \u043a\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0426\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435\u0433, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 <code>VARINT<\/code>. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>parse_varint<\/code> \u0443\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u043a\u043e\u0434\u0435. \u0422\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u043b\u0435\u0439 <code>Person<\/code> \u0438 <code>PhoneNumber<\/code> \u0438 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u044d\u0442\u0438\u0445 \u043a\u043e\u043b\u043b\u0431\u0435\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>parse_field<\/code> \u0438 \u0442\u0440\u0435\u0439\u0442 <code>ProtoMessage<\/code> \u0434\u043b\u044f <code>Person<\/code> \u0438 <code>PhoneNumber<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u044d\u0442\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u044f <code>Rust<\/code> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"rust\">use std::convert::TryFrom; use thiserror::Error;  #[derive(Debug, Error)] enum Error {     #[error(\"Invalid varint\")]     InvalidVarint,     #[error(\"Invalid wire-type\")]     InvalidWireType,     #[error(\"Unexpected EOF\")]     UnexpectedEOF,     #[error(\"Invalid length\")]     InvalidSize(#[from] std::num::TryFromIntError),     #[error(\"Unexpected wire-type)\")]     UnexpectedWireType,     #[error(\"Invalid string (not UTF-8)\")]     InvalidString, }  \/\/ \u0422\u0438\u043f \u043f\u043e\u043b\u044f enum WireType {     \/\/ \u0422\u0438\u043f Varint \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u043c `VARINT`     Varint,     \/\/ \u0422\u0438\u043f `Len` \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u044d\u0442\u043e \u0434\u043b\u0438\u043d\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0430\u043a     \/\/ `VARINT`, \u0442\u043e\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u044d\u0442\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0439\u0442\u043e\u0432     Len,     \/\/ \u0422\u0438\u043f `I32` \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e 4 \u0431\u0430\u0439\u0442\u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 (little-endian order),     \/\/ \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u043e \u0437\u043d\u0430\u043a\u043e\u043c     I32,     \/\/ \u0422\u0438\u043f `I64` \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0435\u043d }  #[derive(Debug)] \/\/ \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f, \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f enum FieldValue&lt;'a> {     Varint(u64),     \/\/ `I64(i64)` \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0435\u043d     Len(&amp;'a [u8]),     I32(i32), }  #[derive(Debug)] \/\/ \u041f\u043e\u043b\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u044f \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 struct Field&lt;'a> {     field_num: u64,     value: FieldValue&lt;'a>, }  trait ProtoMessage&lt;'a>: Default + 'a {     fn add_field(&amp;mut self, field: Field&lt;'a>) -> Result&lt;(), Error>; }  impl TryFrom&lt;u64> for WireType {     type Error = Error;      fn try_from(value: u64) -> Result&lt;WireType, Error> {         Ok(match value {             0 => WireType::Varint,             \/\/ `1 => WireType::I64` \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0435\u043d             2 => WireType::Len,             5 => WireType::I32,             _ => return Err(Error::InvalidWireType),         })     } }  impl&lt;'a> FieldValue&lt;'a> {     fn as_string(&amp;self) -> Result&lt;&amp;'a str, Error> {         let FieldValue::Len(data) = self else {             return Err(Error::UnexpectedWireType);         };         std::str::from_utf8(data).map_err(|_| Error::InvalidString)     }      fn as_bytes(&amp;self) -> Result&lt;&amp;'a [u8], Error> {         let FieldValue::Len(data) = self else {             return Err(Error::UnexpectedWireType);         };         Ok(data)     }      fn as_u64(&amp;self) -> Result&lt;u64, Error> {         let FieldValue::Varint(value) = self else {             return Err(Error::UnexpectedWireType);         };         Ok(*value)     } }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 VARINT, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0430\u0439\u0442\u044b fn parse_varint(data: &amp;[u8]) -> Result&lt;(u64, &amp;[u8]), Error> {     for i in 0..7 {         let Some(b) = data.get(i) else {             return Err(Error::InvalidVarint);         };         if b &amp; 0x80 == 0 {             \/\/ \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u0430\u0439\u0442 `VARINT`, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e             \/\/ \u0432 `u64` \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c             let mut value = 0u64;             for b in data[..=i].iter().rev() {                 value = (value &lt;&lt; 7) | (b &amp; 0x7f) as u64;             }             return Ok((value, &amp;data[i + 1..]));         }     }      \/\/ \u0415\u0441\u043b\u0438 \u0431\u0430\u0439\u0442\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 7, \u0437\u043d\u0430\u0447\u0438\u0442 `VARINT` \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c     Err(Error::InvalidVarint) }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0433\u0430 \u0432 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u043b\u044f \u0438 \u0442\u0438\u043f \u043f\u043e\u043b\u044f fn unpack_tag(tag: u64) -> Result&lt;(u64, WireType), Error> {     let field_num = tag >> 3;     let wire_type = WireType::try_from(tag &amp; 0x7)?;     Ok((field_num, wire_type)) }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0430\u0439\u0442\u044b fn parse_field(data: &amp;[u8]) -> Result&lt;(Field, &amp;[u8]), Error> {     let (tag, remainder) = parse_varint(data)?;     let (field_num, wire_type) = unpack_tag(tag)?;     let (fieldvalue, remainder) = match wire_type {         _ => todo!(\"\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u0435, \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0432 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442\u043e\u0432, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\")     };     todo!(\"\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u043e\u043b\u0435 \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0430\u0439\u0442\u044b\") }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f `T::add_field` \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f. \/\/ \u0412\u0441\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442\u0441\u044f fn parse_message&lt;'a, T: ProtoMessage&lt;'a>>(mut data: &amp;'a [u8]) -> Result&lt;T, Error> {     let mut result = T::default();     while !data.is_empty() {         let parsed = parse_field(data)?;         result.add_field(parsed.0)?;         data = parsed.1;     }     Ok(result) }  #[derive(Debug, Default)] struct PhoneNumber&lt;'a> {     number: &amp;'a str,     type_: &amp;'a str, }  #[derive(Debug, Default)] struct Person&lt;'a> {     name: &amp;'a str,     id: u64,     phone: Vec&lt;PhoneNumber&lt;'a>>, }  impl&lt;'a> ProtoMessage&lt;'a> for Person&lt;'a> {     fn add_field(&amp;mut self, field: Field&lt;'a>) -> Result&lt;(), Error> {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     } }  impl&lt;'a> ProtoMessage&lt;'a> for PhoneNumber&lt;'a> {     fn add_field(&amp;mut self, field: Field&lt;'a>) -> Result&lt;(), Error> {         todo!(\"\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0439 \u043c\u0435\u043d\u044f\")     } }  fn main() {     let person: Person = parse_message(&amp;[         0x0a, 0x07, 0x6d, 0x61, 0x78, 0x77, 0x65, 0x6c, 0x6c, 0x10, 0x2a, 0x1a,         0x16, 0x0a, 0x0e, 0x2b, 0x31, 0x32, 0x30, 0x32, 0x2d, 0x35, 0x35, 0x35,         0x2d, 0x31, 0x32, 0x31, 0x32, 0x12, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x1a,         0x18, 0x0a, 0x0e, 0x2b, 0x31, 0x38, 0x30, 0x30, 0x2d, 0x38, 0x36, 0x37,         0x2d, 0x35, 0x33, 0x30, 0x38, 0x12, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c,         0x65,     ])     .unwrap();     println!(\"{:#?}\", person); }  #[cfg(test)] mod test {     use super::*;      #[test]     fn as_string() {         assert!(FieldValue::Varint(10).as_string().is_err());         assert!(FieldValue::I32(10).as_string().is_err());         assert_eq!(FieldValue::Len(b\"hello\").as_string().unwrap(), \"hello\");     }      #[test]     fn as_bytes() {         assert!(FieldValue::Varint(10).as_bytes().is_err());         assert!(FieldValue::I32(10).as_bytes().is_err());         assert_eq!(FieldValue::Len(b\"hello\").as_bytes().unwrap(), b\"hello\");     }      #[test]     fn as_u64() {         assert_eq!(FieldValue::Varint(10).as_u64().unwrap(), 10u64);         assert!(FieldValue::I32(10).as_u64().is_err());         assert!(FieldValue::Len(b\"hello\").as_u64().is_err());     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"rust\">fn parse_field(data: &amp;[u8]) -> Result&lt;(Field, &amp;[u8]), Error> {     let (tag, remainder) = parse_varint(data)?;     let (field_num, wire_type) = unpack_tag(tag)?;     let (fieldvalue, remainder) = match wire_type {         WireType::Varint => {             let (value, remainder) = parse_varint(remainder)?;             (FieldValue::Varint(value), remainder)         }         WireType::Len => {             let (len, remainder) = parse_varint(remainder)?;             let len: usize = len.try_into()?;             if remainder.len() &lt; len {                 return Err(Error::UnexpectedEOF);             }             let (value, remainder) = remainder.split_at(len);             (FieldValue::Len(value), remainder)         }         WireType::I32 => {             if remainder.len() &lt; 4 {                 return Err(Error::UnexpectedEOF);             }             let (value, remainder) = remainder.split_at(4);             let value = i32::from_le_bytes(value.try_into().unwrap());             (FieldValue::I32(value), remainder)         }     };     Ok((Field { field_num, value: fieldvalue }, remainder)) }  \/\/ ...  impl&lt;'a> ProtoMessage&lt;'a> for Person&lt;'a> {     fn add_field(&amp;mut self, field: Field&lt;'a>) -> Result&lt;(), Error> {         match field.field_num {             1 => self.name = field.value.as_string()?,             2 => self.id = field.value.as_u64()?,             3 => self.phone.push(parse_message(field.value.as_bytes()?)?),             _ => {} \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c         }         Ok(())     } }  impl&lt;'a> ProtoMessage&lt;'a> for PhoneNumber&lt;'a> {     fn add_field(&amp;mut self, field: Field&lt;'a>) -> Result&lt;(), Error> {         match field.field_num {             1 => self.number = field.value.as_string()?,             2 => self.type_ = field.value.as_string()?,             _ => {} \/\/ \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c         }         Ok(())     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043a\u043e\u043d\u0435\u0446 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/doc.rust-lang.ru\/book\">\u041a\u043d\u0438\u0433\u0430\/\u0443\u0447\u0435\u0431\u043d\u0438\u043a \u043f\u043e Rust<\/a> (\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435) \u2014 \u0433\u043b\u0430\u0432\u044b 4, 10 \u0438 15<\/li>\n<li><a href=\"https:\/\/github.com\/rust-lang\/rustlings\">rustlings<\/a> \u2014 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f 06, 16 \u0438 19<\/li>\n<li><a href=\"https:\/\/doc.rust-lang.ru\/stable\/rust-by-example\/\">Rust \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a> (\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435) \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u044b 15 \u0438 19<\/li>\n<li><a href=\"https:\/\/practice.rs\/why-exercise.html\">Rust by practice<\/a> \u2014 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f 5 \u0438 17<\/li>\n<\/ul>\n<p>  <\/p>\n<p>Happy coding!<\/p>\n<p>  <\/p>\n<hr\/>\n<p>  <\/p>\n<blockquote><p><a href=\"https:\/\/t.me\/timewebru\"><b>\u041d\u043e\u0432\u043e\u0441\u0442\u0438, \u043e\u0431\u0437\u043e\u0440\u044b \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u044b \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Timeweb.Cloud \u2014 \u0432 \u043d\u0430\u0448\u0435\u043c Telegram-\u043a\u0430\u043d\u0430\u043b\u0435<\/b><\/a> <b>\u21a9<\/b><\/p><\/blockquote>\n<p><a href=\"https:\/\/timeweb.cloud\/?i=106909\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\"\/><\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/796567\/\"> https:\/\/habr.com\/ru\/articles\/796567\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/fj\/yi\/qn\/fjyiqnduv3l-rdgxnbu_t_qpgxk.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/fj\/yi\/qn\/fjyiqnduv3l-rdgxnbu_t_qpgxk.jpeg\" data-blurred=\"true\"\/>  <\/p>\n<p>  <\/p>\n<p>  <\/p>\n<p>Hello world!<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0442\u0440\u0435\u0442\u044c\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e <a href=\"https:\/\/www.rust-lang.org\/ru\/\">Rust<\/a>.<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/790556\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/794941\/\">\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/801201\/\">\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/802609\/\">\u0411\u043e\u043d\u0443\u0441<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<p><a href=\"https:\/\/my-js.org\/docs\/guide\/rust\/\">\u0414\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 <a href=\"https:\/\/google.github.io\/comprehensive-rust\/index.html\">Comprehensive Rust<\/a> \u2014 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e <code>Rust<\/code> \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>Android<\/code> \u0432 <code>Google<\/code> \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043d\u0430 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u043b\u044e\u0431\u044b\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0449\u0435 \u0440\u0430\u0437: \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043e \u043d\u0430 \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0442\u044c ?<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-369361","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/369361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=369361"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/369361\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=369361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=369361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=369361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}