{"id":440570,"date":"2024-12-01T07:32:35","date_gmt":"2024-12-01T07:32:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=440570"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=440570","title":{"rendered":"<span>\u041d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 Rust \u0441\u043b\u043e\u0436\u043d\u0435\u0435 C<\/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\/companies\/ruvds\/articles\/858246\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4j\/sp\/ap\/4jspapxzcp2a6lp5rt7v43ldq0g.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4j\/sp\/ap\/4jspapxzcp2a6lp5rt7v43ldq0g.png\"\/><\/div>\n<p><\/a><br \/> \u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u0432\u0430\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u043b\u0438 <code>unsafe<\/code> \u043a\u043e\u0434 \u043d\u0430 Rust. \u041d\u043e \u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<p> \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/chadaustin\/photohash\">\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Photohash \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e NAS \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0444\u043e\u0442\u043e<\/a> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u043e\u0442 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044f\u0434\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0434\u0438\u0441\u043a\u0438, \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0435\u0436\u0434\u0443 \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u043c\u0438 \u0437\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0430\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u0434\u0430\u0447. <a name=\"habracut\"><\/a><\/p>\n<p> \u0412 Photohash \u0437\u0430\u0434\u0430\u0447\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438: \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p> Rust \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0432\u044b\u0431\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <a href=\"https:\/\/doc.rust-lang.org\/std\/sync\/mpsc\/index.html\">std::sync::mpsc<\/a>, <a href=\"https:\/\/docs.rs\/futures\/latest\/futures\/channel\/index.html\">futures::channel<\/a>, <a href=\"https:\/\/docs.rs\/tokio\/latest\/tokio\/sync\/index.html\">tokio::sync<\/a>, <a href=\"https:\/\/docs.rs\/crossbeam\/latest\/crossbeam\/channel\/index.html\">crossbeam::channel<\/a>, <a href=\"https:\/\/docs.rs\/flume\/\">flume<\/a>, \u0438 <a href=\"https:\/\/docs.rs\/kanal\/\">kanal<\/a>.<\/p>\n<p> \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043c\u043e\u0438\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043c\u0435\u0447\u0442\u044b. \u041d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0435\u0436\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 (\u0432 <a href=\"https:\/\/github.com\/facebook\/sapling\/tree\/main\/eden\/fs\">EdenFS<\/a> \u0438 <a href=\"https:\/\/github.com\/facebook\/watchman\">Watchman<\/a>) \u044f \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0411\u043b\u0438\u0436\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b <code>kanal<\/code>, \u043d\u043e \u043e\u043d \u043f\u0440\u043e\u043d\u0438\u0437\u0430\u043d <code>unsafe<\/code> \u043a\u043e\u0434\u043e\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432 \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445, \u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e <a href=\"https:\/\/matklad.github.io\/2020\/01\/02\/spinlocks-considered-harmful.html\">\u043d\u0435\u0443\u043c\u0435\u0441\u0442\u043d\u044b \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u041f\u041e<\/a>.<\/p>\n<p> \u0417\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 <a href=\"https:\/\/docs.rs\/batch-channel\/\">batch-channel<\/a>, \u043a\u0430\u043d\u0430\u043b\u043e\u043c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0434 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438:<\/p>\n<ul>\n<li><i>\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 <\/i>(producers) <i>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439<\/i> (consumers). \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438.<\/li>\n<li><i>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439<\/i>. \u0422\u0430\u043a\u043e\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u0432 \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u043b\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0438\u043b\u0438 FFI (foreign functions interface, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439).<\/li>\n<li><i>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u043b\u0438 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439<\/i>. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0430 \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a. <\/li>\n<li><i>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/i>. \u041c\u043d\u0435 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u043f\u0443\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a. \u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041d\u0435\u0440\u0430\u0437\u0443\u043c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043a\u0430\u043d\u0430\u043b\u0430 N \u0440\u0430\u0437 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 N \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0422\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439: \u0432\u043e\u0440\u043a\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u043e\u0434\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u0430. \u0417\u0434\u0435\u0441\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e lock-free \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u0445, \u0438 \u0434\u043b\u044f \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0451 \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 (head) \u0438 \u0445\u0432\u043e\u0441\u0442\u0435 (tail) \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u0436\u0435 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u044f\u0434\u0440\u0430\u0445 Intel. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0443 \u0432\u0430\u0441 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0442\u043e \u0441\u043c\u044b\u0441\u043b \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0432\u0441\u0451 \u0437\u0430 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445.<\/li>\n<\/ul>\n<p> \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0435\u0449\u0451 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0446\u0435\u043b\u0438:<\/p>\n<ul>\n<li><i>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0441\u0442\u044c<\/i>. \u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/li>\n<li><i>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430<\/i>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u043e 20 \u041c\u0411 \u043f\u0443\u0442\u0435\u0439, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u0434\u043b\u0438\u043d\u044b.<\/li>\n<\/ul>\n<p> \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0446\u0435\u043b\u044c \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0432\u0435\u043b\u0430 \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u0447\u0435\u0441\u0442\u0432\u0430, \u0441\u0431\u043e\u0435\u0432 \u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u0438\u0437\u0434\u0435\u0440\u0436\u0435\u043a, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u0432.<\/li>\n<\/ul>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0424\u043e\u0440\u043c\u0430 \u043a\u0430\u043d\u0430\u043b\u0430<\/font><\/h2>\n<p> \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043c\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 <code>unsafe<\/code> Rust, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u0430\u043d\u0430\u043b\u0430.<\/p>\n<pre><code class=\"rust\">pub struct Channel&lt;T&gt; {   q: VecDeque&lt;T&gt;,   \/\/ \u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438.   waiting_for_elements: Vec&lt;Waker&gt;,   \/\/ \u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0438.   waiting_for_capacity: Vec&lt;Waker&gt;,   \/\/ \u0414\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. }<\/code><\/pre>\n<p> \u041a\u043e\u0433\u0434\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <code>recv()<\/code> \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u0430\u043d\u0430\u043b \u043f\u0443\u0441\u0442\u043e\u0439, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f <code>waker<\/code> \u0437\u0430\u0434\u0430\u0447\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0431\u0443\u0434\u0438\u043b.<\/p>\n<p> <code><a href=\"https:\/\/doc.rust-lang.org\/core\/task\/struct.Waker.html\">Waker<\/a><\/code> \u2014 \u044d\u0442\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041a\u043e\u0433\u0434\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b, \u043e\u043d \u043f\u0440\u043e\u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0435\u0439 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438. <code>Waker<\/code> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 <a href=\"https:\/\/doc.rust-lang.org\/nomicon\/exotic-sizes.html\">\u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c<\/a>, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">pub struct Recv&lt;'a, T&gt; {   channel: &amp;'a Channel&lt;T&gt;, }  impl&lt;'a, T&gt; Future for Recv&lt;'a, T&gt; {   type Output = T;      fn poll(self: Pin&lt;&amp;mut Self&gt;, cx: &amp;mut Context&lt;'_&gt;) -&gt; Poll&lt;Self::Output&gt; {     \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430?     if let Some(element) = self.channel.q.pop_front() {       \/\/ \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0435\u0441\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0435\u0433\u043e.       Poll::Ready(element)     } else {       \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430, \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.       self.channel.waiting_for_elements.push(cx.waker().clone());       Poll::Pending     }   } }<\/code><\/pre>\n<p> <\/p>\n<blockquote><p><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/i>: \u041a\u043e\u0434 \u0432\u044b\u0448\u0435 \u0447\u0438\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0443 \u043a\u0430\u043d\u0430\u043b\u0430 \u0435\u0441\u0442\u044c <code>Mutex<\/code> \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p><\/blockquote>\n<p> \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 <code>recv()<\/code> \u043f\u0443\u0441\u0442\u0430, \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f <code>waker<\/code>, \u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p> \u041f\u043e\u0437\u0434\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u0441\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f:<\/p>\n<pre><code class=\"rust\">fn send&lt;T&gt;(channel: &amp;mut Channel&lt;T&gt;, value: T) {   channel.q.push_back(value);   let wakers = mem::take(&amp;mut channel.waiting_for_elements);   \/\/ \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0437\u0434\u0435\u0441\u044c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u0434\u0430\u0447.   \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u0443\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u044b (futures), \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043e\u043f\u0440\u043e\u0441, \u0438 \u0435\u0441\u0442\u044c \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0439.   for waker in wakers {     waker.wake();   } }<\/code><\/pre>\n<p> <\/p>\n<blockquote><p>\u0418 \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: <code>waiting_for_elements<\/code> \u2014 \u044d\u0442\u043e <code>Vec&lt;Waker &gt;<\/code>. \u041a\u0430\u043d\u0430\u043b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u0447 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>Vec<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c <code>waker<\/code>, \u0438 \u044d\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f\/\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447.<\/p><\/blockquote>\n<p> \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 \u044d\u0442\u043e \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0451\u043c.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a?<\/font><\/h2>\n<p> \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f <code>Vec<\/code> \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a <code>waker<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u0438\u0445 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432 (futures)? \u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043b\u0438\u0448\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e <code>waker<\/code>, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p> \u0418 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">pub struct Channel&lt;T&gt; {   q: VecDeque&lt;T&gt;,   \/\/ \u041d\u0430\u0447\u0430\u043b\u043e \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u043e\u0433\u043e \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.   waiting_for_elements: WakerList, }  fn send&lt;T&gt;(channel: &amp;Channel&lt;T&gt;, value: T) {   channel.q.push_back(value);   let wakers = channel.waiting_for_elements.extract_list();   \/\/ \u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0432\u0441\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c.   for waker in wakers {     waker.wake();   } }  pub struct Recv&lt;'a, T&gt; {   channel: &amp;'a Channel&lt;T&gt;,   \/\/ \u041a\u0430\u0436\u0434\u044b\u0439 Future \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 WakerSlot, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u043b\u043e\u043c \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e  \/\/ \u0441\u043f\u0438\u0441\u043a\u0430, \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c Channel.    waker: WakerSlot, }  impl&lt;'a, T&gt; Future for Recv&lt;'a, T&gt; {   type Output = T;      fn poll(self: Pin&lt;&amp;mut Self&gt;, cx: &amp;mut Context&lt;'_&gt;) -&gt; Poll&lt;Self::Output&gt; {     if let Some(element) = self.channel.q.pop_front() {       Poll::Ready(element)     } else {       \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430 \u2014 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435.       \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c waker \u0432 \u044d\u0442\u043e\u043c Future, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0435\u0433\u043e \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0430.       self.channel.waiting_for_elements.link(&amp;mut self.waker, cx.waker().clone());       Poll::Pending     }   } }<\/code><\/pre>\n<p> \u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u0439 \u043d\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c. \u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 Rust?<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041a\u0440\u0435\u0439\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432<\/font><\/h2>\n<p> \u0418\u0434\u0435\u044f \u044d\u0442\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0435 \u043d\u043e\u0432\u0430, \u0438 \u044f \u043d\u0430\u0448\u0451\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432:<\/p>\n<ul>\n<li><code><a href=\"https:\/\/docs.rs\/intrusive-collections\/\">intrusive-collections<\/a><\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c, \u043d\u043e \u0443\u0437\u043b\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u043d\u0451\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0436\u0438\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430. \u0412 \u043c\u043e\u0451\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u043c\u0438\u0441 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0438\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u043d\u0430\u043b\u0430.<\/li>\n<li><code><a href=\"https:\/\/docs.rs\/futures-intrusive\/\">futures-intrusive<\/a><\/code> \u2014 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0443 \u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u043d\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u043e\u0438\u043c \u0446\u0435\u043b\u044f\u043c. <\/li>\n<li><code><a href=\"https:\/\/github.com\/pcwalton\/multilist\">multilist<\/a><\/code> \u2014 \u044d\u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u041f\u0430\u0442\u0440\u0438\u043a\u0430 \u0423\u043e\u043b\u0442\u043e\u043d\u0430, \u0435\u0449\u0451 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0448\u0438\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 1.0. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0443\u0437\u043b\u044b \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0443\u0447\u0435.<\/li>\n<\/ul>\n<p> \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0430:<\/p>\n<ul>\n<li><code><a href=\"https:\/\/docs.rs\/lilos-list\/0.1.0\/lilos_list\/\">lilos-list<\/a><\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439 \u041a\u043b\u0438\u0444\u0444\u043e\u043c \u0411\u0438\u0444\u0444\u043b\u043e\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u041e\u0421 <a href=\"https:\/\/docs.rs\/lilos\/\">lilos<\/a>. \u042d\u0442\u043e\u0442 \u043a\u0440\u0435\u0439\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 <code>waker<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0438 \u043e\u043d \u0443\u0436\u0435 \u0431\u043b\u0438\u0436\u0435 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041d\u043e \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u041e\u0421 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043b\u044e\u0441 \u043e\u043d <a href=\"https:\/\/users.rust-lang.org\/t\/should-locks-be-dropped-before-calling-waker-wake\/53057\/4\">\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 waker \u043f\u0440\u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u0445<\/a>, \u0447\u0442\u043e \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 lilos \u043d\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>Send<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code><a href=\"https:\/\/doc.rust-lang.org\/std\/cell\/struct.Cell.html\">std::cell::Cell<\/a><\/code> \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0431\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c\u0438. <\/li>\n<li><code><a href=\"https:\/\/github.com\/tokio-rs\/tokio\/blob\/c8f3539bc11e57843745c68ee60ca5276248f9f9\/tokio\/src\/sync\/batch_semaphore.rs#L35\">tokio<\/a><\/code> \u0442\u043e\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 <code>waker<\/code> \u0432 \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435. \u0415\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0437\u0430\u0442\u043e \u043e\u043d \u0431\u043b\u0438\u0436\u0435 \u0432\u0441\u0435\u0433\u043e \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0441\u043f\u043e\u0440\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0435\u0439 \u043d\u044e\u0430\u043d\u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 Tokio \u043d\u0435 \u0432\u0438\u0434\u0435\u043d. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/gist.github.com\/Darksonn\/1567538f56af1a8038ecc3c664a42462\">\u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u042d\u043b\u0438\u0441 \u0420\u0438\u043b<\/a> \u043d\u0430 \u0442\u0435\u043c\u0443 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0432 Rust.)<\/li>\n<\/ul>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0417\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 (Pin)<\/font><\/h2>\n<p> \u041f\u043e\u0440\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u0435\u0439\u0442. <\/p>\n<p> \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043d\u0430\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b <code>WakerList<\/code>, \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u0438\u0441\u0430 \u0431\u044b\u043b \u0447\u043b\u0435\u043d <code>WakerSlot<\/code>. \u0421\u043b\u043e\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u043b\u0438\u0431\u043e \u043f\u0440\u0438 \u043e\u0442\u043c\u0435\u043d\u0435 \u043f\u0440\u043e\u043c\u0438\u0441\u0430.<\/p>\n<p> <code>WakerList<\/code> \u0438 <code>WakerSlot<\/code> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 Rust \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p> \u0412 C++ \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u044b \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<p> \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0432 Rust, \u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u043c\u044b\u0441\u043b\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 C++, \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u00ab\u043b\u0435\u0433\u043a\u043e\u00bb!<\/p>\n<p> \u041c\u043d\u0435 \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>!Unpin<\/code> (\u043f\u043e \u0444\u0430\u043a\u0442\u0443 <code><a href=\"https:\/\/doc.rust-lang.org\/std\/marker\/struct.PhantomPinned.html\">PhantomPinned<\/a><\/code>) \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 <code>Pin&lt;&amp;mut WakerList&gt;<\/code> \u0438 <code>Pin&lt;&amp;mut WakerSlot&gt;<\/code>.<\/p>\n<p> \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435 <code>Pin&lt;&amp;mut T&gt;<\/code>, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e <code>T<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f. \u042f \u043d\u0435 \u0441\u0442\u0430\u043d\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0438\u043f <code>Pin<\/code> \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u2014 \u0443 \u0419\u043e\u043d\u0430 \u0413\u044c\u0435\u043d\u0441\u0435\u0442\u0430 \u0435\u0441\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=DkMwYxfSYNQ\">\u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0440\u043e\u043b\u0438\u043a<\/a>, \u0433\u0434\u0435 \u043e\u043d \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0441\u043c\u044b\u0441\u043b \u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p> \u0410 \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f (Pin) \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a Rust 1.0 \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u0435\u043d. \u0412 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>memcpy<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0435, \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0430\u043c\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 API \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p> \u0412\u043e\u0442, \u0447\u0442\u043e \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"rust\">struct WakerSlot(...); struct WakerList(...);  impl WakerList {   fn link&lt;'list : 'slot, 'slot&gt;(     self: Pin&lt;&amp;'list mut WakerList&gt;,     slot: Pin&lt;&amp;'slot mut WakerSlot&gt;,   ) }<\/code><\/pre>\n<p> \u042f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0444\u0430\u043a\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u00ab\u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u044c\u00bb \u0438 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u0441\u043b\u043e\u0442\u0430. \u0423\u0432\u044b, \u043d\u043e <a href=\"https:\/\/stackoverflow.com\/questions\/66017394\/does-rust-narrow-lifetimes-to-satisfy-constraints-defined-on-them\">\u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0442\u0430\u043a \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>. \u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0440\u043e\u043a\u0438 \u0436\u0438\u0437\u043d\u0438 \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 \u0431\u0435\u0437 \u0441\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 <code>'list<\/code> \u0438 <code>'slot<\/code> \u0434\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>link<\/code> \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043d\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p> \u0418\u0434\u0435\u044f, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u043c \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0437\u0430\u0434\u0430\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. <\/p>\n<p> (\u041f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u00ab\u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a\u00bb, \u043d\u043e \u044f \u0438\u0441\u043a\u0440\u0435\u043d\u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0445\u043e\u0434 \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.)<\/p>\n<p> \u041c\u043e\u0436\u0435\u0442 \u043b\u0438 <code>WakerSlot<\/code> \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u043f\u0438\u0441\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f?<\/p>\n<pre><code class=\"rust\">struct WakerList(...); struct WakerSlot&lt;'list&gt;(...);  impl WakerSlot&lt;'_&gt; {   fn new(list: &amp;WakerList) -&gt; WakerSlot&lt;'_&gt;; }<\/code><\/pre>\n<p> \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435, \u0447\u0442\u043e <code>WakerSlot<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <code>WakerList<\/code>, \u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>&amp;mut WakerList<\/code> \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u0435\u0449\u0451, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 \u0432 Rust \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u043e\u0434\u043d\u0430 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u043b\u0438\u0431\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445, \u043d\u043e \u043d\u0435 \u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p> \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0441\u0451 \u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041a\u043e\u0433\u0434\u0430 \u043f\u0430\u043d\u0438\u043a\u0430 \u043d\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u0443\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/font><\/h2>\n<p> \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>link<\/code> \u0438 <code>unlink<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0441\u043b\u043e\u0442, \u043d\u043e \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043d\u0430\u0448\u0451\u043b \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432:<\/p>\n<ul>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438 <code>WakerSlot<\/code> \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u043f\u0438\u0441\u043a\u0430.<\/li>\n<li>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430 \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430 <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/li>\n<li>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>&amp;mut<\/code> \u0438 <code>&amp;<\/code> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/li>\n<\/ul>\n<p> \u0418 \u0437\u0434\u0435\u0441\u044c \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432, \u0440\u0435\u0448\u0438\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0435\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0436\u0438\u0437\u043d\u0438:<\/p>\n<ul>\n<li><code>WakerList<\/code> \u043f\u0440\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043b\u043e\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li><code>WakerSlot<\/code> \u043f\u0440\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u0432\u044f\u0437\u0430\u043d (unlink). \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0451\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c.<\/li>\n<\/ul>\n<p> \u0418 \u0438\u0437\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>panic!<\/code> \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>panic!<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c, \u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 (undefined behavior, UB)<\/p>\n<p> \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p> \u041d\u043e \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>abort<\/code>: \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u043a\u0430\u043a <code>[no_std]<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 (abort) \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<p> \u0421\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u044f \u043d\u0430\u0448\u0451\u043b, \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>panic!<\/code> \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>extern \"C\"<\/code> \u0438 \u0432\u043e\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u044d\u0442\u043e\u0439 \u043f\u0430\u043d\u0438\u043a\u0438 \u0432 \u043e\u0442\u043c\u0435\u043d\u0443 \u043d\u0430 Rust.<\/p>\n<pre><code class=\"rust\">#[allow(non_snake_case)] #[inline(never)] #[cold] extern \"C\" fn MUST_UNLINK_WakerSlot_BEFORE_DROP() -&gt; ! {     \/\/ panic! \u0438\u0437 extern \"C\" \u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0442\u043c\u0435\u043d\u0435 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.     panic!(\"Must unlink WakerSlot before drop\")     \/\/ \u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0446\u0435\u043d\u043e\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0440\u043e\u0445\u043e\u0442\u043d\u043e\u0439, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0435\u0439\u0442 `abort`.     \/\/abort::abort() }<\/code><\/pre>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0417\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/font><\/h2>\n<p> \u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b \u044d\u0442\u0443 \u0434\u0435\u0442\u0430\u043b\u044c, \u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>WakerList<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043c\u044c\u044e\u0442\u0435\u043a\u0441. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0438 <code><a href=\"https:\/\/doc.rust-lang.org\/std\/sync\/struct.Mutex.html\">std::sync::Mutex<\/a><\/code>, \u043d\u0438 <code><a href=\"https:\/\/docs.rs\/parking_lot\/latest\/parking_lot\/type.Mutex.html\">parking_lot::Mutex<\/a><\/code> \u043d\u0435 \u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/doc.rust-lang.org\/std\/pin\/index.html#projections-and-structural-pinning\">\u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c <code>lock()<\/code> \u2014 \u044d\u0442\u043e <code>&amp;Mutex&lt;T&gt;<\/code> \u043f\u043e\u0432\u0435\u0440\u0445 <code>&amp;mut T<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c <code>T<\/code>.<\/p>\n<p> \u041c\u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 API \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f <code>Pin&lt;&amp;mut T&gt;<\/code> \u0438\u0437 <code>Pin&lt;&amp;Mutex&lt;T&gt;&gt;<\/code>.<\/p>\n<p> \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u0440\u0435\u0439\u0442 <code><a href=\"https:\/\/docs.rs\/pinned-mutex\/\">pinned-mutex<\/a><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 <code>Mutex<\/code>, <code>MutexGuard<\/code> \u0438 <code>Condvar<\/code> \u0441 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438.<\/p>\n<p> \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0435\u0439\u0442 <a href=\"https:\/\/docs.rs\/pinarcmutex\/\">pinarcmutex<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0442\u0438\u043f <code>PinArcMutex&lt;T &gt;<\/code>, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0439 <code>Pin&lt;Arc&lt;Mutex&lt;T&gt;&gt;&gt;<\/code>, \u043d\u043e \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e, \u0438 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u044c\u044e\u0442\u0435\u043a\u0441 <code>parking_lot<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043b\u0435\u0433\u0447\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p> \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0442\u0430\u0442\u044c \u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Rust, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u0443\u044e (\u0438\u043b\u0438 \u043d\u0435\u044f\u0432\u043d\u0443\u044e) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u042d\u0440\u0433\u043e\u043d\u043e\u043c\u0438\u043a\u0430 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f<\/font><\/h2>\n<p> \u0411\u043e\u0430\u0442\u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0445\u043e\u0440\u043e\u0448\u0438\u0439 <a href=\"https:\/\/without.boats\/blog\/pin\/\">\u043e\u0447\u0435\u0440\u043a<\/a> \u043d\u0430 \u0442\u0435\u043c\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 <code>Pin<\/code> \u0441\u043e\u0437\u0434\u0430\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0435\u0433\u043e \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. <\/p>\n<p> \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e \u0442\u043e\u043f\u0438\u043a\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 \u00ab<a href=\"https:\/\/www.reddit.com\/r\/rust\/comments\/v64nej\/pin_suffering_continues\/\">Pin Suffering Continues<\/a>\u00bb.<\/p>\n<p> \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0435 API \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043a\u0440\u0435\u0439\u0442\u0430 \u0432\u0440\u043e\u0434\u0435 <code><a href=\"https:\/\/docs.rs\/pin-project\/\">pin-project<\/a><\/code> \u0438\u043b\u0438 <code><a href=\"https:\/\/docs.rs\/pin-project-lite\/\">pin-project-lite<\/a><\/code>. (\u0418 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0435 <code><a href=\"https:\/\/docs.rs\/pin-project\/latest\/pin_project\/attr.pinned_drop.html\">pinned_drop!<\/a><\/code>)<\/p>\n<p> \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">let mut wakers = state.as_mut().project().base.project().rx_wakers.extract_some_wakers(); while wakers.wake_all() {     let mut state = self.project_ref().state.lock();     wakers.extract_more(state.as_mut().base().project().rx_wakers); }<\/code><\/pre>\n<p> \u041f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0432\u0435\u0441\u0435\u043b\u043e. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438, \u043d\u043e \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043b\u0430 \u043c\u044b\u0441\u043b\u044c: \u00ab\u0422\u044b \u0436\u0435 \u0437\u043d\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e!\u00bb<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0417\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e!<\/font><\/h2>\n<p> \u041c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u044b\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u2014 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u044b. <code>WakerList<\/code> \u0438 <code>WakerSlot<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0438\u0445 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 <code><a href=\"https:\/\/docs.rs\/wakerset\/\">wakerset<\/a><\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439, \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0439 <code>no_std<\/code> \u0441\u043f\u0438\u0441\u043e\u043a <code>waker<\/code>.<\/p>\n<p> \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044f \u0441\u043c\u043e\u0433 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432 <code>batch_channel<\/code> \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.<\/p>\n<p> \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u0451 \u043f\u043e\u0434\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043f\u0443\u0441\u0442\u0438\u043b, \u043d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b \u0438 MIRI<\/font><\/h2>\n<p> \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043e\u0438\u0445 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>batch-channel<\/code> \u0431\u044b\u043b\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p> \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u0434\u0432\u0443\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043e\u043d \u0432\u0441\u0451 \u0436\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u0435\u043d. \u041f\u043e\u043c\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b MPMC-\u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0441\u044b\u043b\u043e\u043a, \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439. \u0417\u0434\u0435\u0441\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u0441\u0441\u044b\u043b\u043e\u043a: \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043b\u0430\u0441\u044c, \u043e\u043d \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f. <\/p>\n<p> \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u044f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 <code>unsafe<\/code> \u043a\u043e\u0434 \u0437\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c API \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u0440\u0435\u0439\u0442\u0430\u043c\u0438:<\/p>\n<ul>\n<li><code><a href=\"https:\/\/docs.rs\/splitrc\/\">splitrc<\/a><\/code><\/li>\n<li><code><a href=\"https:\/\/docs.rs\/wakerset\/\">wakerset<\/a><\/code><\/li>\n<li><code><a href=\"https:\/\/docs.rs\/pinned-mutex\/\">pinned-mutex<\/a><\/code><\/li>\n<\/ul>\n<p> \u0412 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c Rust, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 API, \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 Rust, \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u043b\u0438\u0448\u0430\u0435\u0442 \u0432\u0430\u0441 \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u0436\u0434\u0435\u043d\u0438\u0439 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 <a href=\"https:\/\/doc.rust-lang.org\/reference\/behavior-considered-undefined.html\">\u043c\u0430\u0441\u0441\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 UB<\/a>.<\/p>\n<p> \u0415\u0441\u0442\u044c \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u0438\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0441\u043f\u043e\u043a\u043e\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c:<\/p>\n<ul>\n<li>\u041d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u0443\u0447\u0448\u0435\u0435 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0430\u0433\u0430\u043c\u0438 \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0422\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0451 \u043e\u0431\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0438 \u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u0434 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d.<\/li>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b.<\/li>\n<\/ul>\n<p> \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, Rust \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/doc.rust-lang.org\/nightly\/unstable-book\/compiler-flags\/sanitizer.html\">\u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u0414\u0432\u0443\u043c\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <a href=\"https:\/\/doc.rust-lang.org\/nightly\/unstable-book\/compiler-flags\/sanitizer.html#addresssanitizer\">ASan<\/a> \u0438 <a href=\"https:\/\/doc.rust-lang.org\/nightly\/unstable-book\/compiler-flags\/sanitizer.html#threadsanitizer\">TSan<\/a>. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b C++ \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0438\u043c\u0438 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0438 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0438\u0445 \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 C \u0438\u043b\u0438 \u0421++.<\/p>\n<p> \u041d\u043e \u0434\u043b\u044f Rust \u0435\u0441\u0442\u044c \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0448\u0435: <a href=\"https:\/\/github.com\/rust-lang\/miri\">MIRI<\/a>. \u042d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432, \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043a\u0440\u0443\u043f\u0443\u043b\u0451\u0437\u043d\u044b\u043c \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 ASAN. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u043d \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 MIRI \u044f \u043f\u0440\u043e\u0432\u0451\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0432 Rust<\/font><\/h2>\n<p> \u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b MIRI, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c:<\/p>\n<pre><code class=\"plaintext\">test link_and_notify_all ... error: Undefined Behavior: trying to retag from &lt;254318&gt; for SharedReadWrite permission at alloc88289[0x10], but that tag does not exist in the borrow stack for this location ... trying to retag from &lt;254318&gt; for SharedReadWrite permission at alloc88289[0x10], but that tag does not exist in the borrow stack for this location ... help: this indicates a potential bug in the program: it performed an invalid operation, but the Stacked Borrows rules it violated are still experimental help: see https:\/\/github.com\/rust-lang\/unsafe-code-guidelines\/blob\/master\/wip\/stacked-borrows.md for further information<\/code><\/pre>\n<p> Stacked borrows? \u0427\u0442\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435?<\/p>\n<p> \u0418 \u0437\u0434\u0435\u0441\u044c \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u0430 \u044f\u0441\u043d\u0430 \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u044f \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0441\u044f \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 <code>unsafe<\/code> Rust \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439:<\/p>\n<ul>\n<li><a href=\"https:\/\/rust-unofficial.github.io\/too-many-lists\/index.html\">Learning Rust With Entirely Too Many Linked Lists<\/a><\/li>\n<li><a href=\"https:\/\/rust-lang.github.io\/unsafe-code-guidelines\/\">Rust Unsafe Code Guidelines<\/a><\/li>\n<li><a href=\"https:\/\/doc.rust-lang.org\/nomicon\/\">The Rustonomicon<\/a><\/li>\n<\/ul>\n<p> \u041c\u043e\u0435\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0431\u044b\u043b\u043e \u00ab\u043c\u044b\u0441\u043b\u0438\u0442\u044c \u043d\u0430 \u0421\u00bb. \u0425\u043e\u0440\u043e\u0448\u0435\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Alias_analysis#Type-based_alias_analysis\">\u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439 \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430<\/a> \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e. \u0421\u0435\u0439\u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u044f \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044e\u0441\u044c \u043d\u0430\u0437\u0430\u0434, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0431\u044b\u043b\u043e \u0433\u043b\u0443\u043f\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0432 Rust \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 C. \u0412 C \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u043d\u0435\u0441\u0451\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430. \u0422\u0430\u043c \u0432\u044b \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. <\/p>\n<p> \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 C \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u0435\u0441\u043b\u0438 <code>p == q<\/code>:<\/p>\n<pre><code class=\"rust\">void foo(int* p, const int* q) {   printf(\"%d\\n\", *q);   *p = 456;   printf(\"%d\\n\", *q); \/\/ \u0415\u0441\u043b\u0438 p == q, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f 456.   *(int*)q = 789;   printf(\"%d\\n\", *p); \/\/ \u0415\u0441\u043b\u0438 p == q, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f 789. }<\/code><\/pre>\n<p> \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>const<\/code> \u0437\u0434\u0435\u0441\u044c \u00ab\u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u00bb \u0432 \u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<pre><code class=\"rust\">fn foo(a: &amp;u32, b: &amp;mut u32) {     println!(\"{a}\");     *b = 123;     println!(\"{a}\"); \/\/ \u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0438 \u0432\u044b\u0448\u0435. }<\/code><\/pre>\n<p> \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 Rust \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0433\u043b\u0430\u0441\u0438\u0442, \u0447\u0442\u043e \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0430, \u043b\u0438\u0431\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 <code>&amp;<\/code> \u0441\u0441\u044b\u043b\u043e\u043a, \u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0442\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p> \u0418 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>a<\/code> \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>b<\/code> \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c.<\/p>\n<p> \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0432 Rust \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0438 \u044d\u0442\u043e \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442. \u0412\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0441\u0441\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432.<br \/> \u0418 \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u043f\u043e\u043a\u0430 \u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0410 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0431\u0449\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430, \u0442\u043e \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d\u0430 \u0432\u0435\u0434\u0451\u0442, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 \u0445\u043e\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u044d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d Box::leak<\/font><\/h2>\n<p> \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f:<\/p>\n<pre><code class=\"rust\">let p = Box::leak(Box::new(MyThing::new())) as *mut MyThing; \/\/ \u041f\u043e\u0437\u0434\u043d\u0435\u0435: let ref: &amp;MyThing = *p; ref.method();<\/code><\/pre>\n<p> \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 MIRI \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e <code>p<\/code> \u0431\u044b\u043b\u0430 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438\u0437 \u0431\u0435\u0441\u0441\u0440\u043e\u0447\u043d\u043e\u0439 <code>&amp;mut<\/code>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u043e\u0439 <code>Box::leak<\/code>, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0430 \u043d\u0435\u0451 \u043e\u0431\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 <code>&amp;MyThing<\/code> \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p> \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u043b\u0430 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u0431\u0435\u0437 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<pre><code class=\"rust\">let p = Box::into_raw(MyThing::new()); \/\/ \u041f\u043e\u0437\u0434\u043d\u0435\u0435: let ref: &amp;MyThing = *p; ref.method();<\/code><\/pre>\n<p> <\/p>\n<blockquote><p><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/i>: \u044d\u0442\u043e \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0431\u0430\u0433 MIRI, \u0438\u043b\u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u044b\u043b\u0438 \u0441\u043c\u044f\u0433\u0447\u0435\u043d\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 nightly-2024-06-12 \u044f \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0443\u0436\u0435 \u043d\u0435 \u043c\u043e\u0433\u0443. \u0412\u043e\u0442 \u0433\u0434\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u0431\u043e\u043b\u044c: \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 MIRI \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u0435\u044f\u0441\u043d\u043e, \u043c\u043e\u044f \u0432 \u0442\u043e\u043c \u0432\u0438\u043d\u0430 \u0438\u043b\u0438 \u0436\u0435 \u043d\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e <code>&amp;mut<\/code> \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043b\u0438 <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c? \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443.<\/p><\/blockquote>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u258d Box::from_raw<\/font><\/h2>\n<p> \u0425\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Box::into_raw<\/code>, \u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0435 \u0435\u0451 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Box::from_raw<\/code>, \u0432\u0435\u0440\u043d\u043e? \u041d\u043e \u0438 \u0437\u0434\u0435\u0441\u044c MIRI \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0430\u0441\u044c.<\/p>\n<p> \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"rust\">unsafe {     let ptr = ptr.as_ptr();     std::ptr::drop_in_place(ptr);     std::alloc::dealloc(         ptr as *mut u8,         std::alloc::Layout::new::&lt;Inner&lt;T&gt;&gt;()); }<\/code><\/pre>\n<p> <\/p>\n<blockquote><p><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/i>: \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u043b\u043e \u0431\u044b\u0442\u044c \u0431\u0430\u0433\u043e\u043c MIRI. \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u044f \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043c\u043e\u0433. \u042f \u0438\u0437\u043c\u0435\u043d\u0438\u043b <code>splitrc<\/code> \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>Box::into_raw<\/code> \u0438 <code>Box::from_raw<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 MIRI \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430. \u042f \u0432\u043a\u043b\u044e\u0447\u0438\u043b MIRI \u0432 \u0441\u0432\u043e\u044e \u0441\u0445\u0435\u043c\u0443 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0435\u0441\u043b\u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043d\u0430 \u0432\u0434\u0440\u0443\u0433 \u0443\u043a\u0430\u0436\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p><\/blockquote>\n<p> <\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0421\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435, \u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/font><\/h2>\n<p> \u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u0435\u043c\u044b \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043a\u0430\u043d\u0430\u043b \u0438 \u0435\u0451 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c \u0432 <code>wakerset<\/code>.<\/p>\n<p> \u0412 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0435\u0433\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<pre><code class=\"rust\">struct Pointers {     next: *mut Pointers,     prev: *mut Pointers,     pinned: PhantomPinned, }  struct WakerList {     pointers: Pointers, }  struct WakerSlot {     pointers: Pointers,     \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043f\u0438\u0441\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f.     owner: *mut WakerList,     waker: Option&lt;Waker&gt;, }<\/code><\/pre>\n<p> \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u043e\u0442\u043e\u043a <code>\u0410<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <code>&amp;mut WakerList<\/code> \u0441 \u0446\u0435\u043b\u044c\u044e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 <code>waker<\/code>. \u041f\u043e\u0442\u043e\u043a <code>B<\/code> \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <code>&amp;WakerSlot<\/code>.<\/p>\n<p> \u0415\u0441\u043b\u0438 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 <code>&amp;mut WakerSlot<\/code> (\u0438\u043b\u0438 \u0434\u0430\u0436\u0435 <code>&amp;WakerSlot<\/code>) \u043f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c <code>&amp;mut WakerSlot<\/code>, \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432. <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u044d\u043a\u0441\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u043e\u0439, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0418 \u0432 \u044d\u0442\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 C.<\/p>\n<p> \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Rust \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432 \u0441\u0441\u044b\u043b\u043a\u0443, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043d\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0438. <\/p>\n<p> \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>&amp;WakerSlot<\/code> \u0432 \u0440\u0430\u043d\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 <code>pointers<\/code> \u0438 <code>waker<\/code>.<\/p>\n<p> \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 <code><a href=\"https:\/\/doc.rust-lang.org\/std\/cell\/struct.UnsafeCell.html\">UnsafeCell<\/a><\/code>. \u041e\u043d \u0432\u043d\u043e\u0441\u0438\u0442 \u00ab\u0431\u0430\u0440\u044c\u0435\u0440 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00bb, \u0430 <code>UnsafeCell&lt;Pointers&gt;<\/code> \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f. \u041c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043f\u043e\u043b\u044f\u043c <code>Pointer<\/code> \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432.<\/p>\n<pre><code class=\"rust\">struct WakerList {     pointers: Pointers, }  struct WakerSlot {     \/\/ UnsafeCell: \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 WakerList, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0441\u0441\u044b\u043b\u043e\u043a WakerSlot.     pointers: UnsafeCell&lt;Pointers&gt;,     \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u043b\u043e\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043f\u0438\u0441\u043a\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f.     owner: *mut WakerList,     waker: Option&lt;Waker&gt;, }<\/code><\/pre>\n<p> \u041a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043b\u0438\u0448\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043b\u043e\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043a <code>UnsafeCell<\/code> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u043c\u0435\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a.<\/p>\n<p> \u041f\u0440\u043e\u0434\u0435\u043b\u0430\u043b \u044f \u044d\u0442\u043e, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432 \u0432\u0430\u0436\u043d\u0443\u044e \u0438 \u0442\u043e\u043d\u043a\u0443\u044e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e \u0434\u043b\u044f API: \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c <code>&amp;mut WakerList<\/code>. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e <code>&amp;mut WakerSlot<\/code>, \u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f <code>WakerList<\/code> \u0437\u0430 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0431\u044b \u043f\u043e\u0434 \u0443\u0433\u0440\u043e\u0437\u043e\u0439. (\u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e <code>WakerList<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <code>UnsafeCell&lt;Pointers&gt;<\/code>.)<\/p>\n<p> \u041a\u0440\u0435\u0439\u0442 <code><a href=\"https:\/\/docs.rs\/pinned-aliasable\/latest\/pinned_aliasable\/\">pinned-aliasable<\/a><\/code> \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u044d\u0442\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443: \u00ab\u041a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043a \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438?\u00bb \u041f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 \u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u042d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043c\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u043c\u0438, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u044e\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430 \u043d\u0435 \u043e\u0447\u0438\u0449\u0430\u044e\u0442\u0441\u044f. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0442\u0435\u043c\u0443 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/63818\">Issue #63818<\/a>.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u041f\u043e\u043b\u043d\u044b\u0439 \u043e\u0442\u043a\u0430\u0437 \u043e\u0442 \u0441\u0441\u044b\u043b\u043e\u043a<\/font><\/h2>\n<p> \u041a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0435\u0433\u043a\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0438\u0435 <code>&amp;mut<\/code> \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0443\u0437\u043b\u044b. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u0441\u043b\u0435\u0433\u043a\u0430 \u043d\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439, \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435\u043c:<\/p>\n<pre><code class=\"rust\">let p = &amp;slot.pointers as *mut Pointers; let next: &amp;mut Pointers = *(*p).next; let prev: &amp;mut Pointers = *(*p).prev; next.prev = prev as *mut Pointers; prev.next = next as *mut Pointers; (*p).next = ptr::null_mut(); (*p).prev = ptr::null_mut();<\/code><\/pre>\n<p> \u0415\u0441\u043b\u0438 <code>slot<\/code> \u2014 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0442\u043e\u0433\u0434\u0430 \u0438 <code>next<\/code>, \u0438 <code>prev<\/code> \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 <code>WakerList<\/code>, \u0438 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0432\u0435 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p> \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435. \u0422\u0430\u043a \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. <\/p>\n<pre><code class=\"rust\">let p = &amp;slot.pointers as *mut Pointers; let next = (*p).next; let prev = (*p).prev; (*next).prev = prev; (*prev).next = next; (*p).next = ptr::null_mut(); (*p).prev = ptr::null_mut();<\/code><\/pre>\n<p> \u041d\u043e \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u0441\u043c\u043e\u0433\u0443 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0443\u0442\u044f\u043c \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432. <\/p>\n<p> \u0418 \u043f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043e\u043a \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0447\u0442\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<pre><code class=\"rust\">let nextp = addr_of_mut!((*node).next); let prevp = addr_of_mut!((*node).prev); let next = nextp.read(); let prev = prevp.read(); addr_of_mut!((*prev).next).write(next); addr_of_mut!((*next).prev).write(prev); nextp.write(ptr::null_mut()); prevp.write(ptr::null_mut());<\/code><\/pre>\n<p> (\u0422\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0446\u0435\u043d\u0438\u0442\u044c C).<\/p>\n<p> \u041a\u043b\u044e\u0447\u043e\u043c \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>addr_of_mut!<\/code>: \u043e\u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0441\u0441\u044b\u043b\u043a\u0443. \u041d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0432\u043e\u0445: \u0432\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 <code>addr_of_mut!<\/code>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/doc.rust-lang.org\/beta\/std\/ptr\/macro.addr_of_mut.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<blockquote><p><i>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/i>: \u043a\u043e\u0433\u0434\u0430 \u044f \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e, \u0432 Rust 1.82 \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <a href=\"https:\/\/doc.rust-lang.org\/stable\/reference\/expressions\/operator-expr.html#raw-borrow-operators\">\u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/a>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c <code>addr_of_mut!<\/code> \u043d\u0430 <code>&amp;raw mut<\/code>, \u0430 <code>addr_of!<\/code> \u2014 \u043d\u0430 <code>&amp;raw const<\/code>. \u041d\u043e \u043c\u043d\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435\u044f\u0441\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u043a.<\/p><\/blockquote>\n<p> \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u044d\u0442\u0443 \u043d\u043e\u0432\u043e\u0441\u0442\u044c, \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u044f \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b \u0432\u0441\u0435 <code>WakerSet<\/code> \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 <code>grep<\/code> \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442: \u043a\u043e\u0434 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0432 \u043d\u0451\u043c \u043f\u043e\u043b\u043d\u043e \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>addr_of_mut!<\/code>, \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p> \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u041f\u0430\u0442\u0440\u0438\u043a \u0423\u043e\u043b\u0442\u043e\u043d \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0432\u0432\u0435\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e Rust \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>-&gt;<\/code>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438 \u043f\u0440\u043e\u0449\u0435 \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f.<\/p>\n<p> \u0414\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Rust \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432, \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 CI \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c <code>unsafe<\/code> \u043a\u043e\u0434, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 ASAN, TSAN \u0438 MIRI (<a href=\"https:\/\/github.com\/rust-lang\/unsafe-code-guidelines\/blob\/master\/wip\/stacked-borrows.md\">stacked borrows<\/a> \u0438 <a href=\"https:\/\/perso.crans.org\/vanille\/treebor\/\">tree borrows<\/a>). <\/p>\n<p> \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c Rust, \u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u0440\u0435\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>unsafe<\/code> \u043a\u043e\u0434, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043b\u0443\u0447\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b. \u042f \u043d\u0435 \u043c\u043e\u0433 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 <code>wakerset<\/code>, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432 <code>batch-channel<\/code>.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d MIRI: Stacked Borrows \u0438 Tree Borrows<\/font><\/h2>\n<p> MIRI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432: <i>stacked borrows<\/i> \u0438 <i>tree borrows<\/i>.<\/p>\n<p> \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0445 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c. \u042d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0441 \u043e\u0434\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e: \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 Rust. \u0420\u0430\u043b\u044c\u0444 \u042e\u043d\u0433, \u041d\u0435\u0432\u0435\u043d \u0412\u0438\u043b\u043b\u0430\u043d\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0431\u044f\u0442\u0430 \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u044e\u0442 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0411\u0435\u0437 MIRI \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c\u0443 Rust. <\/p>\n<p> \u042f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c stacked borrows \u0438 tree borrows \u2014 \u043f\u043e\u043a\u0430 \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0421\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f<\/font><\/h2>\n<p> \u042d\u0442\u0430 \u0442\u0435\u043c\u0430 <a href=\"https:\/\/github.com\/rust-lang\/unsafe-code-guidelines\/issues\/495\">\u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/a>, \u0442\u0430\u043a \u0447\u0442\u043e, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u0442\u0440\u0430\u0442\u0438\u0442 \u0441\u0432\u043e\u044e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p> \u0412\u043e\u043a\u0440\u0443\u0433 \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u0434\u0451\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, <a href=\"https:\/\/rust-for-linux.com\/\">\u043f\u0440\u043e\u0435\u043a\u0442 Rust-for-Linux<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0441\u0442\u0430\u0432\u0438\u0442 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>Pin<\/code> \u0438 \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e <a href=\"https:\/\/github.com\/Rust-for-Linux\/linux\/issues\/354\">\u0441\u043f\u0438\u0441\u043a\u0430 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>. <\/p>\n<p> \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/rust-for-linux.com\/the-safe-pinned-initialization-problem\">\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/a>. \u0412 \u044f\u0434\u0440\u0435 Linux \u0435\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412 <code>wakerset<\/code> \u044f \u043e\u0431\u043e\u0448\u0451\u043b \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0446\u0435\u043d\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0432 \u0434\u043b\u044f <code>WakerList<\/code> \u0434\u0432\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f: \u043e\u0434\u043d\u043e \u043f\u043e\u0434\u0432\u0438\u0436\u043d\u043e\u0435 \u0438 \u043e\u0434\u043d\u043e \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u043e\u0435. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p> \u041a \u0441\u043b\u043e\u0432\u0443, \u0443 y86-dev \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u00ab<a href=\"https:\/\/y86-dev.github.io\/blog\/safe-pinned-initialization\/overview.html\">Safe Pinned Initialization<\/a>\u00bb.<\/p>\n<h2><font color=\"#3AC1EF\">\u258d \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p> \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0447\u0435\u0440\u0435\u0434\u0430 \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u0439 \u043a Rust, \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u044f\u0437\u044b\u043a \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448 \u2014 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u0432\u043e\u0438\u043c \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u043c\u043e\u0438\u0445 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0439 \u0441\u0442\u0430\u043b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 API. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>wakerset<\/code>, \u043d\u0435 \u0440\u0438\u0441\u043a\u0443\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p> \u0427\u0442\u043e \u044f \u0443\u0441\u0432\u043e\u0438\u043b \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430?<\/p>\n<ul>\n<li>\u041f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>unsafe<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b\u043c.<\/li>\n<li>\u0421\u0441\u044b\u043b\u043a\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 C.<\/li>\n<li>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0436\u0430\u0441\u0435\u043d, \u043d\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u0435\u0433\u043e \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u0434\u043e\u0432\u0435\u0434\u0443\u0442 \u0434\u043e \u0443\u043c\u0430.<\/li>\n<li>\u0414\u043b\u044f \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c <code>UnsafeCell<\/code>.<\/li>\n<li>\u042f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u0432\u044f\u0437\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0442\u0440\u0443\u0437\u0438\u0432\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e? \u0411\u044b\u043b\u043e \u0431\u044b \u043a\u0440\u0443\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. <\/li>\n<li>\u041a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MIRI, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442\u044b.<\/li>\n<li>\u0418\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u043d\u0435 \u043b\u0435\u0433\u0447\u0435, \u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c \u043a\u043e\u0434.<\/li>\n<\/ul>\n<p> <\/p>\n<blockquote><p><b><font color=\"#3AC1EF\"><a href=\"https:\/\/t.me\/ruvds_community\">Telegram-\u043a\u0430\u043d\u0430\u043b \u0441\u043e \u0441\u043a\u0438\u0434\u043a\u0430\u043c\u0438, \u0440\u043e\u0437\u044b\u0433\u0440\u044b\u0448\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043e\u0432 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u043c\u0438 IT \ud83d\udcbb<\/a><\/font><\/b><\/p><\/blockquote>\n<p><a href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=Bright_Translate&amp;utm_content=nebezopasnyj_rust_slozhnee_c\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/7u\/o0\/_9\/7uo0_9itb0bkl_y8_0_n1a57vuc.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/7u\/o0\/_9\/7uo0_9itb0bkl_y8_0_n1a57vuc.jpeg\" data-blurred=\"true\"\/><\/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\/858246\/\"> https:\/\/habr.com\/ru\/articles\/858246\/<\/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\/companies\/ruvds\/articles\/858246\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4j\/sp\/ap\/4jspapxzcp2a6lp5rt7v43ldq0g.png\" data-src=\"https:\/\/habrastorage.org\/webt\/4j\/sp\/ap\/4jspapxzcp2a6lp5rt7v43ldq0g.png\"\/><\/div>\n<p><\/a><br \/> \u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437 \u0432\u0430\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0438\u043b\u0438 <code>unsafe<\/code> \u043a\u043e\u0434 \u043d\u0430 Rust. \u041d\u043e \u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<p> \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/chadaustin\/photohash\">\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Photohash \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e NAS \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0444\u043e\u0442\u043e<\/a> \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u043e\u0442 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438 \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044f\u0434\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0434\u0438\u0441\u043a\u0438, \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0435\u0436\u0434\u0443 \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c\u0438, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u043c\u0438 \u0437\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0430\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u0434\u0430\u0447. <\/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-440570","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/440570","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=440570"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/440570\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=440570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=440570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=440570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}