{"id":355176,"date":"2024-05-20T23:03:12","date_gmt":"2024-05-20T23:03:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=355176"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=355176","title":{"rendered":"<span>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u043d\u0430 Rust<\/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\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/761746\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/j6\/gh\/cs\/j6ghcsbm2oulbe6zmcoe-me2n3k.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/j6\/gh\/cs\/j6ghcsbm2oulbe6zmcoe-me2n3k.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/>  \u041f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u2014 \u043c\u043e\u0451 \u0445\u043e\u0431\u0431\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u0441 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0438\u0448\u0443 \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u0449\u0435\u0439, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0438 \u0442\u0438\u043f\u044b AST \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a.<\/p>\n<pre><code class=\"rust\">pub enum Expr&lt;'src> {   Int(u32)   Ident(&amp;'src str),   \/\/ ... }<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0430\u0440\u0441\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u0443\u044e <code>String<\/code> \u043c\u044b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0441\u043b\u043e\u0432\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>\"all my jelly babies\"<\/code> \u043f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0435, \u043a\u0430\u043a \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u041d\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f: <code>\\n<\/code> \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 <code>[0x5c, 0x6e]<\/code>, \u043d\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u00ab\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u0438\u043c <code>0x0a<\/code>.<\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/doc.rust-lang.org\/std\/borrow\/enum.Cow.html\"><code>Cow&lt;str><\/code><\/a>. \u0412 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0435\u0437 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Cow::Borrowed<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u044b \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 <code>String<\/code> \u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0435\u0451 \u0432 <code>Cow::Owned<\/code>.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430, \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0432\u044b\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u0421\u0442\u0440\u043e\u043a\u0443 <code>\"all my jelly babies\"<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>Cow::Borrowed<\/code>. \u0422\u0430\u043a\u043e\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u043b\u044e\u0431\u043e\u043c \u044f\u0437\u044b\u043a\u0435: escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430 <code>\"not UTF-8 \\xff\"<\/code>, \u0442\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0435\u0441\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435.<\/p>\n<pre><code class=\"plaintext\">\/\/ \u0411\u0430\u0439\u0442\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435. hex:   6e 6f 74 20 55 54 46 2d 38 20 5c 78 66 66 ascii: n  o  t     U  T  F  -  8     \\  x  f  f  \/\/ \u0411\u0430\u0439\u0442\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. hex:   6e 6f 74 20 55 54 46 2d 38 20 ff ascii: n  o  t     U  T  F  -  8<\/code><\/pre>\n<p>  Escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c \u0441\u0442\u0440\u043e\u043a \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>Cow&lt;str><\/code> \u2014 \u044d\u0442\u043e 24 \u0431\u0430\u0439\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043d\u043e\u0435, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0432\u0441\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0437\u0430\u0434\u0430\u043d\u044b \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b), \u0447\u0442\u043e \u043d\u0430 \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c <code>&amp;str<\/code>. \u0425\u0443\u0436\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 11 \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u043b\u0430 (\u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 AST), \u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p>  \u0417\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u043c \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u044f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0432\u0441\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043c\u043d\u0435 \u0442\u0440\u044e\u043a\u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u0437\u0432\u0430\u043b <a href=\"https:\/\/docs.rs\/byteyarn\/latest\/byteyarn\/\"><code>byteyarn<\/code><\/a>. \u041e\u043d\u0430 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<blockquote><p><code>Yarn<\/code> \u2014 \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 (\u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 <code>String<\/code>) \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\u0412\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0432 \u0434\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445.<\/li>\n<li>Small string optimization (SSO) \u0434\u043e 15 \u0431\u0430\u0439\u0442 \u0432 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445.<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043b\u0438 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c (owned), \u0438\u043b\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c (borrowed) \u0431\u0443\u0444\u0435\u0440\u043e\u043c (\u043a\u0430\u043a <code>Cow&lt;str><\/code>).<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 <code>'static<\/code>, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/li>\n<\/ul>\n<\/blockquote>\n<p>  \u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0434\u043e\u0431\u0438\u043b\u0441\u044f \u044d\u0442\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<h2><font color=\"#3AC1EF\">\u0414\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u044f<\/font><\/h2>\n<p>  \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0439 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0438 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<ol>\n<li>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u043b\u043e.<\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/li>\n<\/ol>\n<p>  <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e<\/font><\/h3>\n<p>  <code>String<\/code> \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0443 <code>std::string<\/code> \u044f\u0437\u044b\u043a\u0430 C++, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 append \u0437\u0430 \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c append <code>n<\/code> \u0431\u0430\u0439\u0442\u043e\u0432 \u043a \u0431\u0443\u0444\u0435\u0440\u0443, \u0442\u043e \u0442\u0440\u0430\u0442\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 <code>n<\/code> \u0431\u0430\u0439\u0442\u043e\u0432 <code>memcpy<\/code>.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u0440\u043e\u043a\u0438 Go \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b, \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>strings.Builder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e \u0441\u0443\u0442\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a <code>String<\/code> \u044f\u0437\u044b\u043a\u0430 Rust. \u0412 Java \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u043f\u043e\u0445\u043e\u0436\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>java.lang.String<\/code>.<\/p>\n<p>  \u0412 Rust \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0434 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 <code>Box&lt;str><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c <code>String<\/code>. \u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 <code>String<\/code> \u0432 <code>Box&lt;str><\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 <code>realloc()<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043b\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e<sup>1<\/sup>) \u0438\u0437 \u0434\u043b\u0438\u043d\u044b <code>capacity<\/code> \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u0434\u043b\u0438\u043d\u0443 <code>len<\/code> \u0431\u0430\u0439\u0442\u043e\u0432.<\/p>\n<p>  <i>[1] \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u0440\u0435\u0434\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438. \u0423 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u00ab\u043a\u043b\u0430\u0441\u0441\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u00bb, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, <a href=\"https:\/\/mcyoung.xyz\/\/2022\/06\/07\/alkyne-gc\">\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043f\u0438\u0441\u0430\u043b \u0440\u0430\u043d\u0435\u0435<\/a>.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432 <code>realloc()<\/code> \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0442\u043e \u043e\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f no-op, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0435\u043c\u0443 Rust<\/i>.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0438 \u0434\u043b\u0438\u043d\u0443, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u0430\u0432\u043d\u0430 16 \u0431\u0430\u0439\u0442\u0430\u043c.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438<\/font><\/h3>\n<p>  \u0421\u043d\u043e\u0432\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0430\u0440\u0441\u0438\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u041c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u0432\u043e\u0434. \u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0431\u0435\u0437 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>  <code>Box&lt;str><\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \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. \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, <code>Cow&lt;str><\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c), \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432 24 \u0431\u0430\u0439\u0442\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>Cow&lt;str><\/code> \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c 24-\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>String<\/code>.<\/p>\n<p>  \u041d\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 (capacity). \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0442\u0440\u0430\u0442\u044b \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u0432 <code>Cow&lt;str><\/code>?<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u043b\u043e<\/font><\/h3>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043c\u0430\u043b\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>\"Hello, world!\\n\"<\/code> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0435 <code>\\n<\/code> (\u0431\u0430\u0439\u0442\u044b <code>0x5c 0x6e<\/code>) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0431\u0430\u0439\u0442\u043e\u043c \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (<code>0x0a<\/code>). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0443\u0447\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 14 \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e <code>&amp;str<\/code>.<\/p>\n<p>  \u042d\u0442\u043e \u0445\u0443\u0436\u0435 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430<sup>2<\/sup>. \u041b\u0438\u0448\u043d\u044f\u044f \u0442\u0440\u0430\u0442\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u043b\u044f <code>Box&lt;str><\/code> \u0432\u0435\u043b\u0438\u043a\u0430.<\/p>\n<p>  <i>[2] \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u00ab32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Unicode\u00bb.<\/i><\/p>\n<ul>\n<li>\u0421\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>Box&lt;str><\/code> \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f (\u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442) \u0438 \u043f\u043e\u043b\u0435 \u0434\u043b\u0438\u043d\u044b (\u0442\u043e\u0436\u0435 \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442). \u0414\u043b\u0438\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434 <code>0x0000_0000_0000_0001<\/code>. \u0426\u0435\u043b\u0430\u044f \u043a\u0443\u0447\u0430 \u043d\u0443\u043b\u0435\u0439!<\/li>\n<li>\u0421\u0430\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0443\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0439\u0442\u043e\u043c! \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0434\u0435\u043b\u0430 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0442\u0430\u043a\u0438\u0445 \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u043c \u0435\u0449\u0451 \u0432\u043e\u0441\u0435\u043c\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432!<\/li>\n<\/ul>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430 <code>\"a\"<\/code>, \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0441\u0435\u0433\u043e <em>\u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442<\/em>, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 24 \u0431\u0430\u0439\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f <em>\u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c<\/em> \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043d\u0443\u043b\u0438 \u0432 \u043f\u043e\u043b\u0435 <code>len<\/code>.<\/p>\n<h2><font color=\"#3AC1EF\">\u041a\u0440\u0430\u0434\u0451\u043c \u0431\u0438\u0442\u044b<\/font><\/h2>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u044e\u0434\u0436\u0435\u0442\u0430 \u0432 16 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0438\u043f\u0430 <code>Yarn<\/code>. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438 \u043b\u0438\u0448\u043d\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0430\u0440\u0435 <code>(*mut u8, usize)<\/code>?<\/p>\n<p>  <code>usize<\/code> \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 64 \u0431\u0438\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u0438\u043d\u0430 <code>&amp;str<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e 18446744073709551615, \u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 18 \u044d\u043a\u0441\u0430\u0431\u0430\u0439\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438: \u00ab\u0441\u043e\u0442\u043d\u0438 \u044d\u043a\u0441\u0430\u0431\u0430\u0439\u0442\u043e\u0432\u00bb \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043e\u0431\u044a\u0451\u043c\u0430 \u041e\u0417\u0423 \u0432\u043e \u0432\u0441\u0451\u043c \u043c\u0438\u0440\u0435 \u043d\u0430 2023 \u0433\u043e\u0434 (\u043f\u0440\u0438\u043a\u0438\u043d\u0435\u043c: 4 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432 \u043f\u043e 4 \u0413\u0411 \u043a\u0430\u0436\u0434\u044b\u0439). \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c \u041e\u0417\u0423, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 blade-\u0441\u0435\u0440\u0432\u0435\u0440, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0442\u043e \u0435\u0441\u0442\u044c 63 \u0431\u0438\u0442\u0430, \u0442\u043e \u044d\u0442\u043e \u0432\u0434\u0432\u043e\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c (\u0434\u043e \u0434\u0435\u0432\u044f\u0442\u0438 \u044d\u043a\u0441\u0430\u0431\u0430\u0439\u0442\u043e\u0432). \u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0431\u0438\u0442, \u0442\u043e \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u044d\u043a\u0441\u0430\u0431\u0430\u0439\u0442\u0430. \u0410 \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Wikipedia:Size_of_Wikipedia#Size_of_the_English_Wikipedia_database\">\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442<\/a>, \u0447\u0442\u043e Wikimedia Commons \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 428 \u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e 10 \u0422\u0411).<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (\u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0438\u043b\u0438 WASM).<\/p>\n<p>  \u041d\u0430 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0432\u0441\u0451 \u0447\u0443\u0442\u044c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0435\u0435: \u0442\u0435\u043f\u0435\u0440\u044c <code>usize<\/code> \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32 \u0431\u0438\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 4 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 (\u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 32-\u0431\u0438\u0442\u043d\u0443\u044e \u044d\u043f\u043e\u0445\u0443, \u0442\u043e \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c). \u00ab\u0413\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044b\u00bb \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u0442\u043e\u0442 \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<p>  \u041d\u043e \u0434\u0430\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 1 \u0413\u0411 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u043a\u0440\u0430\u0434\u0451\u043c \u0434\u0432\u0430 \u0431\u0438\u0442\u0430) \u043d\u0430 32-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u2014 \u044d\u0442\u043e \u043a\u0443\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438 \u0432\u0441\u0435 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u0432 \u043c\u0438\u0440\u0435 \u043e\u0442\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u043e \u0432\u0441\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u043c, \u0442\u043e \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<p>  \u0412\u044b\u0432\u043e\u0434: \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 <code>&amp;str<\/code> \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0431\u0438\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. <em>\u041d\u0430\u0448\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/em><sup>3<\/sup><\/p>\n<p>  <i>[3] \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e Rust \u0438 C \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0442\u0438\u043f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <code>isize<\/code> \u0438 <code>ptrdiff_t<\/code>). \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u044f\u0437\u044b\u043a\u0430, <em>\u0432\u0441\u0435\u0433\u0434\u0430<\/em> \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u0434\u0432\u0430 \u0431\u0438\u0442\u0430, \u0438 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435. 64-\u0431\u0438\u0442\u043d\u044b\u0435 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u043a\u043e\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u044b.<\/i><\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0420\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u0430\u044f \u043d\u0438\u0448\u0435\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/font><\/h3>\n<p>  \u0412 Rust \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f <em>\u043d\u0438\u0448<\/em>, \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>enum<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c null, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 <code>0x0000_0000_0000_0000<\/code> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430; \u044d\u0442\u043e\u0442 \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043d\u0438\u0448\u0435\u0439\u00bb. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"rust\">enum Foo&lt;'a> {   First(&amp;'a T),   Second }<\/code><\/pre>\n<p>  <code>enum<\/code> \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u00ab\u043b\u0438\u0448\u043d\u0435\u0433\u043e\u00bb \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438: \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b <code>Foo<\/code> \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e, \u0442\u043e \u044d\u0442\u043e <code>Foo::Second<\/code>; \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e <code>Foo::First<\/code> \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 <code>Foo<\/code>. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <code>Option&lt;&amp;T><\/code> \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b: <code>bool<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0431\u0438\u0442\u0430; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 254 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u2014 \u044d\u0442\u043e \u043d\u0438\u0448\u0438. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Rust <code>RawFd<\/code> \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u0448\u0443 \u0434\u043b\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0444\u0430\u0439\u043b\u043e\u0432 POSIX \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 <code>int<\/code>.<\/p>\n<p>  \u041e\u0442\u043e\u0431\u0440\u0430\u0432 \u0443 \u0434\u043b\u0438\u043d\u044b \u0434\u0432\u0430 \u0431\u0438\u0442\u0430, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043d\u0438\u0448\u0438; \u043f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e <code>enum<\/code>.<\/p>\n<pre><code class=\"rust\">enum Yarn {   First(*mut u8, u62),   Second(*mut u8, u62),   Third(*mut u8, u62),   Fourth(*mut u8, u62), }<\/code><\/pre>\n<p>  \u041f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u043f\u043e\u0437\u0436\u0435, \u043c\u044b \u043a\u0440\u0430\u0434\u0451\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e <em>\u0441\u0442\u0430\u0440\u0448\u0438\u0435<\/em> \u0431\u0438\u0442\u044b \u0434\u043b\u0438\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u0432\u0430 \u0441\u0434\u0432\u0438\u0433\u0430<sup>4<\/sup>, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0441\u0442\u0430\u0440\u0448\u0438\u0445 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0431\u0438\u0442\u0430.<\/p>\n<p>  <i>[4] \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e LLVM \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 <code>(x &lt;&lt; 2) >> 2<\/code> \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">movabs rax,0x3fffffffffffffff and    rax,rdi ret<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u0438\u0433\u0440\u0443 \u00ab\u0431\u0430\u0439\u0442 \u0437\u0430 \u0431\u0430\u0439\u0442\u00bb, \u0442\u043e \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 14 \u0431\u0430\u0439\u0442\u043e\u0432 \u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b Intel. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0432\u0430 \u0441\u0434\u0432\u0438\u0433\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043a \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044e \u043a\u043e\u0434\u0430, \u043d\u043e \u043d\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0432\u043e\u0434 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 <code>rdi<\/code> \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432 <code>rax<\/code>.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 RISC-V, \u043f\u043e\u0445\u043e\u0436\u0435, LLVM \u0440\u0435\u0448\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0432\u0430 \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b, \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e <code>x &amp; 0x3fff_ffff_ffff_ffff<\/code> \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0434\u0432\u0430 \u0441\u0434\u0432\u0438\u0433\u0430.<\/i><\/p>\n<p>  \u0412\u043e\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u044d\u0442\u043e \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430\u0448 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<pre><code class=\"rust\">#[repr(C)] #[derive(Copy, Clone)] struct RawYarn {   ptr: *mut u8,   len: usize, }  impl RawYarn {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 RawYarn \u0438\u0437 \u0441\u044b\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432: 2-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430,   \/\/\/ \u0434\u043b\u0438\u043d\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.   fn from_raw_parts(kind: u8, len: usize, ptr: *mut u8) {     assert!(len &lt;= usize::MAX \/ 4, \"no way you have a string that big\");      RawYarn {       ptr,       len: (kind as usize &amp; 0b11) &lt;&lt; (usize::BITS - 2) | len,     }   }    \/\/\/ \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0432\u0438\u0434.   fn kind(self) -> u8 {     (self.len >> (usize::BITS - 2)) as u8   }    \/\/\/ \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0441\u0440\u0435\u0437 (\u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0438\u0434\u0430).   unsafe fn as_slice(&amp;self) -> &amp;[u8] {     slice::from_raw_parts(self.ptr, (self.len &lt;&lt; 2) >> 2)   } }<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e\u0442 \u0442\u0438\u043f <code>Copy<\/code>, \u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0435\u0440\u0443\u0442 \u0435\u0433\u043e \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<ol>\n<li>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0438\u043f <code>Yarn<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>Copy<\/code>, \u0445\u043e\u0442\u044f \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u0435\u0433\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/li>\n<li>\u042d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u043f\u0430\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0432 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445. \u041a\u0430\u043a \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0438\u0436\u0435 \u043f\u0440\u0438 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0438 SSO, \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/li>\n<\/ol>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0448\u0438\u043c, \u0447\u0442\u043e \u0432\u0438\u0434 <code>0<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u044d\u0442\u043e \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00bb, \u0430 \u0432\u0438\u0434 <code>1<\/code> \u2014 \u00ab\u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0432 \u043a\u0443\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\u00bb. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440.<\/p>\n<pre><code class=\"rust\">pub struct Yarn&lt;'a> {   raw: RawYarn,   _ph: PhantomData&lt;&amp;'a str>, }  const BORROWED: u8 = 0; const HEAP: u8 = 1;  impl&lt;'a> Yarn&lt;'a> {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.   pub fn borrowed(data: &amp;'a str) -> Self {     let len = data.len();     let ptr = data.as_ptr().cast_mut();     Self {       raw: RawYarn::from_raw_parts(BORROWED, len, ptr),       _ph: PhantomData,     }   }    \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c.   pub fn owned(data: Box&lt;str>) -> Self {     let len = data.len();     let ptr = data.as_ptr().cast_mut();     mem::forget(data);      Self {       raw: RawYarn::from_raw_parts(HEAP, len, ptr),       _ph: PhantomData,     }   }    \/\/\/ \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.   pub fn as_slice(&amp;self) -> &amp;str {     unsafe {       \/\/ \u0411\u0415\u0417\u041e\u041f\u0410\u0421\u041d\u041e\u0421\u0422\u042c: \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c,       \/\/ \u0438\u043b\u0438 \u0438\u0437 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e \u0441\u0440\u043e\u043a\u043e\u043c \u0436\u0438\u0437\u043d\u0438 'a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0443\u0442 self.       str::from_utf8(self.as_slice())     }   } }  impl Drop for Yarn&lt;'_> {   fn drop(&amp;mut self) {     if self.raw.kind() == HEAP {       let dropped = unsafe {         \/\/ \u0411\u0415\u0417\u041e\u041f\u0410\u0421\u041d\u041e\u0421\u0422\u042c: \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 box, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c         \/\/ in Yarn::owned().         Box::from_raw(self.as_slice())       };     }   } }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0442\u0438\u043f, \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0438\u0439 <code>Cow&lt;str><\/code>, \u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0430\u0439\u0442\u043e\u0432. \u041c\u044b \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u043e\u043a\u0430 \u0436\u0438\u0437\u043d\u0438 <code>Yarn<\/code>:<\/p>\n<pre><code class=\"rust\">impl Yarn&lt;'_> {   \/\/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 yarn \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438, \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438   \/\/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435.   pub fn immortalize(mut self) -> Yarn&lt;'static> {     if self.raw.kind() == BORROWED {       let copy: Box&lt;str> = self.as_slice().into();       self = Yarn::owned(copy);     }      \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u0441\u0431\u0440\u043e\u0441\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e yarn, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e     \/\/ \u0435\u0433\u043e \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u0432\u044b\u0448\u0435     \/\/ \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0443\u0447\u0438.     let raw = self.raw;     mem::forget(self);     Yarn::&lt;'static> {       raw,       _ph: PhantomData,     }   } }<\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0434\u0432\u0435 \u043d\u0438\u0448\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u043b\u044b\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<h2><font color=\"#3AC1EF\">Small String Optimization<\/font><\/h2>\n<p>  <code>std::string<\/code> \u044f\u0437\u044b\u043a\u0430 C++ \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u00ab\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u043b\u043e\u00bb. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>libc++<\/code> \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>std::string<\/code> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e 23 \u0431\u0430\u0439\u0442\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043a\u0443\u0447\u0443!<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u043c C++ \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u044d\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u0434\u043b\u0438\u043d\u044b \u0438 \u0451\u043c\u043a\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u0443\u0444\u0435\u0440 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f small string optimization (SSO). \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 SSO \u0432 <code>libc++<\/code> \u0434\u043b\u0438\u043d\u0430 <code>std::string<\/code> \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 23 \u0431\u0430\u0439\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0401\u043c\u043a\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f: \u0441\u0442\u0440\u043e\u043a\u0430 SSO \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u044c 23.<\/p>\n<p>  <code>RawYarn<\/code> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u0434\u0432\u0435 \u043d\u0438\u0448\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u0434\u0430\u0434\u0438\u043c \u0438\u0445 \u043f\u043e\u0434 \u00ab\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435\u00bb \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u0430\u043b\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0432\u0438\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 2, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e 16-\u0439 \u0431\u0430\u0439\u0442 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u0438\u043d\u043e\u0439.<\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0434 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u0432\u0430 <em>\u0441\u0442\u0430\u0440\u0448\u0438\u0445<\/em> \u0431\u0438\u0442\u0430 <code>len<\/code>: \u0432 \u043a\u0430\u043a\u043e\u043c \u0431\u044b \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u044b \u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u044d\u0442\u0438 \u0431\u0438\u0442\u044b<sup>5<\/sup>.<\/p>\n<p>  <i>[5] \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 little endian. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 little endian.<\/i><\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>RawYarn<\/code> \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c.<\/p>\n<pre><code class=\"rust\">#[repr(C)] #[derive(Copy, Clone)] struct RawYarn {   ptr: MaybeUninit&lt;*mut u8>,   len: usize, }  const SMALL: u8 = 2;  impl RawYarn {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e RawYarn \u0438\u0437 \u0441\u044b\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432: 2-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430,   \/\/\/ \u0434\u043b\u0438\u043d\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.   fn from_raw_parts(kind: u8, len: usize, ptr: *mut u8) {     debug_assert!(kind != SMALL);     assert!(len &lt;= usize::MAX \/ 4, \"no way you have a string that big\");      RawYarn {       ptr: MaybeUninit::new(ptr),       len: (kind as usize &amp; 0b11) &lt;&lt; (usize::BITS - 2) | len,     }   }    \/\/\/ \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0437\u0430 (\u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430).   unsafe fn as_slice(&amp;self) -> &amp;[u8] {     let (ptr, adjust) = match self.kind() {       SMALL => (self as *const Self as *const u8, usize::BITS - 8),       _ => (self.ptr.assume_init(), 0),     };      slice::from_raw_parts(ptr, (self.len &lt;&lt; 2) >> (2 + adjust))   } }<\/code><\/pre>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>SMALL<\/code> \u043c\u044b, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0434\u0432\u0430\u0436\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0434\u0432\u0438\u0433, \u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <code>SMALL<\/code> \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u044f <code>len<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0434\u0432\u0438\u0433 \u0432\u043d\u0438\u0437 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <code>usize::BITS - 8<\/code>. \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0431\u0430\u0439\u0442\u0430\u0445 <code>len<\/code>, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u043d\u0443.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043b\u0438 \u043c\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 <code>SMALL<\/code>, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>as_slice<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0437\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c <em>\u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e<\/em> \u0432 <code>self<\/code>!<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <code>ptr<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>MaybeUninit<\/code>, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u043b\u044b\u0445 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<pre><code class=\"rust\">const SSO_LEN: usize = size_of::&lt;usize>() * 2 - 1;  impl RawYarn {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u043b\u043e\u0433\u043e yarn. `data` \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b \u0434\u043b\u044f `len` \u0431\u0430\u0439\u0442\u043e\u0432,   \/\/\/ \u0430 `len` \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 `SSO_LEN`.   unsafe fn from_small(data: *const u8, len: usize) -> RawYarn {     debug_assert!(len &lt;= SSO_LEN);      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 yarn \u0441 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f (!!)     \/\/ \u0438 \u0434\u043b\u0438\u043d\u043e\u0439, \u0432 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b `small` \u0438     \/\/ `len`.     let mut yarn = RawYarn {       ptr: MaybeUninit::uninit(),       len: (SMALL as usize &lt;&lt; 6 | len)           &lt;&lt; (usize::BITS - 8),     };      \/\/ \u0414\u0435\u043b\u0430\u0435\u043c Memcpy \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u043e\u0432\u044b\u0439 yarn.     \/\/ \u041c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e `yarn`. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c     \/\/ \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0430\u0440\u0448\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e `len`     \/\/ \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 >= 16.     ptr::copy_nonoverlapping(       data,       &amp;mut yarn as *mut RawYarn as *mut u8,       data,     );      yarn   } }<\/code><\/pre>\n<p>  \u0422\u043e\u0447\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 SSO \u2014 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u043d\u043a\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0435\u043c \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u0432\u044b\u0448\u0435, \u043d\u043e \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432\u0435\u0440\u043d\u043e. <code>RawYarn::from_small<\/code> \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u043e \u0432 <code>MaybeUninit<\/code>: \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u043e\u043c, \u0438 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0438\u043f <code>Yarn<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043d\u043e\u0432\u043e\u0435 \u043c\u0430\u043b\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<pre><code class=\"rust\">impl&lt;'a> Yarn&lt;'a> {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.   pub fn borrowed(data: &amp;'a str) -> Self {     let len = data.len();     let ptr = data.as_ptr().cast_mut();      if len &lt;= SSO_LEN {       return Self {         raw: unsafe { RawYarn::from_small(len, ptr) },         _ph: PhantomData,       }     }      Self {       raw: RawYarn::from_raw_parts(BORROWED, len, ptr),       _ph: PhantomData,     }   }    \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c.   pub fn owned(data: Box&lt;str>) -> Self {     if data.len() &lt;= SSO_LEN {       return Self {         raw: unsafe { RawYarn::from_small(data.len(), data.as_ptr()) },         _ph: PhantomData,       }     }      let len = data.len();     let ptr = data.as_ptr().cast_mut();     mem::forget(data);      Self {       raw: RawYarn::from_raw_parts(HEAP, len, ptr),       _ph: PhantomData,     }   } }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <code>Yarn<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u0430!<\/p>\n<pre><code class=\"rust\">impl&lt;'a> Yarn&lt;'a> {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.   pub fn from_char(data: char) -> Self {     let mut buf = [0u8; 4];     let data = data.encode_utf8(&amp;mut buf);     Self {       raw: unsafe { RawYarn::from_small(len, ptr) },       _ph: PhantomData,     }   } }<\/code><\/pre>\n<p>  (\u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c <code>Yarn::immortalize()<\/code>.)<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u0435\u043c, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043c\u0430\u043b\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043b\u0438\u0448\u043d\u044f\u044f \u043d\u0438\u0448\u0430\u2026<\/p>\n<h2><font color=\"#3AC1EF\">\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/font><\/h2>\n<p>  \u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 Rust \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<sup>6<\/sup>.<\/p>\n<p>  <i>[6] \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, <code>&amp;'static str<\/code> \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0442\u0451\u043a\u0448\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442.<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0441\u0442\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u043d\u0438\u0448\u0443 (3) \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0437\u044f\u0442\u044b\u0445 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b; \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0451 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0432 box, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u043e\u043a \u0435\u0451 \u0436\u0438\u0437\u043d\u0438 \u0431\u044b\u043b \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c.<\/p>\n<pre><code class=\"rust\">const STATIC: u8 = 3;  impl&lt;'a> Yarn&lt;'a> {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e yarn \u0438\u0437 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.   pub fn from_static(data: &amp;'static str) -> Self {     let len = data.len();     let ptr = data.as_ptr().cast_mut();      if len &lt;= SSO_LEN {       return Self {         raw: unsafe { RawYarn::from_small(len, ptr) },         _ph: PhantomData,       }     }      Self {       raw: RawYarn::from_raw_parts(STATIC, len, ptr),       _ph: PhantomData,     }   } }<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 <code>Yarn::borrowed<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c <code>data<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0440\u043e\u043a \u0441\u043b\u0443\u0436\u0431\u044b, \u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c <code>STATIC<\/code> \u0432 <code>RawYarn::from_raw_parts()<\/code>.<\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434, \u043e\u043d \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 <code>Yarn::immortalize()<\/code> \u0438\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e <code>RawYarn<\/code>.<\/p>\n<p>  \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <code>byteyarn<\/code> \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 <code>yarn!()<\/code>, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0447\u0442\u043e \u0438 <code>format!()<\/code>. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f yarn. \u041e\u043d \u0431\u044b\u043b \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <code>yarn!(\"this is a literal\")<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u0442\u0440\u043e\u043a\u0443 <code>STATIC<\/code>, \u0430 \u043d\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h2><font color=\"#3AC1EF\">\u041b\u0438\u0448\u043d\u044f\u044f \u043d\u0438\u0448\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u043e\u043d\u0443\u0441\u0430?<\/font><\/h2>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 <code>Option&lt;Yarn><\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 24 \u0431\u0430\u0439\u0442\u0430 \u2014 \u043d\u0430 \u0446\u0435\u043b\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c <code>Yarn<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <code>None<\/code>. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0438\u0437-\u0437\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <code>len<\/code> \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \u0442\u043e\u0433\u0434\u0430 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 <code>BORROWED<\/code>. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043b\u044c: \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0430\u0439\u0442 \u0440\u0430\u0432\u0435\u043d <code>0x80<\/code>, \u0442\u043e \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 <code>SMALL<\/code>. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0430\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 (\u043f\u043e\u043c\u0435\u0442\u0438\u0432 <code>RawYarn::from_raw_parts()<\/code> \u043a\u0430\u043a unsafe \u0438 \u0443\u043a\u0430\u0437\u0430\u0432, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0434\u043b\u0438\u043d\u0443), \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e <code>len<\/code> <em>\u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/em> \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>len<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0431\u044b\u043b\u043e <code>NonZeroUsize<\/code>.<\/p>\n<pre><code class=\"rust\">#[repr(C)] #[derive(Copy, Clone)] struct RawYarn {   ptr: MaybeUninit&lt;*mut u8>,   len: NonZeroUsize,  \/\/ (!!) }  impl RawYarn {   \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e RawYarn \u0438\u0437 \u0441\u044b\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432: 2-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430,   \/\/\/ *\u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439* \u0434\u043b\u0438\u043d\u044b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.   unsafe fn from_raw_parts(kind: u8, len: usize, ptr: *mut u8) {     debug_assert!(kind != SMALL);     debug_assert!(len != 0);     assert!(len &lt;= usize::MAX \/ 4, \"no way you have a string that big\");      RawYarn {       ptr: MaybeUninit::new(ptr),       len: NonZeroUsize::new_unchecked(         (kind as usize &amp; 0b11) &lt;&lt; (usize::BITS - 2) | len),     }   } }<\/code><\/pre>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Rust \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u0448\u0435\u0432\u044b\u0439 \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u043d\u0443\u043b\u0435\u0439, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 <code>Option&lt;Yarn><\/code> \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 16 \u0431\u0430\u0439\u0442. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e: \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0437 \u043e\u0434\u043d\u0438\u0445 \u043d\u0443\u043b\u0435\u0439 \u0434\u043b\u044f <code>Option&lt;Yarn><\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>None<\/code>.<\/p>\n<h2><font color=\"#3AC1EF\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p>  \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 <a href=\"https:\/\/docs.rs\/byteyarn\/latest\/byteyarn\/\"><code>byteyarn<\/code><\/a> \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438:<\/p>\n<blockquote><p><code>Yarn<\/code> \u2014 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u043f\u0435\u0440\u0435\u0434 <code>String<\/code>:<\/p>\n<ul>\n<li>\u0412\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0432 \u0434\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0438\u0437 \u043d\u0438\u0445 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445.<\/li>\n<li>Small string optimization (SSO) \u0434\u043e 15 \u0431\u0430\u0439\u0442 \u0432 64-\u0431\u0438\u0442\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445.<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043b\u0438 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c (owned), \u0438\u043b\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u043c (borrowed) \u0431\u0443\u0444\u0435\u0440\u043e\u043c (\u043a\u0430\u043a <code>Cow&lt;str><\/code>)<\/li>\n<\/ul>\n<p> \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 \u0441\u0440\u043e\u043a \u0436\u0438\u0437\u043d\u0438 <code>'static<\/code>, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. <\/p><\/blockquote>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u041d\u0430\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0439, \u043d\u043e \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0435\u043c \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 (\u043d\u043e \u043d\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f).<\/p>\n<p>  \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>Yarn<\/code> \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435; \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u044d\u0440\u0433\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u044b\u0439 API, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 <code>Yarn<\/code> \u0441\u0442\u0430\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u043e\u0439 <code>Box&lt;str><\/code> \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0432\u0430\u043c, \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0445\u0438\u0442\u0440\u044b\u043c \u0445\u0430\u043a\u0438\u043d\u0433\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<blockquote><p><b><font color=\"#3AC1EF\"><a href=\"https:\/\/t.me\/ruvds_community\">Telegram-\u043a\u0430\u043d\u0430\u043b \u0441 \u0440\u043e\u0437\u044b\u0433\u0440\u044b\u0448\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043e\u0432, \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 IT \u0438 \u043f\u043e\u0441\u0442\u0430\u043c\u0438 \u043e \u0440\u0435\u0442\u0440\u043e\u0438\u0433\u0440\u0430\u0445 ?\ufe0f<\/a><\/font><\/b><\/p><\/blockquote>\n<p><a href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=perevod&amp;utm_content=sobstvennyj_strokovyj_tip_na_rust\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tp\/sk\/z-\/tpskz-7w7a8e74isoowuep40xeg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tp\/sk\/z-\/tpskz-7w7a8e74isoowuep40xeg.png\"\/><\/a><\/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\/761746\/\"> https:\/\/habr.com\/ru\/articles\/761746\/<\/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\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/761746\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/j6\/gh\/cs\/j6ghcsbm2oulbe6zmcoe-me2n3k.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/j6\/gh\/cs\/j6ghcsbm2oulbe6zmcoe-me2n3k.jpeg\" data-blurred=\"true\"\/><\/div>\n<p><\/a><br \/>  \u041f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u2014 \u043c\u043e\u0451 \u0445\u043e\u0431\u0431\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u0441 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0438\u0448\u0443 \u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u0432. \u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u0449\u0435\u0439, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0438 \u0442\u0438\u043f\u044b AST \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a.<\/p>\n<pre><code class=\"rust\">pub enum Expr&lt;'src> {   Int(u32)   Ident(&amp;'src str),   \/\/ ... }<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0430\u0440\u0441\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u0443\u044e <code>String<\/code> \u043c\u044b \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0441\u043b\u043e\u0432\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435.  <\/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-355176","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/355176","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=355176"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/355176\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=355176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=355176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=355176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}