{"id":345719,"date":"2023-02-20T15:07:33","date_gmt":"2023-02-20T15:07:33","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=345719"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=345719","title":{"rendered":"<span>\u041a\u0430\u043a \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 Rust (\u0431\u0435\u0437 unsafe!). \u0427\u0430\u0441\u0442\u044c 1<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u00a0\u0441\u0435\u0442\u0438 \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0Rust \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0441\u043e \u0441\u043b\u0430\u0439\u0441\u043e\u043c (\u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>my_slice[i]<\/code>) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u00a0\u0446\u0435\u043b\u044f\u0445 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043a\u0430\u043a\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u0414\u0435\u0442\u0430\u043b\u0438 \u044d\u0442\u043e\u0433\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0443\u043c\u0430\u043d\u043d\u044b. \u041c\u0430\u043b\u043e \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u0438\u0435\u2011\u043b\u0438\u0431\u043e \u0432\u043d\u044f\u0442\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438 \u043d\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u00a0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u044d\u0442\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432, \u043d\u0435\u00a0\u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043a <code>unsafe<\/code> \u043a\u043e\u0434\u0443.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u044b (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u00bb), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f <code>unsafe<\/code> \u043a\u043e\u0434\u0430, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0437\u00a0\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432.<\/p>\n<p><strong>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443:<\/strong><\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0432\u044b \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u0438\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0431\u0435\u0437\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>unsafe<\/code> \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u00a0\u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Rust\u2011\u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u043d\u0430\u043c \u0441\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u0434\u0435\u0448\u0435\u0432\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0432\u0441\u0435\u2011\u0442\u0430\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446?<\/h2>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">let array = [0, 1, 2, 3]; let a = array[1]; \/\/ \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e let b = array[7]; \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430!<\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f \u043a 7-\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 4\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 7-\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u00a0\u043d\u0435\u043c \u043d\u0435\u0442.<\/p>\n<p>\u0412\u00a0C \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e\u00a0\u0431\u044b \u043a\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0443 \u043a\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0447\u0442\u043e\u00a0\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0444\u0435\u0440\u0430<\/strong>.<\/p>\n<p>\u041f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heartbleed\"><u>Heartbleed<\/u><\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430, \u043d\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043d\u0435\u00a0\u0438\u043c\u0435\u044e\u0442 \u0442\u0430\u043a\u0438\u0445 \u043a\u0440\u0438\u0447\u0430\u0449\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <a href=\"https:\/\/www.cvedetails.com\/vulnerability-list\/cweid-787\/vulnerabilities.html\"><u>\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e<\/u><\/a>. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043b\u044f\u00a0\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430\u00a0\u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435, \u0447\u0442\u043e\u00a0\u043e\u043d \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u00a0\u2014 \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0440\u0435\u0434\u0438\u0442\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043c\u0430\u0439\u043d\u0438\u0442\u044c \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0443, \u0448\u043f\u0438\u043e\u043d\u0438\u0442\u044c \u0437\u0430\u00a0\u0432\u0430\u043c\u0438 \u0438\u00a0\u0442.\u00a0\u0434. \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430\u00a0\u2014 <a href=\"https:\/\/cwe.mitre.org\/top25\/archive\/2022\/2022_cwe_top25.html\"><u>\u0441\u0430\u043c\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443 Rust \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <strong>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446<\/strong> <strong>(bounds checks)<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442\u00a0\u2014 \u0447\u0442\u043e\u2011\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"rust\">\/\/ \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 [i] pub fn index(slice: &amp;[T], idx: usize) { \u00a0\u00a0\u00a0\u00a0if idx &lt; slice.len() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ TODO: \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u00a0\u00a0\u00a0\u00a0} else { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ TODO: \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0430\u043d\u0438\u043a\u0443 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u00a0\u00a0\u00a0\u00a0} }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u00a0\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443,\u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u00a0Rust, <a href=\"https:\/\/doc.rust-lang.org\/stable\/book\/ch09-01-unrecoverable-errors-with-panic.html\"><u>\u0437\u0430\u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442<\/u><\/a>.<\/p>\n<p>\u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043c\u0435\u0440\u0430 \u0441\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0426\u041f, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<h2>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/h2>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u00a0\u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0435.<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043e\u0442\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043a\u043e\u0433\u0434\u0430\u2011\u043b\u0438\u0431\u043e \u0432\u0438\u0434\u0435\u043b \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435,\u00a0\u0431\u044b\u043b\u043e<strong> 15%<\/strong>, \u043d\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1% \u0434\u043e 3%<\/strong>,<strong> <\/strong>\u0438 \u0434\u0430\u0436\u0435 \u044d\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 (\u043a\u0430\u043a \u043c\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u043c!), \u0435\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u043e\u043e\u0431\u0449\u0435 <a href=\"https:\/\/blog.readyset.io\/bounds-checks\/\"><u>\u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u043a\u0430\u043a\u043e\u0433\u043e\u2011\u043b\u0438\u0431\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446<\/u><\/a>.<\/p>\n<h2>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438!<\/h2>\n<p>\u041f\u043e\u043a\u0430 \u044f \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b, \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0441\u0430\u043c\u0438 \u043c\u043e\u0433\u043b\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043e\u0447\u0438\u044e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 <a href=\"https:\/\/rustup.rs\/\"><u>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Rust<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"rust\">cargo install cargo-show-asm hyperfine git clone https:\/\/github.com\/Shnatsel\/bounds-check-cookbook cd bounds-check-cookbook cargo build --release<\/code><\/pre>\n<h2>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435\u00a0<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fibonacci_number\"><u>\u0427\u0438\u0441\u043b\u0430 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438<\/u><\/a> \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 <a href=\"https:\/\/doc.rust-lang.org\/stable\/std\/vec\/struct.Vec.html\"><u>Vec<\/u><\/a>:<\/p>\n<pre><code class=\"rust\">#[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn fibonacci_vec(length: usize) -> Vec&lt;u64> { \u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u0432\u0441\u044e \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439. \u00a0\u00a0\u00a0\u00a0\/\/ \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, vec![0; length] \u0443\u0436\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u041e\u0421 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Vec \u043d\u0443\u043b\u044f\u043c\u0438 \u2014 \u0443 \u041e\u0421 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u00a0\u00a0\u00a0\u00a0let mut fib = vec![0; length];  \u00a0\u00a0\u00a0\u00a0\/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c Vec \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u00a0\u00a0\u00a0\u00a0if length > 1 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[1] = 1; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443! \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446! \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0if length > 2 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for i in 2..length { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2];\u00a0 \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435! \u041e, \u043d\u0435\u0442! \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0fib \/\/ \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c return, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 } pub fn main() { \u00a0\u00a0\u00a0\u00a0\/\/ \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u044f\u0434 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u00a0\u00a0\u00a0\u00a0let arg = std::env::args().nth(1).expect(\"Please specify length\"); \u00a0\u00a0\u00a0\u00a0let length: usize = arg.parse().expect(\"That's not a number!\"); \u00a0\u00a0\u00a0\u00a0\/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0443\u044e \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u00a0\u00a0\u00a0\u00a0let fibonacci = fibonacci_vec(length); \u00a0\u00a0\u00a0\u00a0\/\/ \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b \u0435\u0433\u043e \u043a\u0430\u043a \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u00a0\u00a0\u00a0\u00a0println!(\"{:?}\", fibonacci.last()); }<\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448 \u0432\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0432\u00a0\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u041c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u00a0main \u043f\u0430\u0440\u0443 \u0442\u0440\u044e\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446:<\/p>\n<pre><code class=\"rust\">cargo asm --rust --bin fibvec_naive_indexing fibonacci_vec<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>fibonacci_vec<\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0426\u041f \u0431\u0443\u0434\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c) \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0Rust\u2011\u043a\u043e\u0434\u043e\u043c, \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0435\u00a0\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435! \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043d\u0430\u0439\u0442\u0438 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u0446\u0438\u043a\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430\u00a0\u0447\u0430\u0441\u0442\u044c <code>fib[i] = fib[i-1] + fib[i-2];<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0434\u044f \u0435\u0435 \u0432\u00a0\u0432\u044b\u0432\u043e\u0434\u0435 <code>cargo asm<\/code>:<\/p>\n<pre><code class=\"rust\">\u00a0\u00a0\u00a0\u00a0\/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 15 \u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435! \u041e, \u043d\u0435\u0442! add rsi, qword ptr [rbp + 8rax - 24] mov qword ptr [rbp + 8rdi], rsi<\/code><\/pre>\n<p>\u0418 \u044d\u0442\u043e \u0432\u0441\u0435? \u0412\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/9f5\/5fc\/87b\/9f55fc87be693d74d3aea35585d60906.jpeg\" width=\"875\" height=\"439\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9f5\/5fc\/87b\/9f55fc87be693d74d3aea35585d60906.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u0430\u0442\u044c \u0432\u043d\u0438\u0437, \u0442\u043e \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0435\u0449\u0435 \u043a\u043e\u0434, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0439\u0441\u044f \u043a\u00a0\u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0\u2014 \u043d\u0435\u00a0\u0432\u0441\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code class=\"rust\">.LBB10_11:         \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 15         fib[i] = fib[i-1] + fib[i-2]; \/\/ indexing in a loop! Oh no!     dec rdi      lea rdx, [rip + .L__unnamed_7]     jmp .LBB10_14  .LBB10_13:     mov rdi, r14  .LBB10_14:     mov rsi, r14     call qword ptr [rip + core::panicking::panic_bounds_check@GOTPCREL]      ud2<\/code><\/pre>\n<p>\u041c\u044b \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0442\u043e, \u043a\u0430\u043a\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <strong>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b<\/strong> \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435\u00a0\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a\u00a0\u043f\u0430\u043d\u0438\u043a\u0435, \u0430\u00a0\u043f\u0430\u043d\u0438\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u0430\u043b \u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u044b <strong>\u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c<\/strong> \u043a\u043e\u0434, \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0430, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0423\u043c\u043d\u043e!<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443! \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e <code>core::panicking::panic_bounds_check<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043f\u0430\u043d\u0438\u043a\u0430 \u0438\u0437\u2011\u0437\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0432\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u00a0\u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043a\u043e\u0434\u0430. <strong>\u0422\u0430\u043a \u0432\u043e\u0442 \u043a\u0430\u043a\u00a0\u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442!<\/strong><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u00a0\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u0434\u043b\u044f\u00a0\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 <code>if length > 1 { fib[1] = 1; }<\/code> \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430\u2026<\/p>\n<pre><code>\/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 10 if length > 1 { cmp r14, 2 jb .LBB10_17  \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 11 fib[1] = 1; mov qword ptr [rbp + 8], 1<\/code><\/pre>\n<p>\u0410 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0442! \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 <code>length<\/code> \u0441\u0442\u0440\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u043d\u0435\u0443\u0434\u0430\u0447\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430. \u041d\u0430\u0448 Vec \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>fib<\/code> \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>fib[1]<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a \u0446\u0438\u043a\u043b\u0443, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043a \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0441 <code>fib[i] = fib[i-1] + fib[i-2];<\/code>.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u043c\u0443 \u043f\u043e\u043c\u043e\u0447\u044c?<\/p>\n<h2>\u041f\u043e\u043c\u043e\u0449\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443<\/h2>\n<p>\u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u0434 \u0434\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0438\u043a\u043e\u0433\u0434\u0430:<\/p>\n<ol>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0434\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>length<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e <code>fib.len()<\/code>, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0441\u0442\u0430\u043b\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Vec \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0441 \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u043c\u0443. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">\/\/ \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e: \/\/ cargo asm --rust --bin fibvec_clever_indexing fibonacci_vec #[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn fibonacci_vec(length: usize) -> Vec&lt;u64> { \u00a0\u00a0\u00a0\u00a0let mut fib = vec![0; length]; \u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Vec, \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043b\u0430\u0439\u0441\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let fib = fib.as_mut_slice(); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if length > 1 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[1] = 1; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if length > 2 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e fib \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u0438 \u043c\u044b \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u044b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for i in 2..fib.len() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446! \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0fib }<\/code><\/pre>\n<p><code>main()<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/fibvec_clever_indexing.rs\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a><\/p>\n<p>\u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0432\u0435\u0440\u0438\u043c\u0441\u044f \u0441 <code>cargo asm<\/code> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"rust\">.LBB10_16:     \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_clever_indexing.rs : 16     fib[i] = fib[i-1] + fib[i-2]; \/\/ \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446!   add rdx, qword ptr [rax + 8*rdi - 16]   mov qword ptr [rax + 8*rdi], rdx    mov rcx, qword ptr [rax + 8*rdi - 8]   add rcx, rdx   mov qword ptr [rax + 8*rdi + 8], rcx    add rdx, rcx   mov qword ptr [rax + 8*rdi + 16], rdx    ... \/\/ \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u043f\u0443\u0441\u0442\u0438\u043b  .LBB10_13:     \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_clever_indexing.rs : 16     fib[i] = fib[i-1] + fib[i-2]; \/\/ no more bounds checks!   add rdx, qword ptr [rax + 8*rsi - 16]   mov qword ptr [rax + 8*rsi], rdx<\/code><\/pre>\n<p>\u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438, \u043d\u043e<strong> \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u043e\u043f\u0430\u043b\u0430.<\/strong><\/p>\n<p><strong>\u041d\u043e \u043e\u0442\u0440\u0430\u0437\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b?<\/strong> \u0414\u0430\u0432\u0430\u0439 \u0432\u044b\u044f\u0441\u043d\u0438\u043c!<\/p>\n<pre><code>$ hyperfine 'target\/release\/fibvec_naive_indexing 1000000000' 'target\/release\/fibvec_clever_indexing 1000000000'  Benchmark 1: target\/release\/fibvec_naive_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.612 s \u00b1  0.040 s    [User: 1.435 s, System: 2.132 s]   Range (min \u2026 max):    3.546 s \u2026  3.693 s    10 runs   Benchmark 2: target\/release\/fibvec_clever_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.133 s \u00b1  0.019 s    [User: 0.995 s, System: 2.103 s]   Range (min \u2026 max):    3.106 s \u2026  3.163 s    10 runs   Summary   'target\/release\/fibvec_clever_indexing 1000000000' ran     1.15 \u00b1 0.01 times faster than 'target\/release\/fibvec_naive_indexing 1000000000'<\/code><\/pre>\n<p><em>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043f\u043e\u0434 Windows, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c .exe \u043a \u044d\u0442\u0438\u043c \u043f\u0443\u0442\u044f\u043c.<\/em><\/p>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u0446\u0435\u043b\u044b\u0445 15%! \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0432\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0448\u0430\u043c\u043f\u0430\u043d\u0441\u043a\u043e\u0435, \u043d\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u0432\u0438\u0434\u0435\u043b, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0443\u0447\u0448\u0435\u0435, \u043d\u0430 \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0418 \u0445\u043e\u0442\u044f \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u044b\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u043c, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u0438 \u043f\u0440\u0438\u0435\u043c\u044b, \u0447\u0442\u043e\u0431\u044b <a href=\"https:\/\/github.com\/fschutt\/fastblur\/pull\/3\"><u>\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043a\u0440\u0435\u0439\u0442 fastblur \u043d\u0430 15%<\/u><\/a>. (\u0425\u043e\u0442\u044f \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 6 \u0440\u0430\u0437 <a href=\"https:\/\/github.com\/fschutt\/fastblur\/pull\/2\"><u>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432<\/u><\/a>).<\/p>\n<blockquote>\n<p>\u0410\u043f\u0434\u0435\u0439\u0442: \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 fastblur \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0433 \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0441\u043b\u0430\u0439\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u043e &amp;mut Vec, \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/rust-lang\/rust-clippy\/issues\/10269\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 15%.<\/p>\n<\/blockquote>\n<h3>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u044d\u0442\u043e \u043d\u0430 64-\u0431\u0438\u0442\u043d\u043e\u043c ARM \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435, \u0447\u0438\u0441\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"rust\">$ hyperfine 'target\/release\/fibvec_naive_indexing 1000000000' 'target\/release\/fibvec_clever_indexing 1000000000'  Benchmark 1: target\/release\/fibvec_naive_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.320 s \u00b1  0.024 s    [User: 1.131 s, System: 2.179 s]   Range (min \u2026 max):    3.263 s \u2026  3.346 s    10 runs   Benchmark 2: target\/release\/fibvec_clever_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.226 s \u00b1  0.019 s    [User: 1.092 s, System: 2.127 s]   Range (min \u2026 max):    3.209 s \u2026  3.263 s    10 runs   Summary   'target\/release\/fibvec_clever_indexing 1000000000' ran     1.03 \u00b1 0.01 times faster than 'target\/release\/fibvec_naive_indexing 1000000000'<\/code><\/pre>\n<p>\u0418 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u0432 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d 3%. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u0432 15%.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 ARM \u043f\u043e\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e:<\/p>\n<pre><code class=\"rust\">.LBB10_7:   \/\/ \/home\/shnatsel\/bounds-check-cookbook\/src\/bin\/fibvec_clever_indexing.rs : 16   fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446! ldur x11, [x9, #-16]  ... \/\/ \u043c\u043d\u043e\u0439 \u0431\u044b\u043b \u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u0434\u043d\u0430 \u043d\u0435\u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430    \/\/ \/home\/shnatsel\/bounds-check-cookbook\/src\/bin\/fibvec_clever_indexing.rs : 16   fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446! add x10, x11, x10 str x10, [x9], #8<\/code><\/pre>\n<p>\u041c\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446! \u0418 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 3 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435?<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u0441\u0430\u043c\u043e \u043f\u043e\u00a0\u0441\u0435\u0431\u0435 \u043d\u0435\u00a0\u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0445\u043e\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043d\u0430\u0437\u0430\u0434 \u0438 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u043c\u0441\u044f \u043a\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 x86\u00a0fibonacci_vec \u0431\u0435\u0437\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435\u00a0\u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430, \u0447\u0442\u043e\u00a0\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Loop_unrolling\"><u>\u0440\u0430\u0437\u043c\u043e\u0442\u043a\u0443 \u0446\u0438\u043a\u043b\u0430<\/u><\/a>.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u00a0x86, \u0430\u00a0\u043d\u0430\u00a0ARM \u043d\u0435\u0442? \u041d\u0435\u00a0\u0438\u043c\u0435\u044e \u043d\u0438 \u043c\u0430\u043b\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u044f. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u0442\u0430\u043c, \u0438 \u0442\u0430\u043c\u00a0\u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/POWER9\"><u>POWER9<\/u><\/a> \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435, \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u043f\u043e\u0445\u043e\u0436\u0435, <a href=\"https:\/\/gist.github.com\/Shnatsel\/862cbed11b3d88fcea31db1633433b05\"><u>\u0440\u0430\u0437\u043c\u043e\u0442\u0430\u043b \u0446\u0438\u043a\u043b \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435<\/u><\/a> \u0438 hyperfine \u0440\u0430\u043f\u043e\u0440\u0442\u0443\u0435\u0442 \u043e\u00a0\u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 1.78\u00a0\u00b1 0.04\u00a0\u0440\u0430\u0437\u0430, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u044f \u043f\u0440\u043e\u0441\u0442\u043e <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/105857\"><u>\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442 \u0432\u00a0rustc<\/u><\/a>, \u0438 \u043f\u0443\u0441\u0442\u044c \u0441\u00a0\u044d\u0442\u0438\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043b\u044e\u0434\u0438, \u0437\u043d\u0430\u044e\u0449\u0438\u0435, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b.<\/p>\n<p>\u0412\u0430\u0436\u043d\u044b\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0430\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0440\u0435\u0448\u0430\u044e\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/NP-hardness\"><u>NP\u2011\u0442\u0440\u0443\u0434\u043d\u0443\u044e<\/u><\/a> \u0437\u0430\u0434\u0430\u0447\u0443 \u0437\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043d\u0435\u00a0\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>\u0425\u0443\u0436\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043d\u044f\u0442\u0441\u044f \u043e\u0442\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u00a0\u0432\u0435\u0440\u0441\u0438\u0438. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u00a0\u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u0441\u044f, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0443\u0445\u0443\u0434\u0448\u0438\u0442\u044c \u0432\u0430\u0448 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043e\u0434! <a href=\"https:\/\/en.wikipedia.org\/wiki\/Automatic_vectorization\"><u>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/u><\/a>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0442 \u043e\u0431\u0449\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043d\u0435\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430, \u0447\u0442\u043e\u00a0\u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u042f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446, \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u00a0\u2014 \u043a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043e\u043d\u0438, \u043a\u0430\u043a\u00a0\u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0430\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u043d\u0435\u00a0\u0441\u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u041d\u043e\u00a0\u044d\u0442\u043e\u00a0\u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u00a0\u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043d\u0430 3%!<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0437\u043c\u043e\u0442\u043a\u0430 \u0446\u0438\u043a\u043b\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430\u00a0\u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 15%, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u00a0x86, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043d\u0430\u00a0ARM, \u044f\u00a0\u0431\u044b \u043d\u0435\u00a0\u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u0430\u0432\u043a\u0443 \u043d\u0430\u00a0\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u00a0\u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0422\u0430\u043a\u043e\u0432\u0430 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f NP\u2011\u0442\u0440\u0443\u0434\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0437\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>\u041a\u00a0\u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u00a0\u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, \u044d\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u00a0\u2014 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438 \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<h3>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435: \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0430\u0441 \u043c\u043e\u0433 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e hyperfine \u0438 \u043c\u043e\u0440\u043e\u0447\u0443 \u0441\u0435\u0431\u044f \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u0445\u043b\u043e\u043f\u043e\u0442\u0430\u043c\u0438 \u0441\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e <code>main()<\/code>?<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443\u00a0\u0431\u044b \u043c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c cargo bench \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/bheisler\/criterion.rs\"><u>criterion<\/u><\/a> \u0438\u043b\u0438\u00a0\u0447\u0442\u043e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0435, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f\u00a0\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433\u0430?<\/p>\n<p>\u042d\u0442\u043e \u043e\u043f\u044f\u0442\u044c\u00a0\u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u00a0\u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435, \u0447\u0442\u043e\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442, \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a\u00a0\u043a\u0430\u043a\u0438\u043c\u2011\u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c \u0432\u00a0\u0432\u044b\u0432\u043e\u0434\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442 \u0435\u0435!<\/p>\n<p>\u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438 \u0442\u043e, \u0447\u0442\u043e\u00a0\u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0441\u00a0\u044d\u0442\u0438\u043c, \u043e\u0431\u0435\u0440\u043d\u0443\u0432 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <a href=\"https:\/\/doc.rust-lang.org\/stable\/std\/hint\/fn.black_box.html\"><u>std::hint::black_box()<\/u><\/a>, \u043d\u043e <a href=\"https:\/\/gendignoux.com\/blog\/2022\/01\/31\/rust-benchmarks.html\"><u>\u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e<\/u><\/a>.<\/p>\n<p>\u042f \u043e\u0431\u0445\u043e\u0436\u0443 \u0432\u0441\u0435 \u044d\u0442\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u044d\u0442\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0447\u0442\u043e\u2011\u043b\u0438\u0431\u043e. \u041e\u043d\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435\u00a0\u043c\u043e\u0436\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>fibonacci_vec<\/code> \u043a\u0430\u043a\u00a0\u043d\u0435\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u0430\u043a\u00a0\u0432\u044b \u0441\u0430\u043c\u0438 \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u0442\u0435!<\/p>\n<p>\u0421\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044f \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Vec \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u043c\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0430\u00a0\u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043d\u0435\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 Vec \u0438\u0437\u2011\u0437\u0430 <a href=\"http:\/\/igoro.com\/archive\/gallery-of-processor-cache-effects\/\"><u>\u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u043a\u044d\u0448\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u><\/a>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a\u00a0\u043d\u0430\u0448\u0438\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043c \u0441\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0446.<\/p>\n<h2>\u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/h2>\n<p>\u041e\u043f\u044b\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Rust, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0443\u0436\u0435 \u0441\u043e\u0440\u0432\u0430\u043b\u0438 \u0433\u043e\u0440\u043b\u043e, \u043a\u0440\u0438\u0447\u0430\u043b\u0438 \u043c\u043d\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043a\u0430 \u0447\u0438\u0442\u0430\u043b\u0438 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u2014 \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430!<\/p>\n<p>Rust \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 <a href=\"https:\/\/doc.rust-lang.org\/stable\/book\/ch13-02-iterators.html\"><u>\u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c\u0438, \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u044f\u0441\u044c \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445 \u0433\u0440\u0430\u043d\u0438\u0446, \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c.<\/p>\n<p>\u041e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0438\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 IDE, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0447\u0442\u043e, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c!<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0441\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0438\u0435 \u043e\u043a\u043d\u0430 \u043d\u0430\u0434 \u043d\u0430\u0448\u0438\u043c Vec, \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/doc.rust-lang.org\/stable\/std\/primitive.slice.html#method.windows\"><u>windows<\/u><\/a>, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c:<\/p>\n<pre><code class=\"rust\">\/\/ \u042d\u0442\u043e \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f :( fn fibonacci_vec(length: usize) -> Vec&lt;u64> {     let mut fib = vec![0; length];     if length > 1 {         fib[1] = 1;     }     if length > 2 {         \/\/ \u044d\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440; \u043e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446         for window in &amp;mut fib.windows(3) {             \/\/ \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430,              \/\/ \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438             window[2] = window[1] + window[0]         }     }      fib }<\/code><\/pre>\n<p>\u041d\u0443 \u0434\u0435\u043b\u0430, \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f! \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <a href=\"https:\/\/doc.rust-lang.org\/stable\/std\/primitive.slice.html#method.windows\"><u>windows()<\/u><\/a> \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u0441\u043b\u0430\u0439\u0441\u044b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 <code>_mut()<\/code> \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0441\u043b\u0430\u0439\u0441\u044b, \u043d\u043e <code>windows_mut()<\/code>, \u0443\u0432\u044b, \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443?<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, <code>windows_mut()<\/code> \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 Rust, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u044b <code>.collect()<\/code> \u0435\u0433\u043e, \u0441\u043a\u0430\u0436\u0435\u043c, \u0432 Vec, \u0432\u044b \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0441\u043b\u0430\u0439\u0441\u043e\u0432 \u2014 \u043d\u043e Rust \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u044b\u043b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0437\u0430 \u0440\u0430\u0437!<\/p>\n<p>\u0422\u043e, \u0447\u0442\u043e \u043c\u044b \u0438\u0449\u0435\u043c, \u044d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>.collect()<\/code>, \u0438, \u043f\u043e\u0445\u043e\u0436\u0435, \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">\/\/ \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e: \/\/ cargo asm --rust --bin fibvec_iterator fibonacci_vec #[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn fibonacci_vec(length: usize) -> Vec&lt;u64> {     let mut fib = vec![0; length];     if length > 1 {         fib[1] = 1;     }     if length > 2 {         let mut grandparent = 0;         let mut parent = 1;         \/\/ \u044d\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440; \u043e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446         for val in &amp;mut fib[2..] {             let current = grandparent + parent;             *val = current;             grandparent = parent;             parent = current;         }     }      fib }<\/code><\/pre>\n<p><code>main()<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/fibvec_iterator.rs\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a><\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c cargo asm \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446. \u041d\u0430 Rust 1.65 \u043d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430\u0448\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 2%. \u041d\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 1.66 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435:<\/p>\n<pre><code class=\"rust\">$ hyperfine 'target\/release\/fibvec_naive_indexing 1000000000' 'target\/release\/fibvec_clever_indexing 1000000000' 'target\/release\/fibvec_iterator 1000000000' Benchmark 1: target\/release\/fibvec_naive_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.530 s \u00b1  0.056 s    [User: 1.452 s, System: 2.027 s]   Range (min \u2026 max):    3.450 s \u2026  3.616 s    10 runs   Benchmark 2: target\/release\/fibvec_clever_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.111 s \u00b1  0.058 s    [User: 1.037 s, System: 2.038 s]   Range (min \u2026 max):    3.039 s \u2026  3.207 s    10 runs   Benchmark 3: target\/release\/fibvec_iterator 1000000000   Time (mean \u00b1 \u03c3):      2.763 s \u00b1  0.057 s    [User: 0.666 s, System: 2.078 s]   Range (min \u2026 max):    2.686 s \u2026  2.847 s    10 runs   Summary   'target\/release\/fibvec_iterator 1000000000' ran     1.13 \u00b1 0.03 times faster than 'target\/release\/fibvec_clever_indexing 1000000000'     1.28 \u00b1 0.03 times faster than 'target\/release\/fibvec_naive_indexing 1000000000'<\/code><\/pre>\n<p>\u0418 \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 ARM:<\/p>\n<pre><code class=\"rust\">$ hyperfine 'target\/release\/fibvec_naive_indexing 1000000000' 'target\/release\/fibvec_clever_indexing 1000000000' 'target\/release\/fibvec_iterator 1000000000' Benchmark 1: target\/release\/fibvec_naive_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.324 s \u00b1  0.024 s    [User: 1.160 s, System: 2.154 s]   Range (min \u2026 max):    3.285 s \u2026  3.354 s    10 runs   Benchmark 2: target\/release\/fibvec_clever_indexing 1000000000   Time (mean \u00b1 \u03c3):      3.257 s \u00b1  0.022 s    [User: 1.112 s, System: 2.136 s]   Range (min \u2026 max):    3.232 s \u2026  3.297 s    10 runs   Benchmark 3: target\/release\/fibvec_iterator 1000000000   Time (mean \u00b1 \u03c3):      2.968 s \u00b1  0.025 s    [User: 0.782 s, System: 2.175 s]   Range (min \u2026 max):    2.929 s \u2026  3.011 s    10 runs   Summary   'target\/release\/fibvec_iterator 1000000000' ran     1.10 \u00b1 0.01 times faster than 'target\/release\/fibvec_clever_indexing 1000000000'     1.12 \u00b1 0.01 times faster than 'target\/release\/fibvec_naive_indexing 1000000000'<\/code><\/pre>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/fibvec_clever_indexing_alt.rs\"><u>\u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443<\/u><\/a> \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0430\u044f.<\/p>\n<p>\u041d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435. \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043a\u043e\u0434 \u0441 \u043d\u0443\u043b\u044f, \u0438 \u0432\u0430\u043c \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e. \u0410 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432.<\/p>\n<blockquote>\n<p>\u0410\u043f\u0434\u0435\u0439\u0442: \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0431\u044b\u043b\u0438 <a href=\"https:\/\/github.com\/rust-lang\/rust\/pull\/106889\/files\"><u>\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b<\/u><\/a> \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 <code>windows_mut()<\/code>. \u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/old.reddit.com\/r\/rust\/comments\/10edmjf\/how_to_avoid_bounds_checks_in_rust_without_unsafe\/j4u91of\/?context=3\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>.<\/p>\n<\/blockquote>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0434\u0435\u0441\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0446\u0438\u043a\u043b for \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c, \u0430 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u201c\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435\u201d \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <code>.foreach<\/code> \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0435, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 <a href=\"https:\/\/github.com\/rust-lang\/rust\/issues\/101814#issuecomment-1247184222\"><u>\u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0443\u0447\u0448\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u0434\u0430<\/u><\/a>. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>.skip().filter().take()<\/code> \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0434\u043b\u0438\u043d\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u0441\u0435\u0431\u044f \u043f\u0438\u0448\u0443\u0449\u0438\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0441 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443, \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043e\u043f\u0438\u0441\u0430\u043b \u0440\u0430\u043d\u0435\u0435. \u0418\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u0430\u043a \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c Vec, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c Vec \u0447\u0438\u0441\u043b\u0430 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0438\u0445. \u0415\u0441\u043b\u0438 \u043d\u0430\u0448 Vec \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/CPU_cache\"><u>\u043a\u044d\u0448 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/u><\/a>, \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043d\u043e\u0432\u0430 \u0438 \u0441\u043d\u043e\u0432\u0430!<\/p>\n<p>\u041d\u0430\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"rust\">\/\/ \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e: \/\/ cargo asm --rust --bin comparison_naive is_fibonacci #[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn is_fibonacci(input: &amp;[u64], fibonacci: &amp;[u64]) -> bool {     for i in 0..input.len() {         if input[i] != fibonacci[i] { \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446!             return false;         }     }     true }  fn fibonacci_vec(length: usize) -> Vec&lt;u64> {     \/\/ \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 - \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c }  pub fn main() {     \/\/ \u0414\u0432\u0430\u0436\u0434\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 Vec\u00a0     \/\/ \u0414\u0435\u0442\u0430\u043b\u0438 \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u044b, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e }<\/code><\/pre>\n<p><em>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <\/em><a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/comparison_naive.rs\"><em><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/em><\/a><\/p>\n<p>\u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\"> \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/comparison_naive.rs : 6     if input[i] != fibonacci[i] { \/\/ \u0434\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446!   cmp rcx, r9   je .LBB9_5      \/\/ \/rustc\/897e37553bba8b42751c67658967889d11ecd120\/library\/core\/src\/num\/uint_macros.rs : 466     unsafe { intrinsics::unchecked_add(self, rhs) }   lea r8, [r9 + 1]      \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/comparison_naive.rs : 6     if input[i] != fibonacci[i] { \/\/ \u0434\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446!   mov rax, qword ptr [rdi + 8*r9]   cmp rax, qword ptr [rdx + 8*r9]   je .LBB9_1  ... \/\/ \u0442\u0443\u0442 \u0431\u044b\u043b\u0438 \u043d\u0435\u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u0434\u0430\u00a0  .LBB9_5:   .cfi_def_cfa_offset 16     \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/comparison_naive.rs : 6     if input[i] != fibonacci[i] { \/\/ \u0434\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446!   lea rdx, [rip + .L__unnamed_3]    mov rdi, rcx    mov rsi, rcx    call qword ptr [rip + core::panicking::panic_bounds_check@GOTPCREL]    ud2<\/code><\/pre>\n<p>\u041e \u043d\u0435\u0442 \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c! \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>is_fibonacci()<\/code> \u0438\u043c\u0435\u0435\u0442 \u0438\u0445 \u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b <em>\u0434\u043e\u043b\u0436\u043d\u044b<\/em><strong> <\/strong>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b<strong>,<\/strong> \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u044b \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043b\u0430\u0439\u0441\u043e\u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b! \u041d\u043e \u0447\u0442\u043e \u043c\u044b <em>\u043c\u043e\u0436\u0435\u043c<\/em> \u0441\u0434\u0435\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432\u043d\u0435 \u0446\u0438\u043a\u043b\u0430, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u0432\u043e\u0439\u0434\u0435\u043c \u0432 \u0446\u0438\u043a\u043b, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e <code>.len()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435:<\/p>\n<pre><code class=\"rust\">\/\/ \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e: \/\/ cargo asm --rust --bin comparison_clever is_fibonacci #[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn is_fibonacci(input: &amp;[u64], fibonacci: &amp;[u64]) -> bool {     \/\/ \u041e\u0431\u0440\u0435\u0437\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0441 \u0434\u043e \u0434\u043b\u0438\u043d\u044b \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u043d\u0430\u043b,      \/\/ \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u0432\u043e\u0439\u0434\u0435\u043c \u0432 \u0446\u0438\u043a\u043b     let fibonacci = &amp;fibonacci[..input.len()];      for i in 0..input.len() {         if input[i] != fibonacci[i] { \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0446\u0438\u043a\u043b\u0435 \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446!             return false;         }     }     true }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/comparison_clever.rs\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a><\/p>\n<p>\u0418 \u0432\u0443\u0430\u043b\u044f, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430:<\/p>\n<pre><code class=\"rust\">  \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/comparison_clever.rs : 11     if input[i] != fibonacci[i] { \/\/ No bounds checks in the loop now!   mov rcx, qword ptr [rdi + 8*rax]   cmp rcx, qword ptr [rdx + 8*rax]   je .LBB9_2<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0435, \u044d\u0442\u043e \u0432\u0435\u0441\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<p>\u042d\u0442\u043e <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/comparison_iterator.rs\"><u>\u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/u><\/a>, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442\u0435 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/comparison_realistic.rs\"><u>\u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 == \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0441\u043e\u0432<\/u><\/a>. \u041a\u043e\u0434 \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e <em>\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f<\/em> \u043d\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u2014 \u0437\u0434\u0435\u0441\u044c \u0431\u044b\u043b\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u042f <a href=\"https:\/\/github.com\/image-rs\/jpeg-decoder\/pull\/167\"><u>\u0443\u0441\u043a\u043e\u0440\u0438\u043b \u043a\u0440\u0435\u0439\u0442 jpeg-\u0434\u0435\u043a\u043e\u0434\u0435\u0440\u0430<\/u><\/a><u>,<\/u> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u0422\u0430\u043c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b assert!\u2019\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u0430\u0439\u0441\u043e\u0432, \u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0442\u043e\u0442 \u0436\u0435.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0442\u043e, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e assert!\u2019\u043e\u0432 \u2014 \u043b\u0438\u0448\u043d\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043a\u0430\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446!<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442.<\/p>\n<hr\/>\n<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 <a href=\"https:\/\/otus.pw\/UcOC\/\">&#171;Rust Developer. Basic&#187;. <\/a><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0443\u0440\u043e\u043a <strong>\u00ab\u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Rust\u00bb<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0435\u0447\u0435\u0440\u043e\u043c. \u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043d\u044f\u0442\u0438\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0432 \u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 Rust \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439: Backend, Frontend \u0438 WebAssembly, Blockchain, Gamedev.<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/otus.pw\/ThOX\/\">\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0443\u0440\u043e\u043a<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/718012\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/718012\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u00a0\u0441\u0435\u0442\u0438 \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0Rust \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0441\u043e \u0441\u043b\u0430\u0439\u0441\u043e\u043c (\u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>my_slice[i]<\/code>) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u00a0\u0446\u0435\u043b\u044f\u0445 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043a\u0430\u043a\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u0414\u0435\u0442\u0430\u043b\u0438 \u044d\u0442\u043e\u0433\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0443\u043c\u0430\u043d\u043d\u044b. \u041c\u0430\u043b\u043e \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u0438\u0435\u2011\u043b\u0438\u0431\u043e \u0432\u043d\u044f\u0442\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0438 \u043d\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u00a0\u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u044d\u0442\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432, \u043d\u0435\u00a0\u043f\u0440\u0438\u0431\u0435\u0433\u0430\u044f \u043a <code>unsafe<\/code> \u043a\u043e\u0434\u0443.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u00a0\u0432\u0430\u043c\u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0437\u0430\u00a0\u0433\u0440\u0430\u043d\u0438\u0446\u044b (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u00bb), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f <code>unsafe<\/code> \u043a\u043e\u0434\u0430, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0437\u00a0\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432.<\/p>\n<p><strong>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443:<\/strong><\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u043a\u043e\u0432\u044b \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0440\u0438\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0431\u0435\u0437\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>unsafe<\/code> \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u00a0\u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u0437\u0430\u043c\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c Rust\u2011\u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u00a0\u043d\u0430\u043c \u0441\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u0434\u0435\u0448\u0435\u0432\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0432\u0441\u0435\u2011\u0442\u0430\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446?<\/h2>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">let array = [0, 1, 2, 3]; let a = array[1]; \/\/ \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e let b = array[7]; \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430!<\/code><\/pre>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f \u043a 7-\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 4\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 7-\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u00a0\u043d\u0435\u043c \u043d\u0435\u0442.<\/p>\n<p>\u0412\u00a0C \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e\u00a0\u0431\u044b \u043a\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u0443 \u043a\u00a0\u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430, \u0447\u0442\u043e\u00a0\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0444\u0435\u0440\u0430<\/strong>.<\/p>\n<p>\u041f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Heartbleed\"><u>Heartbleed<\/u><\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0444\u0435\u0440\u0430, \u043d\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043d\u0435\u00a0\u0438\u043c\u0435\u044e\u0442 \u0442\u0430\u043a\u0438\u0445 \u043a\u0440\u0438\u0447\u0430\u0449\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <a href=\"https:\/\/www.cvedetails.com\/vulnerability-list\/cweid-787\/vulnerabilities.html\"><u>\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e<\/u><\/a>. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043b\u044f\u00a0\u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430\u00a0\u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435, \u0447\u0442\u043e\u00a0\u043e\u043d \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u00a0\u2014 \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0440\u0435\u0434\u0438\u0442\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043c\u0430\u0439\u043d\u0438\u0442\u044c \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0443, \u0448\u043f\u0438\u043e\u043d\u0438\u0442\u044c \u0437\u0430\u00a0\u0432\u0430\u043c\u0438 \u0438\u00a0\u0442.\u00a0\u0434. \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430\u00a0\u2014 <a href=\"https:\/\/cwe.mitre.org\/top25\/archive\/2022\/2022_cwe_top25.html\"><u>\u0441\u0430\u043c\u0430\u044f \u043e\u043f\u0430\u0441\u043d\u0430\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438<\/u><\/a>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u0443 Rust \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 <strong>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446<\/strong> <strong>(bounds checks)<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442, \u0447\u0442\u043e\u00a0\u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442\u00a0\u2014 \u0447\u0442\u043e\u2011\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"rust\">\/\/ \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 [i] pub fn index(slice: &amp;[T], idx: usize) { \u00a0\u00a0\u00a0\u00a0if idx &lt; slice.len() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ TODO: \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u00a0\u00a0\u00a0\u00a0} else { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ TODO: \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u0430\u043d\u0438\u043a\u0443 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u00a0\u00a0\u00a0\u00a0} }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u00a0\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443,\u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u00a0Rust, <a href=\"https:\/\/doc.rust-lang.org\/stable\/book\/ch09-01-unrecoverable-errors-with-panic.html\"><u>\u0437\u0430\u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442<\/u><\/a>.<\/p>\n<p>\u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043c\u0435\u0440\u0430 \u0441\u00a0\u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0426\u041f, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<h2>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f?<\/h2>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u00a0\u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0435.<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043e\u0442\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043a\u043e\u0433\u0434\u0430\u2011\u043b\u0438\u0431\u043e \u0432\u0438\u0434\u0435\u043b \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435,\u00a0\u0431\u044b\u043b\u043e<strong> 15%<\/strong>, \u043d\u043e\u00a0\u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 <strong>\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1% \u0434\u043e 3%<\/strong>,<strong> <\/strong>\u0438 \u0434\u0430\u0436\u0435 \u044d\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0\u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 (\u043a\u0430\u043a \u043c\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u043c!), \u0435\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u043e\u043e\u0431\u0449\u0435 <a href=\"https:\/\/blog.readyset.io\/bounds-checks\/\"><u>\u043d\u0435\u00a0\u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u043a\u0430\u043a\u043e\u0433\u043e\u2011\u043b\u0438\u0431\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446<\/u><\/a>.<\/p>\n<h2>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438!<\/h2>\n<p>\u041f\u043e\u043a\u0430 \u044f \u0431\u0443\u0434\u0443 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b, \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0441\u0430\u043c\u0438 \u043c\u043e\u0433\u043b\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043e\u0447\u0438\u044e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 <a href=\"https:\/\/rustup.rs\/\"><u>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Rust<\/u><\/a>, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"rust\">cargo install cargo-show-asm hyperfine git clone https:\/\/github.com\/Shnatsel\/bounds-check-cookbook cd bounds-check-cookbook cargo build --release<\/code><\/pre>\n<h2>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435\u00a0<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Fibonacci_number\"><u>\u0427\u0438\u0441\u043b\u0430 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438<\/u><\/a> \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 <a href=\"https:\/\/doc.rust-lang.org\/stable\/std\/vec\/struct.Vec.html\"><u>Vec<\/u><\/a>:<\/p>\n<pre><code class=\"rust\">#[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn fibonacci_vec(length: usize) -> Vec&lt;u64> { \u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u0432\u0441\u044e \u0434\u043b\u0438\u043d\u0443 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439. \u00a0\u00a0\u00a0\u00a0\/\/ \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, vec![0; length] \u0443\u0436\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u041e\u0421 \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Vec \u043d\u0443\u043b\u044f\u043c\u0438 \u2014 \u0443 \u041e\u0421 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u043d\u0443\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u00a0\u00a0\u00a0\u00a0let mut fib = vec![0; length];  \u00a0\u00a0\u00a0\u00a0\/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c Vec \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u00a0\u00a0\u00a0\u00a0if length > 1 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[1] = 1; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443! \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446! \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0if length > 2 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for i in 2..length { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2];\u00a0 \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435! \u041e, \u043d\u0435\u0442! \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0fib \/\/ \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c return, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 } pub fn main() { \u00a0\u00a0\u00a0\u00a0\/\/ \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u044f\u0434 \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u00a0\u00a0\u00a0\u00a0let arg = std::env::args().nth(1).expect(\"Please specify length\"); \u00a0\u00a0\u00a0\u00a0let length: usize = arg.parse().expect(\"That's not a number!\"); \u00a0\u00a0\u00a0\u00a0\/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0443\u044e \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u00a0\u00a0\u00a0\u00a0let fibonacci = fibonacci_vec(length); \u00a0\u00a0\u00a0\u00a0\/\/ \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b \u0435\u0433\u043e \u043a\u0430\u043a \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u00a0\u00a0\u00a0\u00a0println!(\"{:?}\", fibonacci.last()); }<\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448 \u0432\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0432\u00a0\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u041c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u00a0main \u043f\u0430\u0440\u0443 \u0442\u0440\u044e\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043d\u0435\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u00a0\u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446:<\/p>\n<pre><code class=\"rust\">cargo asm --rust --bin fibvec_naive_indexing fibonacci_vec<\/code><\/pre>\n<p>\u042d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>fibonacci_vec<\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0426\u041f \u0431\u0443\u0434\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c) \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0Rust\u2011\u043a\u043e\u0434\u043e\u043c, \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0435\u00a0\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0432\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435! \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043d\u0430\u0439\u0442\u0438 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430\u00a0\u0446\u0438\u043a\u043b \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043d\u0430\u00a0\u0447\u0430\u0441\u0442\u044c <code>fib[i] = fib[i-1] + fib[i-2];<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0434\u044f \u0435\u0435 \u0432\u00a0\u0432\u044b\u0432\u043e\u0434\u0435 <code>cargo asm<\/code>:<\/p>\n<pre><code class=\"rust\">\u00a0\u00a0\u00a0\u00a0\/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 15 \u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435! \u041e, \u043d\u0435\u0442! add rsi, qword ptr [rbp + 8rax - 24] mov qword ptr [rbp + 8rdi], rsi<\/code><\/pre>\n<p>\u0418 \u044d\u0442\u043e \u0432\u0441\u0435? \u0412\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438!<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043b\u0438\u0441\u0442\u0430\u0442\u044c \u0432\u043d\u0438\u0437, \u0442\u043e \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0435\u0449\u0435 \u043a\u043e\u0434, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0439\u0441\u044f \u043a\u00a0\u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0\u2014 \u043d\u0435\u00a0\u0432\u0441\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435:<\/p>\n<pre><code class=\"rust\">.LBB10_11:         \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 15         fib[i] = fib[i-1] + fib[i-2]; \/\/ indexing in a loop! Oh no!     dec rdi      lea rdx, [rip + .L__unnamed_7]     jmp .LBB10_14  .LBB10_13:     mov rdi, r14  .LBB10_14:     mov rsi, r14     call qword ptr [rip + core::panicking::panic_bounds_check@GOTPCREL]      ud2<\/code><\/pre>\n<p>\u041c\u044b \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0442\u043e, \u043a\u0430\u043a\u00a0\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <strong>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b<\/strong> \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435\u00a0\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0433\u0440\u0430\u043d\u0438\u0446. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a\u00a0\u043f\u0430\u043d\u0438\u043a\u0435, \u0430\u00a0\u043f\u0430\u043d\u0438\u043a\u0430 \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u0430\u043b \u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u044b <strong>\u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c<\/strong> \u043a\u043e\u0434, \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0430, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u00a0\u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0423\u043c\u043d\u043e!<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443! \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e <code>core::panicking::panic_bounds_check<\/code>\u00a0\u2014 \u044d\u0442\u043e \u043f\u0430\u043d\u0438\u043a\u0430 \u0438\u0437\u2011\u0437\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0432\u00a0\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u0441\u00a0\u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043a\u043e\u0434\u0430. <strong>\u0422\u0430\u043a \u0432\u043e\u0442 \u043a\u0430\u043a\u00a0\u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442!<\/strong><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u00a0\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446 \u0434\u043b\u044f\u00a0\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 <code>if length > 1 { fib[1] = 1; }<\/code> \u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430\u2026<\/p>\n<pre><code>\/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 10 if length > 1 { cmp r14, 2 jb .LBB10_17  \/\/ \/home\/shnatsel\/Code\/bounds-check-cookbook\/src\/bin\/fibvec_naive_indexing.rs : 11 fib[1] = 1; mov qword ptr [rbp + 8], 1<\/code><\/pre>\n<p>\u0410 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0442! \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 <code>length<\/code> \u0441\u0442\u0440\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u043d\u0435\u0443\u0434\u0430\u0447\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430. \u041d\u0430\u0448 Vec \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>fib<\/code> \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>fib[1]<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a \u0446\u0438\u043a\u043b\u0443, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043a \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0441 <code>fib[i] = fib[i-1] + fib[i-2];<\/code>.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u043c\u0443 \u043f\u043e\u043c\u043e\u0447\u044c?<\/p>\n<h2>\u041f\u043e\u043c\u043e\u0449\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443<\/h2>\n<p>\u041c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u0434 \u0434\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u0438\u043a\u043e\u0433\u0434\u0430:<\/p>\n<ol>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0434\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>length<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043e <code>fib.len()<\/code>, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0441\u0442\u0430\u043b\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Vec \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0441\u043b\u0430\u0439\u0441 \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u043c\u0443. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"rust\">\/\/ \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e: \/\/ cargo asm --rust --bin fibvec_clever_indexing fibonacci_vec #[inline(never)] \/\/ \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c fn fibonacci_vec(length: usize) -> Vec&lt;u64> { \u00a0\u00a0\u00a0\u00a0let mut fib = vec![0; length]; \u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Vec, \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043b\u0430\u0439\u0441\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0let fib = fib.as_mut_slice(); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if length > 1 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[1] = 1; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if length > 2 { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e fib \u0438\u043c\u0435\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u0438 \u043c\u044b \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u044b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for i in 2..fib.len() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fib[i] = fib[i-1] + fib[i-2]; \/\/ \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0433\u0440\u0430\u043d\u0438\u0446! \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0fib }<\/code><\/pre>\n<p><code>main()<\/code> \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/Shnatsel\/bounds-check-cookbook\/blob\/main\/src\/bin\/fibvec_clever_indexing.rs\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a><\/p>\n<p>\u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0432\u0435\u0440\u0438\u043c\u0441\u044f \u0441 <code>cargo asm<\/code> \u2014 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"rust\">.LB<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-345719","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345719","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=345719"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345719\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}