{"id":317255,"date":"2021-02-01T03:00:13","date_gmt":"2021-02-01T03:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317255"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317255","title":{"rendered":"\u041f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0432 \u043b\u043e\u0433\u043e\u0432\u043e \u0440\u0436\u0430\u0432\u0447\u0438\u043d\u043d\u044b. \u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 rust"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e68\/360\/244\/e683602442ca3e8f9593e652ffb9c754.png\" width=\"395\" height=\"312\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043c\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e rust \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u044f\u0437\u044b\u043a\u0430, \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u0440\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u041d\u043e \u0432 \u043e\u043f\u0440\u043e\u0441\u0435, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0438\u0448\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 rust. \u041c\u044b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u043c \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u043a \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0443.<\/p>\n<h2>\u0421\u043b\u043e\u0432\u0430\u0440\u044c<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438 \u0431\u0435\u0437 \u0443\u0434\u0435\u0440\u0436\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0437\u043d\u0430\u0447\u0438\u0442 &#8212; \u0445\u043e\u0440\u043e\u0448\u043e. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0438 \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043d\u044b\u0440\u0438\u0432\u0430\u0442\u044c.<\/p>\n<ol>\n<li>\n<p><strong>LLVM <\/strong>&#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0440\u043e\u043d\u0442-\u044d\u043d\u0434 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>AST <\/strong>&#8212; (abstract syntax tree) \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0432 \u043a\u043e\u0434\u0435. <\/p>\n<\/li>\n<li>\n<p><strong>IR <\/strong>(intermediate representation) &#8212; \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0422\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0438 \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u044e\u0442 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>HIR <\/strong>(High Level IR) &#8212; IR \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 rust. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 AST, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>MIR <\/strong>(Mid Level IR) &#8212; \u042d\u0442\u043e \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f HIR, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043b\u0438\u0436\u0435 \u043a LLVMIR. <\/p>\n<\/li>\n<li>\n<p><strong>LLVMIR <\/strong>(Language Independent IR) &#8212; \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443 \u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. <\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0440\u0435\u0439\u0442, crate<\/strong> &#8212; \u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043b\u0438\u0431\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u043a\u0440\u0435\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>ICE <\/strong>(Internal compiler error), \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u043d\u0430 rust.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043b\u0435\u0437\u0442\u044c \u043d\u0430\u0448\u0438\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0432 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0421\u0442\u0430\u0432\u0438\u043c \u0447\u0438\u0441\u0442\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 Windows 10. \u0418\u0434\u0451\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u044b \u0438 \u043b\u044c\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0440\u0446\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0414\u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0441 github. \u041c\u043e\u0436\u043d\u043e \u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e zip, \u0438\u0431\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>VSCode.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041b\u044e\u0431\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435, \u0437\u0430\u043e\u0434\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c nightly \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<br \/><code>rustup toolchain install nightly --allow-downgrade --profile minimal --component clippy<\/code> <code>rustup default nightly<\/code><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/rustc-dev-guide.rust-lang.org\/\" rel=\"noopener noreferrer nofollow\">Guide to Rustc Development<\/a>. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. 460 \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041d\u0435 \u0445\u0438\u043b\u043e. \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c pdf.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<pre><code>C:\\&gt;rustc -V rustc 1.49.0 (e1884a8e3 2020-12-29)<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e. \u042d\u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0445\u0432\u0430\u0442\u0430\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438 \u0438\u0434\u0451\u043c \u043d\u0430 \u0432\u0435\u0440\u0430\u043d\u0434\u0443, \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0433\u043b\u0443\u043f\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e. \u041e\u043a, \u0442\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c.<\/p>\n<pre><code>cd \\ mkdir work cd work mkdir rust cd rust cargo new hello-world<\/code><\/pre>\n<p>\u041e\u043a, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c cargo \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041d\u043e \u044f \u0436\u0435 \u043d\u0430 \u043d\u0430\u0434\u043e cargo \u0438\u0437\u0434\u0435\u0432\u0430\u044e\u0441\u044c, \u0442\u0430\u043a \u0432\u0435\u0434\u044c?<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u043c\u0435<\/summary>\n<div class=\"spoiler__content\">\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;undefined&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>\u0421\u043a\u0435\u0442\u0447 \u0428\u043e\u0443 &#8212; \u042f \u0444\u043b\u0438\u0440\u0442\u0443\u044e \u043d\u0435 \u0441 \u0412\u0430\u043c\u0438 \u2014 Video | VK<\/span><\/div>\n<p><a href=\"https:\/\/vk.com\/video-155258957_456239019\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">vk.com<\/a><\/div>\n<\/div>\n<\/div>\n<\/details>\n<pre><code>cd hello-world cd src rustc main.rs<\/code><\/pre>\n<p>\u0418\u2026 \u0411\u0443\u0445.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2cc\/607\/e77\/2cc607e772f10386007c0ac820518d73.png\" alt=\"\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c rust\" title=\"\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c rust\" width=\"723\" height=\"347\"><figcaption>\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c rust<\/figcaption><\/figure>\n<p>\u0427\u0435\u0433\u043e? \u0422\u0430\u043a, \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0441\u0451 \u0441\u043e\u0431\u0440\u0430\u043b, \u043d\u043e \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u043d\u043a\u0435\u0440\u0430. \u041e\u0442 \u0436\u0435\u0436, \u0437\u0430\u0440\u0430\u0437\u0430. \u0422\u043e \u0435\u0441\u0442\u044c, \u043b\u0438\u043d\u043a\u0435\u0440 \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0432\u043d\u0435\u0448\u043d\u0438\u0439. \u0420\u0443\u0433\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0432\u0441\u0442\u0430\u0451\u043c \u0441 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u0440\u0435\u0441\u043b\u0430 \u0438 \u0438\u0434\u0451\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0430\u043b\u0438\u0442\u044c 5 \u0433\u0438\u0433\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430 Visual Studio Build Tools \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430 \u0445\u043e\u0442\u0441\u043f\u043e\u0442\u0435. <\/p>\n<p>\u0411\u0438\u043b\u0434\u0438\u043c \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<figure class=\"float\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0fa\/41a\/06b\/0fa41a06b0cdb339de68aab6d2a65348.png\" alt=\"\u0428\u0438\u0440\u0438\u043d\u0430 \u0438 \u0436\u0438\u0440\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432...\" title=\"\u0428\u0438\u0440\u0438\u043d\u0430 \u0438 \u0436\u0438\u0440\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432...\" width=\"367\" height=\"216\"><figcaption>\u0428\u0438\u0440\u0438\u043d\u0430 \u0438 \u0436\u0438\u0440\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432&#8230;<\/figcaption><\/figure>\n<p>\u0410\u0445, \u0442\u044b, \u0440\u0436\u0430\u0432\u0430\u044f \u0431\u0430\u043d\u043a\u0430! \u041a\u0430\u043a\u043e\u0433\u043e \u0447\u0451\u0440\u0442\u0430?? \u042f \u0443\u0436\u0435 \u043a\u0430\u043a \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0432\u0441\u0435\u043c \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0425\u0430\u0431\u0440\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u0442\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0448\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0430 \u0442\u044b??? 150 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435? <\/p>\n<p>\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 <code>-C opt-level=3 <\/code>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0427\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u043c? \u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041c\u043e\u0442\u0430\u0435\u043c \u043d\u0430 \u0423\u0441 \u0438 \u0435\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. <\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d97\/eb1\/ddb\/d97eb1ddbd53d547f0487e7e1b3380c6.png\" alt=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442 - \u0441\u0434\u0435\u0441\u044c \u0436\u0435.\" title=\"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442 - \u0441\u0434\u0435\u0441\u044c \u0436\u0435.\" width=\"256\" height=\"256\"><figcaption>\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442 &#8212; \u0441\u0434\u0435\u0441\u044c \u0436\u0435.<\/figcaption><\/figure>\n<p>\u0423\u0441 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u0435\u043d. \u041d\u0430 \u043d\u0435\u0433\u043e \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043d\u0430\u043c\u043e\u0442\u0430\u043d\u043e, \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0441\u0442\u0430 \u0442\u0435\u043f\u0435\u0440\u044c.<\/p>\n<\/div>\n<\/details>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c? \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e 150 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442. \u041d\u0443, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u044b \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0440\u044b\u0442\u044c\u0441\u044f. (\u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f &#8212; \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u0442\u043e \u0434\u043e\u043b\u0433\u0438\u0439 \u0438 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439.)<\/p>\n<h2>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: rustc<\/h2>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0440\u0446\u044b \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f. \u0412\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0438 \u0447\u0438\u0441\u0442\u043e. \u0422\u0443\u0442, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u043c\u043e\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 rust. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0443\u0434\u0430 \u0438\u0434\u0442\u0438. \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 <code>compiler\/rustc\/src\/main.rs <\/code>\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/35d\/646\/574\/35d646574ae472e5a8cc0f2881609888.png\" alt=\"\u0412\u0441\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f... \u0414\u0435\u0440\u0436\u0438\u0442\u0435\u0441\u044c.\" title=\"\u0412\u0441\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f... \u0414\u0435\u0440\u0436\u0438\u0442\u0435\u0441\u044c.\" width=\"1092\" height=\"630\"><figcaption>\u0412\u0441\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f&#8230; \u0414\u0435\u0440\u0436\u0438\u0442\u0435\u0441\u044c.<\/figcaption><\/figure>\n<p>\u0425\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u044f\u043d\u0435\u0442 jemalloc \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0443 \u0432\u043e\u0442, \u0432\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 rust. \u0414\u0435\u043b\u043e\u0432-\u0442\u043e! \u041a\u0441\u0442\u0430\u0442\u0438, <a href=\"http:\/\/jemalloc.net\/\" rel=\"noopener noreferrer nofollow\">jemalloc<\/a> \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f FreeBSD \u0432 2005 \u0433\u043e\u0434\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0443\u043f\u043e\u0440 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u043c. \u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 malloc. \u0412 2007 \u0433\u043e\u0434\u0443 Firefox \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043e\u043d \u043f\u043e\u043f\u0430\u043b \u0432 Facebook. <\/p>\n<h2>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: rustc-driver<\/h2>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0436 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. rustc \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 rustc-driver. \u041d\u044b\u0440\u044f\u0435\u043c \u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043d\u0430\u0439\u0434\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 readme, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 \u043c\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u043c. \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<pre><code class=\"rust\">    interface::run_compiler(config, |compiler| {         let sess = compiler.session();         let should_stop = RustcDefaultCalls::print_crate_info(             &amp;***compiler.codegen_backend(),             sess,             Some(compiler.input()),             compiler.output_dir(),             compiler.output_file(),         )         .and_then(|| {             RustcDefaultCalls::list_metadata(                 sess,                 &amp;*compiler.codegen_backend().metadata_loader(),                 &amp;matches,                 compiler.input(),             )         })         .and_then(|| RustcDefaultCalls::try_process_rlink(sess, compiler)); <\/code><\/pre>\n<p>\u0414\u0430, \u0432 \u044d\u0442\u043e\u043c \u043a\u0440\u0435\u0439\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0447\u0442\u043e \u0431\u044b \u0442\u0443\u0442 \u043d\u0435 \u0442\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c interface. \u0412\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442. <code>interface::run_compiler<\/code> \u0438 \u043f\u043e\u0435\u0445\u0430\u043b\u0438. <\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432 rustc-driver? \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438. \u041f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0430\u0448\u043b\u0438 \u0438\u0445 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043b\u0438\u043d\u043a\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043b\u0438\u043d\u0442\u0435\u0440\u044b (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043b\u0438\u0441\u044c) \u0438 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c.<\/p>\n<h2>\u0428\u0430\u043a \u0442\u0440\u0435\u0442\u0438\u0439: rustc-interface<\/h2>\n<p>\u0410\u0433\u0430. \u0422\u0443\u0442 \u043c\u044b \u0443\u0436\u0435 \u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0412\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043f\u043e\u0434\u044a\u0435\u0434\u0435\u043d\u044b, \u0444\u0430\u0439\u043b\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u043c\u0435\u043f\u043b\u0435\u043d\u044b. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0418\u0445 \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u044d\u0442\u043e \u043d\u0430\u0448 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043a\u0437\u0430\u043b, \u0433\u0434\u0435 \u043a\u0443\u0447\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e.<\/p>\n<p>\u0422\u0430\u043a, \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c <\/p>\n<pre><code class=\"rust\">pub fn run_compiler&lt;r: send=\"\"&gt;(mut config: Config, f: impl FnOnce(&amp;Compiler) -&gt; R + Send) -&gt; R {     tracing::trace!(\"run_compiler\");     let stderr = config.stderr.take();     util::setup_callbacks_and_run_in_thread_pool_with_globals(         config.opts.edition,         config.opts.debugging_opts.threads,         &amp;stderr,         || create_compiler_and_run(config, f),     ) }<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438 \u0442\u0443\u0442 \u0436\u0435, \u043d\u0435\u0434\u0430\u043b\u0435\u043a\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. <\/p>\n<pre><code class=\"rust\">pub fn get_builtin_codegen_backend(backend_name: &amp;amp;str) -&gt; fn() -&gt; Box&lt;dyn codegenbackend=\"\"&gt; {     match backend_name {         #[cfg(feature = \"llvm\")]         \"llvm\" =&gt; rustc_codegen_llvm::LlvmCodegenBackend::new,         _ =&gt; get_codegen_sysroot(backend_name),     } }<\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0430\u0448\u0438 \u0441\u043e\u0440\u0446\u044b \u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 \u0435\u0441\u0442\u044c 3 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u0427\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442? \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 MIR \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c rustc-codegen-llvm \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 README:<\/p>\n<pre><code>The `codegen` crate contains the code to convert from MIR into LLVM IR, and then from LLVM IR into machine code. In general it contains code that runs towards the end of the compilation process.<\/code><\/pre>\n<p>\u041e\u043a, \u043d\u0443 \u0442\u0443\u0442 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043c\u044b \u0431\u0435\u0440\u0451\u043c MIR \u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 LLVM IR. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e LLVM \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u043e \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e LLVM \u0431\u0435\u043a\u0435\u043d\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445! \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0443\u0434\u0430. <code>rustc-codegen-ssa<\/code> \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0431\u0435\u043a\u044d\u043d\u0434\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, LLVM) \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043c \u0436\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 rustc-codegen-cranelift. \u0422\u043e \u0435\u0441\u0442\u044c MIR \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/tree\/main\/cranelift\" rel=\"noopener noreferrer nofollow\">cranelift, <\/a>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u0443 \u044d\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0413\u0430\u0437\u0435\u043b\u044c \u0431\u0435\u0437 \u043c\u043e\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438:<\/p>\n<pre><code class=\"rust\">fn configure_and_expand_inner&lt;'a&gt;(     sess: 'a Session,     lint_store: 'a LintStore,     mut krate: ast::Crate,     crate_name: &amp;str,     resolver_arenas: &amp;'a ResolverArenas&lt;'a&gt;,     metadata_loader: &amp;'a MetadataLoaderDyn, ) -&gt; Result&lt;(ast::Crate, Resolver&lt;'a&gt;)&gt; { \/\/[snip] <\/code><\/pre>\n<p>\u0410\u0433\u0430, \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u0431\u044b\u043a\u0430 \u0437\u0430 \u0440\u043e\u0433\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438.  \u0414\u0430\u043b\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c AST<\/p>\n<pre><code>let has_proc_macro_decls = sess.time(\"AST_validation\", || { \trustc_ast_passes::ast_validation::check_crate(sess, &amp;krate, &amp;mut resolver.lint_buffer()) });<\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0435 \u043c\u044f\u0441\u043e. \u041f\u0440\u0438\u043a\u043e\u043b \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c, \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432\u0435\u0449\u044c &#8212; \u0431\u0435\u0440\u0451\u0448\u044c \u0441\u043e\u0440\u0446\u044b, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0448\u044c\u0441\u044f \u043f\u043e \u043d\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043f\u0430\u0440\u0441\u0438\u0448\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043d\u0430\u0445\u043e\u0434\u0438\u0448\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0448\u044c \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. rust \u0432 \u0441\u0442\u0430\u0440\u043e\u0434\u0430\u0432\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0436\u0435. \u041d\u043e, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0417\u0430\u043f\u0440\u043e\u0441\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044b \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043a\u0435\u0448. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442) \u043d\u0435 \u043c\u0435\u043d\u044f\u043b \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0442\u043e \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e. \u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0434\u043e, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u0435\u0448\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e \u0444\u0430\u0439\u043b\u0435, \u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u0444\u0430\u0439\u043b\u0443? \u041f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440:<\/p>\n<pre><code class=\"rust\">pub struct Queries&lt;'tcx&gt; {     compiler: &amp;'tcx Compiler,     gcx: OnceCell&lt;globalctxt&lt;'tcx&gt;&gt;,      arena: WorkerLocal&lt;arena&lt;'tcx&gt;&gt;,     hir_arena: WorkerLocal&lt;rustc_ast_lowering::arena&lt;'tcx&gt;&gt;,      dep_graph_future: Query&lt;option&lt;depgraphfuture&gt;&gt;,     parse: Query&lt;ast::crate&gt;,     crate_name: Query&lt;string&gt;,     register_plugins: Query&lt;(ast::Crate, Lrc&lt;lintstore&gt;)&gt;,     expansion: Query&lt;(ast::Crate, Steal&lt;rc&lt;refcell&lt;boxedresolver&gt;&gt;&gt;, Lrc&lt;lintstore&gt;)&gt;,     dep_graph: Query&lt;depgraph&gt;,     lower_to_hir: Query&lt;(&amp;'tcx Crate&lt;'tcx&gt;, Steal&lt;resolveroutputs&gt;)&gt;,     prepare_outputs: Query&lt;outputfilenames&gt;,     global_ctxt: Query&lt;querycontext&lt;'tcx&gt;&gt;,     ongoing_codegen: Query&lt;box&lt;dyn any=\"\"&gt;&gt;, } <\/code><\/pre>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0440\u0435\u0439\u0442\u0430, \u0441\u0431\u043e\u0440 HIR &#8212; \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u041e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u044d\u0442\u043e \u0442\u043e \u0447\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445. <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0442\u043e\u043b\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430:<\/p>\n<pre><code class=\"rust\">    pub fn global_ctxt(&amp;'tcx self) -&gt; Result&lt;&amp;Query&lt;querycontext&lt;'tcx&gt;&gt;&gt; {         self.global_ctxt.compute(|| {             let crate_name = self.crate_name()?.peek().clone();             let outputs = self.prepare_outputs()?.peek().clone();             let lint_store = self.expansion()?.peek().2.clone();             let hir = self.lower_to_hir()?.peek();             let dep_graph = self.dep_graph()?.peek().clone();             let (ref krate, ref resolver_outputs) = &amp;*hir;             let _timer = self.session().timer(\"create_global_ctxt\");             Ok(passes::create_global_ctxt(                 self.compiler,                 lint_store,                 krate,                 dep_graph,                 resolver_outputs.steal(),                 outputs,                 &amp;crate_name,                 &amp;self.gcx,                 &amp;self.arena,             ))         })     } <\/code><\/pre>\n<p>\u0418 \u043a\u0430\u043a \u0440\u0430\u0437 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. <\/p>\n<h2>\u0428\u0430\u0433 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439: rustc-parse \u0438 rustc-lexer<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. &#171;\u041f\u0440\u043e\u0441\u0442\u0430\u044f&#187; \u043b\u043e\u0433\u0438\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u0440\u0435\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, rustc-parse<em>.<\/em> \u042d\u0442\u043e \u043a\u0440\u0435\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 rustc-lexer. \u041b\u0435\u043a\u0441\u0435\u0440 \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0432 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b. \u0422\u043e\u043a\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0445 \u0432 <code>Span<\/code> \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u0434\u043e\u043c. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e <code>Span<\/code> \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0432 \u0434\u0435\u0440\u0435\u0432\u0435 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u043c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u0435\u0441\u0442\u0435 \u044d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u041a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0433\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430. <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 <code>parse_crate_mod<\/code> \u0432 <code>rustc_parse\\src\\parser\\item.rs<\/code>. \u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u0442. \u0412\u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"rust\">    \/\/\/ Error in-case a `default` was parsed but no item followed.     fn error_on_unmatched_defaultness(&amp;self, def: Defaultness) {         if let Defaultness::Default(sp) = def {             self.struct_span_err(sp, \"`default` is not followed by an item\")                 .span_label(sp, \"the `default` qualifier\")                 .note(\"only `fn`, `const`, `type`, or `impl` items may be prefixed by `default`\")                 .emit();         }     } <\/code><\/pre>\n<h2>\u0428\u0430\u0433 \u043f\u044f\u0442\u044b\u0439: rustc-expand<\/h2>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u0430\u043c\u044b\u0439 \u0432\u0435\u043b\u0438\u043a\u0438\u0439 \u0438 \u043c\u043e\u0433\u0443\u0447\u0438\u0439 AST. <\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <code>astfragments!<\/code><em> \u0432 <\/em><code>\\compiler\\rustcexpand\\src\\expand.rs<\/code><\/p>\n<p>AST \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0438\u0434. \u041f\u0440\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443. \u041d\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u043c\u0441\u044f \u0442\u0430\u043c, \u0447\u0442\u043e AST \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u043e HIR.<\/p>\n<h2>\u0428\u0430\u0433 \u0448\u0435\u0441\u0442\u043e\u0439: rustc-middle<\/h2>\n<p>\u041a\u0443\u0434\u0430 \u0442\u044b \u0437\u0430\u0432\u0451\u043b \u043d\u0430\u0441? \u041d\u0435 \u0432\u0438\u0434\u043d\u043e \u043d\u0438 \u0437\u0433\u0438! \u041f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, \u0440\u0435\u0431\u044f\u0442\u0430, \u043d\u0435 \u0432\u0430\u0440\u044f\u0442 \u043c\u043e\u0437\u0433\u0438. \u0412\u0435\u0440\u043d\u0435\u0435, \u043c\u043e\u0437\u0433 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0430\u0440\u0438\u0442\u044c\u0441\u044f. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u044f \u043a\u043e\u0434\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u0448\u043d\u043e. \u041b\u0430\u0434\u043d\u043e, \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 &#8212; \u0441\u043c\u043e\u0442\u0440\u0438\u043c. \u0412\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f AST \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u0438\u0434. \u0412\u0435\u0440\u043d\u0435\u0435, \u0432 HIR. <\/p>\n<p>\u042d\u0442\u0438\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f rustc-middle. \u0412\u0435\u0440\u043d\u0435\u0435, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u043c. \u0417\u0430\u043b\u0435\u0437\u0430\u0435\u043c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0442\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c HIR, MIR \u0438 Types. <\/p>\n<pre><code class=\"rust\">\/\/! - **HIR.** The \"high-level (H) intermediate representation (IR)\" is \/\/!   defined in the `hir` module. \/\/! - **MIR.** The \"mid-level (M) intermediate representation (IR)\" is \/\/!   defined in the `mir` module. This module contains only the \/\/!   *definition* of the MIR; the passes that transform and operate \/\/!   on MIR are found in `rustc_mir` crate. \/\/! - **Types.** The internal representation of types used in rustc is \/\/!   defined in the `ty` module. This includes the **type context** \/\/!   (or `tcx`), which is the central context during most of \/\/!   compilation, containing the interners and other things. <\/code><\/pre>\n<p>\u0427\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438? \u041d\u0443, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 AST. \u042d\u0442\u0438\u043c, \u043a\u0441\u0442\u0430\u0442\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u043e\u0434\u0443\u043b\u044c, <code>rust_ast_lowering<\/code>. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0443\u0434\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 AST \u0432 HIR. <\/p>\n<pre><code class=\"rust\">pub(super) fn lower_expr_mut(;mut self, e: &amp;Expr) -&gt; hir::Expr&lt;'hir&gt; {         ensure_sufficient_stack(|| {             let kind = match e.kind {                 ExprKind::Box(ref inner) =&gt; hir::ExprKind::Box(self.lower_expr(inner)),                 ExprKind::Array(ref exprs) =&gt; hir::ExprKind::Array(self.lower_exprs(exprs)),                 ExprKind::ConstBlock(ref anon_const) =&gt; {                     let anon_const = self.lower_anon_const(anon_const);                     hir::ExprKind::ConstBlock(anon_const)                 }                 ExprKind::Repeat(ref expr, ref count) =&gt; {                     let expr = self.lower_expr(expr);                     let count = self.lower_anon_const(count);                     hir::ExprKind::Repeat(expr, count)                 }                 ExprKind::Tup(ref elts) =&gt; hir::ExprKind::Tup(self.lower_exprs(elts)),                 ExprKind::Call(ref f, ref args) =&gt; {                     let f = self.lower_expr(f);                     hir::ExprKind::Call(f, self.lower_exprs(args))                 } \/\/\/[snip] <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0435\u0441\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440 \u0440\u0430\u0441\u0442\u0432\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0435 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u0441\u0430\u0445\u0430\u0440\u043e\u043c. \u0422\u0430\u043a \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f <code>for node in data<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <\/p>\n<pre><code class=\"rust\">\/\/\/ Desugar `ExprForLoop` from: `[opt_ident]: for &lt;pat&gt; in  ` into: \/\/\/  \/\/\/ { \/\/\/     let result = match ::std::iter::IntoIterator::into_iter() { \/\/\/         mut iter =&gt; { \/\/\/             [opt_ident]: loop { \/\/\/                 let mut __next; \/\/\/                 match ::std::iter::Iterator::next(&amp;mut iter) { \/\/\/                     ::std::option::Option::Some(val) =&gt; __next = val, \/\/\/                     ::std::option::Option::None =&gt; break \/\/\/                 }; \/\/\/                 let &lt;pat&gt; = __next; \/\/\/                 StmtKind::Expr(); \/\/\/             } \/\/\/         } \/\/\/     }; \/\/\/     result \/\/\/ }<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0440\u0430\u0437, \u0432\u0441\u0435\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ? \u043f\u0435\u0440\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>Try::into_result<\/code>:<\/p>\n<pre><code class=\"rust\">\/\/\/ Desugar `ExprKind::Try` from: `&lt;expr&gt;?` into: \/\/\/ match Try::into_result(&lt;expr&gt;) { \/\/\/     Ok(val) =&gt; #[allow(unreachable_code)] val, \/\/\/     Err(err) =&gt; #[allow(unreachable_code)] \/\/\/                 \/\/ If there is an enclosing `try {...}`: \/\/\/                 break 'catch_target Try::from_error(From::from(err)), \/\/\/                 \/\/ Otherwise: \/\/\/                 return Try::from_error(From::from(err)), \/\/\/ }<\/code><\/pre>\n<p>\u0421 HIR \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u2026<\/p>\n<h2>\u0428\u0430\u0433 \u0441\u0435\u0434\u044c\u043c\u043e\u0439: rustc_ty<\/h2>\n<p>\u0418 <code>.\\rust-master\\compiler\\rustc_middle\\src\\ty\\mod.rs<\/code>. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c HIR. \u041a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0431\u0443\u0434\u0435\u0442 \u0443 <code>let mut a = 5;<\/code>? \u0412\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0438\u043f\u0430\u043c\u0438. \u0414\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0437\u0434\u0435\u0441\u044c:<\/p>\n<pre><code class=\"rust\">\/\/! - [`rustc_middle::ty::Ty`], used to represent the semantics of a type. \/\/! - [`rustc_middle::ty::TyCtxt`], the central data structure in the compiler.<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0424\u0430\u0439\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0442\u0438\u043f\u044b \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \u0438 \u0442\u0440\u0435\u0439\u0442\u0430. \u0421\u0430\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 3000 \u0441\u0442\u0440\u043e\u043a, \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 <code>rust-master\\compiler\\rustc_typeck\\src\\check\\expr.rs<\/code><\/p>\n<pre><code class=\"rust\">if let Some(ref e) = expr_opt {                 self.check_expr_with_hint(e, err);                  \/\/ ... except when we try to 'break rust;'.                 \/\/ ICE this expression in particular (see #43162).                 if let ExprKind::Path(QPath::Resolved(_, ref path)) = e.kind {                     if path.segments.len() == 1 &amp;&amp; path.segments[0].ident.name == sym::rust {                         fatally_break_rust(self.tcx.sess);                     }                 }             }<\/code><\/pre>\n<p>\u0425\u043c\u043c.. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0442\u044b\u043a\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0431\u0440\u0435\u0439\u043a, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043b\u0435\u0439\u0431\u043b &#8212; <code>rust<\/code> \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>fatally_break_rust<\/code>.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c.<\/p>\n<pre><code class=\"rust\">break rust;<\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c:<\/p>\n<pre><code>error: internal compiler error: It looks like you're trying to break rust; would you like some ICE?  note: the compiler expectedly panicked. this is a feature.  note: we would appreciate a joke overview: https:\/\/github.com\/rust-lang\/rust\/issues\/43162#issuecomment-320764675  note: rustc 1.51.0-nightly (b12290861 2021-01-29) running on x86_64-pc-windows-msvc <\/code><\/pre>\n<p>\u041f\u0430\u0441\u0445\u0430\u043b\u043a\u0438 \u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a.<\/p>\n<p>\u0422\u0430\u043a, \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438 \u0442\u0438\u043f\u044b \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0445\u043d\u0443\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 Int. \u0425\u043e\u0440\u043e\u0448\u043e. \u041c\u043e\u0436\u043d\u043e \u0438\u0434\u0442\u0438 \u0434\u0430\u043b\u044c\u0448\u0435. <\/p>\n<h2>\u0428\u0430\u0433 \u0432\u043e\u0441\u044c\u043c\u043e\u0439: rustc_mir \u0438 rustc_mir_build<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448 HIR \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 MIR. \u0411\u0435\u0440\u0451\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 TyCtxt \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 <\/p>\n<pre><code class=\"rust\">\/\/\/ Construct the MIR for a given `DefId`. fn mir_build(tcx: TyCtxt&lt;'_&gt;, def: ty::WithOptConstParam&lt;localdefid&gt;) -&gt; Body&lt;'_&gt; {     let id = tcx.hir().local_def_id_to_hir_id(def.did);      \/\/ Figure out what primary body this item has.     let (body_id, return_ty_span, span_with_body) = match tcx.hir().get(id) {         Node::Expr(hir::Expr { kind: hir::ExprKind::Closure(_, decl, body_id, _, _), .. }) =&gt; {             (*body_id, decl.output.span(), None)         }         Node::Item(hir::Item {             kind: hir::ItemKind::Fn(hir::FnSig { decl, .. }, _, body_id),             span,             ..         })         | Node::ImplItem(hir::ImplItem {             kind: hir::ImplItemKind::Fn(hir::FnSig { decl, .. }, body_id),             span,             ..         })         | Node::TraitItem(hir::TraitItem {             kind: hir::TraitItemKind::Fn(hir::FnSig { decl, .. }, hir::TraitFn::Provided(body_id)),             span,             ..         }) =&gt; {             \/\/ Use the `Span` of the `Item\/ImplItem\/TraitItem` as the body span,             \/\/ since the def span of a function does not include the body             (*body_id, decl.output.span(), Some(*span))         }<\/code><\/pre>\n<p>\u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u043e\u0434\u0430\u043c. MIR \u044d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f HIR. \u041e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u0430 \u043a \u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441 LLVM \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439. <\/p>\n<h2>\u0428\u0430\u0433 \u0434\u0435\u0432\u044f\u0442\u044b\u0439: \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u0421\u0430\u043c\u0430\u044f &#171;\u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f&#187; \u0444\u0443\u043d\u043a\u0446\u0438\u044f rust \u044d\u0442\u043e \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 borrow cheker. \u0421\u0430\u043c \u043e\u043d \u0436\u0438\u0432\u0451\u0442 \u0432 <\/p>\n<pre><code class=\"rust\">fn do_mir_borrowck&lt;'a, 'tcx&gt;(     infcx: &amp;InferCtxt&lt;'a, 'tcx&gt;,     input_body: &amp;Body&lt;'tcx&gt;,     input_promoted: &amp;IndexVec&lt;promoted, body&lt;'tcx=\"\"&gt;&gt;, ) -&gt; BorrowCheckResult&lt;'tcx&gt; {     let def = input_body.source.with_opt_param().as_local().unwrap();      debug!(\"do_mir_borrowck(def = {:?})\", def);      let tcx = infcx.tcx;     let param_env = tcx.param_env(def.did);     let id = tcx.hir().local_def_id_to_hir_id(def.did);      let mut local_names = IndexVec::from_elem(None, &amp;input_body.local_decls);     for var_debug_info in &amp;input_body.var_debug_info {         if let VarDebugInfoContents::Place(place) = var_debug_info.value {             if let Some(local) = place.as_local() {                 if let Some(prev_name) = local_names[local] {                     if var_debug_info.name != prev_name {                         span_bug!(                             var_debug_info.source_info.span,                             \"local {:?} has many names (`{}` vs `{}`)\",                             local,                             prev_name,                             var_debug_info.name                         );                     }                 }                 local_names[local] = Some(var_debug_info.name);             }         }     } <\/code><\/pre>\n<p>\u0412 <code>rust-master\\compiler\\rustc_mir\\src\\borrow_check\\mod.rs<\/code>. \u0414\u0430, \u0441\u0430\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0439, \u043a\u0430\u043a \u0438 borrow checker. \u0410 \u0432\u043e\u0442 \u0442\u0443\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>rust-master\\compiler\\rustc_mir\\src\\borrow_check\\diagnostics\\move_errors.rs<\/code><\/p>\n<h2>\u0428\u0430\u0433 \u0434\u0435\u0441\u044f\u0442\u044b\u0439: \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u0440\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 rust \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443. \u0412\u0441\u0451 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u043e \u0432 <code>rust-master\\compiler\\rustc_mir\\src\\transform<\/code>. LLVM \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e rust. \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"rust\">\/\/\u0412\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e let x: Option&lt;()&gt;; let y: Option&lt;()&gt;; match (x,y) {     (Some(_), Some(_)) =&gt; {0},     _ =&gt; {1} } \/\/\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u0430\u043a\u043e\u0439: let x: Option&lt;()&gt;; let y: Option&lt;()&gt;; let discriminant_x = \/\/get discriminant of x let discriminant_y = \/\/get discriminant of y if discriminant_x != discriminant_y || discriminant_x == None {1} else {0}<\/code><\/pre>\n<h2>\u0428\u0430\u043a \u043e\u0434\u0438\u043d\u043d\u0430\u0434\u0446\u0430\u0442\u044b\u0439: \u043f\u0440\u043e\u0449\u0430\u0439, rust!<\/h2>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 MIR \u043c\u043e\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0432 LLVM IR. \u041f\u043e\u0435\u0445\u0430\u043b\u0438. <code>rustc-codegen-llvm<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 LLVM-IR \u043d\u0430 \u0431\u0430\u0437\u0435 MIR, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435. \u0417\u0434\u0435\u0441\u044c \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f rust \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f llvm. \u0425\u043e\u0442\u044f, \u043c\u044b \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0441 \u0441\u043e\u0440\u0446\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. <\/p>\n<p>\u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0430\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>rust-master\\compiler\\rustc_codegen_llvm\\src\\asm.rs<\/code>  \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 rust. \u0414\u0430\u0436\u0435 \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043b \u044d\u0442\u043e\u0433\u043e. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 <a href=\"https:\/\/blog.rust-lang.org\/inside-rust\/2020\/06\/08\/new-inline-asm.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e <\/a>&#8212; \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435! <\/p>\n<p>\u041a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c <code>rustc-target<\/code> \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0438\u0434\u0438\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u043c. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c IR \u0432 \u0441\u0430\u043c LLVM. <code>rustc_llvm<\/code> \u043d\u0430\u043c \u0432 \u043f\u043e\u043c\u043e\u0449\u044c.<\/p>\n<p>\u0412\u043e\u0442, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0438 \u0432\u0441\u0451, \u0440\u0435\u0431\u044f\u0442\u0430! LLVM \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u0430\u0448\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430 \u043c\u043e\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Visual Studio Build Tools \u0431\u0435\u0440\u0443\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u044e\u0442 LLVMIR \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. <\/p>\n<h2>TL;DR<\/h2>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 rust &#8212; \u044d\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u043c\u0435\u0448\u043a\u0438 \u0432\u043e\u0440\u043e\u0447\u0430\u0442\u044c. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u0438\u043c\u043e\u0432\u0435\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u041e\u043d \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 AST.<\/p>\n<\/li>\n<li>\n<p>AST \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 HIR<\/p>\n<\/li>\n<li>\n<p>HIR \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 MIR.<\/p>\n<\/li>\n<li>\n<p>MIR \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0432 LLVMIR.<\/p>\n<\/li>\n<li>\n<p>LLVMIR \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435.<\/p>\n<\/li>\n<\/ol>\n<h2>\u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0443\u0447\u043a\u0430\u043c\u0438<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0443, \u0442\u0438\u043f\u0430 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code class=\"rust\">fn main() {     let z = 10;     if z &gt; 5 {         println!(\"Number Five is ALIVE!\");     } else {         println!(\"Hmmm... No, number 5 is actually dead as a piece of wood.\");     }     let mut input = String::new();     let stdin = std::io::stdin();     stdin.read_line(&amp;mut input).ok().expect(\"You have failed me for the last time!\"); } <\/code><\/pre>\n<p>\u0418 \u043d\u0430\u0447\u0430\u0442\u044c \u0435\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438:<\/p>\n<pre><code>--emit [asm|llvm-bc|llvm-ir|obj|metadata|link|dep-info|mir]        Comma separated list of types of output for the        compiler to emit<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code>rustc --emit asm,llvm-bc,llvm-ir,obj,metadata,link,dep-info,mir main.rs<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043c\u0438\u0440\u0438\u0430\u0434\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u0434, \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0438 IR \u0434\u043b\u044f LLVM, \u0438 \u0434\u0430\u0436\u0435 \u0447\u0435\u043b\u0432\u043e\u0435\u043a\u043e-\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 MIR.<\/p>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c nightly \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <\/p>\n<pre><code>rustc main.rs  -Z unpretty=hir-tree &gt; hir.txt<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u044e\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438\u043c HIR, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a<\/p>\n<pre><code>rustc main.rs  -Z ast-json=yes &gt; ast.json<\/code><\/pre>\n<p>\u0414\u0430\u0441\u0442 \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 AST.<\/p>\n<h2>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a<\/h2>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043c\u044b \u0437\u0430\u043b\u0435\u0437\u043b\u0438 \u0432 \u0434\u0435\u0431\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0431\u0438\u043b\u0434 \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u042f \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0432\u0430\u043c rust. \u041d\u043e \u043d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c, \u0432\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u044f\u0437\u044b\u043a, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0441\u043b\u043e\u0436\u0435\u043d. \u041f\u0440\u043e\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u044f 386 \u043f\u043e\u0434 \u0434\u043e\u0441\u043e\u043c. \u0418 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 C#, Java, Javascript, Golang \u0438\u043b\u0438 haskell. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u0435, \u0445\u043e\u0442\u044f \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. <\/p>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e? \u041d\u0443 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<\/p>\n<h2>\u041f\u043e\u0441\u0442\u0441\u043a\u0440\u0438\u043f\u0442\u0443\u043c<\/h2>\n<p>\u0423\u0441 \u0440\u0430\u0437\u043c\u043e\u0442\u0430\u043b\u0441\u044f. <\/p>\n<p>\u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0442\u0430\u043a\u043e\u0439-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439? \u041d\u0443, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043b\u0435\u0433\u043a\u043e. \u0417\u0430\u043b\u0435\u0437\u0430\u0435\u043c \u0432\u0430\u0448\u0438\u043c \u043b\u044e\u0431\u0438\u043c\u044b\u043c \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c \u0432 .pdb \u0444\u0430\u0439\u043b \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044f\u043d\u0443\u0442\u0441\u044f \u0432 \u043d\u0430\u0448 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u0418\u0445 \u043c\u043d\u043e\u0433\u043e. \u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438, \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041f\u043b\u044e\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430. \u0427\u0442\u043e, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0447\u0442\u043e 150 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 &#8212; \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e?<\/p>\n<pre><code>C:\\work\\rust\\hello-world\\src&gt;rustc -C opt-level=3 main.rs  C:\\work\\rust\\hello-world\\src&gt;upx --brute main.exe                        Ultimate Packer for eXecutables                           Copyright (C) 1996 - 2020 UPX 3.96w       Markus Oberhumer, Laszlo Molnar &amp; John Reiser   Jan 23rd 2020          File size         Ratio      Format      Name    --------------------   ------   -----------   -----------     154624 -&gt;     65536   42.38%    win64\/pe     main.exe                                                                                                                                                                                                                                                                                                                                                                                                           Packed 1 file.<\/code><\/pre>\n<\/p>\n<\/div>\n<p> \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\/post\/539796\/\"> https:\/\/habr.com\/ru\/post\/539796\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043c\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e rust \u044f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u044f\u0437\u044b\u043a\u0430, \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u043f\u0440\u0438\u0448\u0451\u043b. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0439. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e. \u041d\u0430\u0440\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u041d\u043e \u0432 \u043e\u043f\u0440\u043e\u0441\u0435, \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0438\u0448\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 rust. \u041c\u044b \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u043c \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u043a \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0443.<\/p>\n<h2>\u0421\u043b\u043e\u0432\u0430\u0440\u044c<\/h2>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0437\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438 \u0431\u0435\u0437 \u0443\u0434\u0435\u0440\u0436\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0437\u043d\u0430\u0447\u0438\u0442 &#8212; \u0445\u043e\u0440\u043e\u0448\u043e. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0438 \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043d\u044b\u0440\u0438\u0432\u0430\u0442\u044c.<\/p>\n<ol>\n<li>\n<p><strong>LLVM <\/strong>&#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0440\u043e\u043d\u0442-\u044d\u043d\u0434 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>AST <\/strong>&#8212; (abstract syntax tree) \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0432 \u043a\u043e\u0434\u0435. <\/p>\n<\/li>\n<li>\n<p><strong>IR <\/strong>(intermediate representation) &#8212; \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0422\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u0438 \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u044e\u0442 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p><strong>HIR <\/strong>(High Level IR) &#8212; IR \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0432 rust. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 AST, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>MIR <\/strong>(Mid Level IR) &#8212; \u042d\u0442\u043e \u0440\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f HIR, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043b\u0438\u0436\u0435 \u043a LLVMIR. <\/p>\n<\/li>\n<li>\n<p><strong>LLVMIR <\/strong>(Language Independent IR) &#8212; \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443 \u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. <\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0440\u0435\u0439\u0442, crate<\/strong> &#8212; \u042d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043b\u0438\u0431\u043e \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u043a\u0440\u0435\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>ICE <\/strong>(Internal compiler error), \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b \u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u043d\u0430 rust.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043b\u0435\u0437\u0442\u044c \u043d\u0430\u0448\u0438\u043c\u0438 \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u0432 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0421\u0442\u0430\u0432\u0438\u043c \u0447\u0438\u0441\u0442\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 Windows 10. \u0418\u0434\u0451\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u044b \u0438 \u043b\u044c\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0440\u0446\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0414\u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0441 github. \u041c\u043e\u0436\u043d\u043e \u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e zip, \u0438\u0431\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>VSCode.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041b\u044e\u0431\u0430\u044f \u0441\u0432\u0435\u0436\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0434\u0430\u0432\u0430\u0439\u0442\u0435, \u0437\u0430\u043e\u0434\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c nightly \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<br \/><code>rustup toolchain install nightly --allow-downgrade --profile minimal --component clippy<\/code> <code>rustup default nightly<\/code><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/rustc-dev-guide.rust-lang.org\/\" rel=\"noopener noreferrer nofollow\">Guide to Rustc Development<\/a>. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. 460 \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041d\u0435 \u0445\u0438\u043b\u043e. \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c pdf.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:<\/p>\n<pre><code>C:\\&gt;rustc -V rustc 1.49.0 (e1884a8e3 2020-12-29)<\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e. \u042d\u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430, \u0445\u0432\u0430\u0442\u0430\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438 \u0438\u0434\u0451\u043c \u043d\u0430 \u0432\u0435\u0440\u0430\u043d\u0434\u0443, \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0433\u043b\u0443\u043f\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e. \u041e\u043a, \u0442\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c.<\/p>\n<pre><code>cd \\ mkdir work cd work mkdir rust cd rust cargo new hello-world<\/code><\/pre>\n<p>\u041e\u043a, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u041d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c cargo \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041d\u043e \u044f \u0436\u0435 \u043d\u0430 \u043d\u0430\u0434\u043e cargo \u0438\u0437\u0434\u0435\u0432\u0430\u044e\u0441\u044c, \u0442\u0430\u043a \u0432\u0435\u0434\u044c?<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u043c\u0435<\/summary>\n<div class=\"spoiler__content\">\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;undefined&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>\u0421\u043a\u0435\u0442\u0447 \u0428\u043e\u0443 &#8212; \u042f \u0444\u043b\u0438\u0440\u0442\u0443\u044e \u043d\u0435 \u0441 \u0412\u0430\u043c\u0438 \u2014 Video | VK<\/span><\/div>\n<p><a href=\"https:\/\/vk.com\/video-155258957_456239019\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">vk.com<\/a><\/div>\n<\/div>\n<\/div>\n<\/details>\n<pre><code>cd hello-world cd src rustc main.rs<\/code><\/pre>\n<p>\u0418\u2026 \u0411\u0443\u0445.<\/p>\n<figure class=\"full-width\"><figcaption>\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c rust<\/figcaption><\/figure>\n<p>\u0427\u0435\u0433\u043e? \u0422\u0430\u043a, \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0441\u0451 \u0441\u043e\u0431\u0440\u0430\u043b, \u043d\u043e \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043b\u0438\u043d\u043a\u0435\u0440\u0430. \u041e\u0442 \u0436\u0435\u0436, \u0437\u0430\u0440\u0430\u0437\u0430. \u0422\u043e \u0435\u0441\u0442\u044c, \u043b\u0438\u043d\u043a\u0435\u0440 \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0432\u043d\u0435\u0448\u043d\u0438\u0439. \u0420\u0443\u0433\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0432\u0441\u0442\u0430\u0451\u043c \u0441 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u0440\u0435\u0441\u043b\u0430 \u0438 \u0438\u0434\u0451\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0430\u043b\u0438\u0442\u044c 5 \u0433\u0438\u0433\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430 Visual Studio Build Tools \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430 \u0445\u043e\u0442\u0441\u043f\u043e\u0442\u0435. <\/p>\n<p>\u0411\u0438\u043b\u0434\u0438\u043c \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<figure class=\"float\"><figcaption>\u0428\u0438\u0440\u0438\u043d\u0430 \u0438 \u0436\u0438\u0440\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432&#8230;<\/figcaption><\/figure>\n<p>\u0410\u0445, \u0442\u044b, \u0440\u0436\u0430\u0432\u0430\u044f \u0431\u0430\u043d\u043a\u0430! \u041a\u0430\u043a\u043e\u0433\u043e \u0447\u0451\u0440\u0442\u0430?? \u042f \u0443\u0436\u0435 \u043a\u0430\u043a \u0434\u0432\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0432\u0441\u0435\u043c \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u0425\u0430\u0431\u0440\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u0442\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0448\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0430 \u0442\u044b??? 150 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437-\u0437\u0430 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435? <\/p>\n<p>\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 <code>-C opt-level=3 <\/code>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u0427\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u043c? \u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041c\u043e\u0442\u0430\u0435\u043c \u043d\u0430 \u0423\u0441 \u0438 \u0435\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. <\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><figcaption>\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442 &#8212; \u0441\u0434\u0435\u0441\u044c \u0436\u0435.<\/figcaption><\/figure>\n<p>\u0423\u0441 \u043d\u0435\u0434\u043e\u0432\u043e\u043b\u0435\u043d. \u041d\u0430 \u043d\u0435\u0433\u043e \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043d\u0430\u043c\u043e\u0442\u0430\u043d\u043e, \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 \u0435\u043c\u0443 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0440\u0430\u0441\u0442\u0430 \u0442\u0435\u043f\u0435\u0440\u044c.<\/p>\n<\/div>\n<\/details>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u043d\u0430\u0435\u043c? \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043b\u0438\u043d\u043a\u0435\u0440\u0430 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e 150 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442. \u041d\u0443, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043c\u044b \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0447\u043d\u0451\u043c \u0440\u044b\u0442\u044c\u0441\u044f. (\u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f &#8212; \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u0442\u043e \u0434\u043e\u043b\u0433\u0438\u0439 \u0438 \u0443\u0442\u043e\u043c\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439.)<\/p>\n<h2>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: rustc<\/h2>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u0440\u0446\u044b \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f. \u0412\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0438 \u0447\u0438\u0441\u0442\u043e. \u0422\u0443\u0442, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u043c\u043e\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u043a\u0443\u0441\u043a\u0438 \u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 rust. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0443\u0434\u0430 \u0438\u0434\u0442\u0438. \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 <code>compiler\/rustc\/src\/main.rs <\/code>\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u0441\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f&#8230; \u0414\u0435\u0440\u0436\u0438\u0442\u0435\u0441\u044c.<\/figcaption><\/figure>\n<p>\u0425\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u044f\u043d\u0435\u0442 jemalloc \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041d\u0443 \u0432\u043e\u0442, \u0432\u0441\u0451. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 rust. \u0414\u0435\u043b\u043e\u0432-\u0442\u043e! \u041a\u0441\u0442\u0430\u0442\u0438, <a href=\"http:\/\/jemalloc.net\/\" rel=\"noopener noreferrer nofollow\">jemalloc<\/a> \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f FreeBSD \u0432 2005 \u0433\u043e\u0434\u0443. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0443\u043f\u043e\u0440 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u043e\u043c. \u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 malloc. \u0412 2007 \u0433\u043e\u0434\u0443 Firefox \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0435\u0449\u0451 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043e\u043d \u043f\u043e\u043f\u0430\u043b \u0432 Facebook. <\/p>\n<h2>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: rustc-driver<\/h2>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0432\u0441\u0451 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0436 \u043f\u0440\u043e\u0441\u0442\u043e. \u041f\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. rustc \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 rustc-driver. \u041d\u044b\u0440\u044f\u0435\u043c \u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043d\u0430\u0439\u0434\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 readme, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435 \u043c\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u043c. \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<pre><code class=\"rust\">    interface::run_compiler(config, |compiler| {         let sess = compiler.session();         let should_stop = RustcDefaultCalls::print_crate_info(             &amp;***compiler.codegen_backend(),             sess,             Some(compiler.input()),             compiler.output_dir(),             compiler.output_file(),         )         .and_then(|| {             RustcDefaultCalls::list_metadata(                 sess,                 &amp;*compiler.codegen_backend().metadata_loader(),                 &amp;matches,                 compiler.input(),             )         })         .and_then(|| RustcDefaultCalls::try_process_rlink(sess, compiler)); <\/code><\/pre>\n<p>\u0414\u0430, \u0432 \u044d\u0442\u043e\u043c \u043a\u0440\u0435\u0439\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0447\u0442\u043e \u0431\u044b \u0442\u0443\u0442 \u043d\u0435 \u0442\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043a\u0440\u0435\u0439\u0442\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c interface. \u0412\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442. <code>interface::run_compiler<\/code> \u0438 \u043f\u043e\u0435\u0445\u0430\u043b\u0438. <\/p>\n<p>\u0427\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432 rustc-driver? \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438. \u041f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u043d\u0430\u0448\u043b\u0438 \u0438\u0445 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043b\u0438\u043d\u043a\u0435\u0440 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043b\u0438\u043d\u0442\u0435\u0440\u044b (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043b\u0438\u0441\u044c) \u0438 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u0441\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c.<\/p>\n<h2>\u0428\u0430\u043a \u0442\u0440\u0435\u0442\u0438\u0439: rustc-interface<\/h2>\n<p>\u0410\u0433\u0430. \u0422\u0443\u0442 \u043c\u044b \u0443\u0436\u0435 \u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0412\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043f\u043e\u0434\u044a\u0435\u0434\u0435\u043d\u044b, \u0444\u0430\u0439\u043b\u044b \u0442\u043e\u0436\u0435 \u0437\u0430\u043c\u0435\u043f\u043b\u0435\u043d\u044b. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0418\u0445 \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0442\u0430\u043a-\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u044d\u0442\u043e \u043d\u0430\u0448 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u043e\u043a\u0437\u0430\u043b, \u0433\u0434\u0435 \u043a\u0443\u0447\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0435\u0434\u0438\u043d\u043e.<\/p>\n<p>\u0422\u0430\u043a, \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c <\/p>\n<pre><code class=\"rust\">pub fn run_compiler&lt;r: send=\"\"&gt;(mut config: Config, f: impl FnOnce(&amp;Compiler) -&gt; R + Send) -&gt; R {     tracing::trace!(\"run_compiler\");     let stderr = config.stderr.take();     util::setup_callbacks_and_run_in_thread_pool_with_globals(         config.opts.edition,         config.opts.debugging_opts.threads,         &amp;stderr,         || create_compiler_and_run(config, f),     ) }<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438 \u0442\u0443\u0442 \u0436\u0435, \u043d\u0435\u0434\u0430\u043b\u0435\u043a\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. <\/p>\n<pre><code class=\"rust\">pub fn get_builtin_codegen_backend(backend_name: &amp;amp;str) -&gt; fn() -&gt; Box&lt;dyn codegenbackend=\"\"&gt; {     match backend_name {         #[cfg(feature = \"llvm\")]         \"llvm\" =&gt; rustc_codegen_llvm::LlvmCodegenBackend::new,         _ =&gt; get_codegen_sysroot(backend_name),     } }<\/code><\/pre>\n<p>\u0411\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0430\u0448\u0438 \u0441\u043e\u0440\u0446\u044b \u0438 \u0443\u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u043e\u0440\u0446\u0430\u0445 \u0435\u0441\u0442\u044c 3 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u0427\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442? \u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 MIR \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c rustc-codegen-llvm \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 README:<\/p>\n<pre><code>The `codegen` crate contains the code to convert from MIR into LLVM IR, and then from LLVM IR into machine code. In general it contains code that runs towards the end of the compilation process.<\/code><\/pre>\n<p>\u041e\u043a, \u043d\u0443 \u0442\u0443\u0442 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043c\u044b \u0431\u0435\u0440\u0451\u043c MIR \u0438 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0432 LLVM IR. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e LLVM \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041d\u043e \u043f\u043e\u0433\u043e\u0434\u0438\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e LLVM \u0431\u0435\u043a\u0435\u043d\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445! \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0443\u0434\u0430. <code>rustc-codegen-ssa<\/code> \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0431\u0435\u043a\u044d\u043d\u0434\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, LLVM) \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043c \u0436\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 rustc-codegen-cranelift. \u0422\u043e \u0435\u0441\u0442\u044c MIR \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/github.com\/bytecodealliance\/wasmtime\/tree\/main\/cranelift\" rel=\"noopener noreferrer nofollow\">cranelift, <\/a>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u041d\u0443 \u044d\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0413\u0430\u0437\u0435\u043b\u044c \u0431\u0435\u0437 \u043c\u043e\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438:<\/p>\n<pre><code class=\"rust\">fn configure_and_expand_inner&lt;'a&gt;(     sess: 'a Session,     lint_store: 'a LintStore,     mut krate: ast::Crate,     crate_name: &amp;str,     resolver_arenas: &amp;'a ResolverArenas&lt;'a&gt;,     metadata_loader: &amp;'a MetadataLoaderDyn, ) -&gt; Result&lt;(ast::Crate, Resolver&lt;'a&gt;)&gt; { \/\/[snip] <\/code><\/pre>\n<p>\u0410\u0433\u0430, \u0432\u043e\u0442 \u0442\u0443\u0442 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u0431\u044b\u043a\u0430 \u0437\u0430 \u0440\u043e\u0433\u0430 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438.  \u0414\u0430\u043b\u0435\u0435, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c AST<\/p>\n<pre><code>let has_proc_macro_decls = sess.time(\"AST_validation\", || { \trustc_ast_passes::ast_validation::check_crate(sess, &amp;krate, &amp;mut resolver.lint_buffer()) });<\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0435 \u043c\u044f\u0441\u043e. \u041f\u0440\u0438\u043a\u043e\u043b \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c, \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0434\u0435\u043b\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e <\/p>\n<\/ol>\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-317255","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317255","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=317255"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317255\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}