{"id":324902,"date":"2021-06-14T21:00:19","date_gmt":"2021-06-14T21:00:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=324902"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=324902","title":{"rendered":"extendr: \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c rust \u0438\u0437 R (\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442)"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d Rust \u0432 R?<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f &#8212; \u0430 \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Rust<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>R<\/code>? \u041e\u0442\u0432\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: <code>Rust<\/code> &#8212; \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430. <code>Rust<\/code> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u0435\u043d \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 (\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u044f\u0437\u044b\u043a\u0430\u043c\u0438), \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. <code>Rust<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u041e\u041e\u041f \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437-\u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445\/\u041e\u041e\u041f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, <code>Rust<\/code> \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a zero-cost abstraction \u044f\u0437\u044b\u043a, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 <code>C++<\/code>.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 <code>Rust<\/code> \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0435 \u043a\u0440\u0435\u0439\u0442\u044b. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0434\u043b\u044f <code>R<\/code>, \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0430 <code>R<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>Rust<\/code>: \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0446\u0435\u043b\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u043e\u0432.<\/p>\n<h2>\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b R \u043a\u043e\u0434 \u043c\u043e\u0433 \u0432\u044b\u0437\u0432\u0430\u0442\u044c Rust-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443?<\/h2>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 &#8212; \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u043d\u043e\u0433\u043e. <code>R<\/code>-\u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>src\/<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>src\/Makevars<\/code> \u0438\u043b\u0438 <code>src\/Makevars.win <\/code>\u0444\u0430\u0439\u043b\u043e\u0432 (\u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f <code>make<\/code>) \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0437\u0432\u0430\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 <code>cargo <\/code>(\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/github.com\/r-rust\/hellorust\/blob\/0b53c737ead980f58fe9584fbf513f15fdfe0582\/src\/Makevars#L10\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>): <\/p>\n<pre><code class=\"bash\">cargo build --release --manifest-path=rustlib\/Cargo.toml<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>Rust<\/code> -\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a <code>crate-type = [\"staticlib\"]<\/code>. \u041a\u0440\u043e\u043c\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>Rust<\/code>-\u043a\u043e\u0434\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>C<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 <code>R<\/code>-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0442 <code>R<\/code>, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/r-rust\/hellorust\/blob\/master\/src\/wrapper.c\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a<\/a>).<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; <code>C<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 <code>R<\/code> <code>SEXP<\/code> (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c) \u0432\u043e \u0447\u0442\u043e-\u0442\u043e, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0441 <code>Rust<\/code>, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 <code>R<\/code> (\u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u0430\u0448\u0438 <code>PROTECT<\/code>, <code>UNPORTECT<\/code>, \u0438 \u0442. \u0434.). \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0431\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. <\/p>\n<h2>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c R \u0438 Rust: \u0442\u0440\u0438 \u043f\u0336\u0440\u0336\u043e\u0336\u0441\u0336\u0442\u0336\u044b\u0336\u0445\u0336 \u0448\u0430\u0433\u0430<\/h2>\n<h4>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 R<\/h4>\n<p>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 <code>R<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>API<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0432\u0438\u0434\u0435 <code>C<\/code>\/ <code>C++<\/code> \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0441\u043c. <code>$R_HOME\\include\\<\/code>). \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e &#8212; \u0437\u0430\u0433\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a <code>Rust<\/code>. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0443 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435: <code>rust-bindgen<\/code> (<a href=\"https:\/\/rust-lang.github.io\/rust-bindgen\/\" rel=\"noopener noreferrer nofollow\">rust-lang\/rust-bindgen<\/a>). <code>bindgen<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>Rust<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/crates.io\/crates\/libR-sys\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0435\u0439\u0442<\/a> <code>libR-sys<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c <code>R<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 &#8212; \u0432\u0435\u0449\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, <code>bindgen<\/code> \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442  <code>clang<\/code>\u0438 \u0441\u043b\u043e\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c pre-computed (\u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0433\u0435\u043d\u0435\u043d\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435) \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 <code>R<\/code>. \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f <code>linux-x64<\/code> (\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ubuntu-20.04), <code>win-x86\/x64<\/code> (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>msys2<\/code>, <code>x86<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445), <code>macOS<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u044f 11 \u0432\u0435\u0440\u0441\u0438\u044e (\u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438), <code>x64<\/code> \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e <code>arm64<\/code> (\u0447\u0435\u0441\u0442\u043d\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u0435\u0441\u0442\u044c \u043b\u0438 <code>arm64<\/code> \u0441\u0431\u043e\u0440\u043a\u0430 <code>R<\/code> \u043f\u043e\u0434 <code>macOS<\/code>).  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\/\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432: <code>oldrel<\/code>, <code>release<\/code>, \u0438 <code>devel<\/code>, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 &#171;\u043f\u0440\u043e\u0448\u043b\u043e\u0439&#187;, &#171;\u0442\u0435\u043a\u0443\u0449\u0435\u0439&#187; (\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e <code>4.1.0<\/code>) \u0438 &#171;\u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0439\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435&#187; \u0432\u0435\u0440\u0441\u0438\u044f\u043c <code>R<\/code>.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0433\u0434\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>R<\/code> \u043f\u0430\u043a\u0435\u0442, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c \u043d\u0430 Windows). \u0413\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c <code>R<\/code> \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u043d\u0440\u0438\u0440\u0432\u043e\u0430\u0442\u044c \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 (\u0435\u0441\u043b\u0438 <code>Rust<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443). <\/p>\n<p>\u0418\u0441\u0445\u043e\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0443\u0442\u043f\u0435\u043d <a href=\"https:\/\/github.com\/extendr\/libR-sys\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041a\u0440\u0435\u0439\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0442. \u043a. \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u043b\u0438\u0437 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <code>R<\/code>.<\/p>\n<h4>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h4>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0448\u0430\u0433 &#8212; \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0431\u043e\u0438\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430. \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a &#8212; \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0432 <code>Rust<\/code> \u0438 \u0432 <code>R<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0438\u0437 <code>R<\/code>, \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0431\u0430\u0433\u043e\u0432. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>Rust<\/code>.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435. \u0412\u0441\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>extendr<\/code> \u0438, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u043e\u0432, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u042d\u043d\u0434\u0438 \u0422\u043e\u043c\u0430\u0441\u043e\u043d\u0443 (<a href=\"https:\/\/github.com\/andy-thomason\" rel=\"noopener noreferrer nofollow\">@andy-thomason<\/a>). \u0411\u0435\u0437 \u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u0430, \u043d\u0430 \u043c\u043e\u0439 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, <code>extendr<\/code> \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0439\u0447\u0430\u0441, \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d. <\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u043a\u043e\u0434\u0443. \u041a\u0430\u043a \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0431\u043e\u0438\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430? \u041b\u0435\u0433\u043a\u043e, \u043d\u0430\u0434\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <code>Rust<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/crates.io\/crates\/syn\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <\/a><code>syn<\/code> \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0440\u0435\u0439\u0442\u044b. \u041c\u043e\u0435\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442 <code>Rust<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u0430  <code>#[extendr]<\/code>:<\/p>\n<pre><code class=\"rust\">#[extendr] fn add_i32(x : i32, y : i32) -&gt; i32 { x + y }  #[extendr] fn add_vec(x : &amp;[i32], y : &amp;[i32]) -&gt; Vec&lt;i32&gt; {      x.iter().zip(y.iter()).map(|v| v.0 + v.1).collect() }<\/code><\/pre>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"rust\">extendr_module! {   mod extendrtest;   fn add_i32;   fn add_vec; }<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u043e \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0444\u0438\u0447, \u043a <code>extendr<\/code> \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043a WIP.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>Rust<\/code>-\u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>src\/<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0444\u0430\u0439\u043b\u044b-\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>R<\/code> \u043f\u043e\u043f\u0440\u043e\u0441\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e, \u0432 <code>src\/<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>entrypoint.c<\/code>, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void R_init_extendrtest_extendr(void *dll);  void R_init_extendrtest(void *dll) {   R_init_extendrtest_extendr(dll); }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c <code>R_init_extendrtest_extendr<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u0430, \u0430 <code>R_init_extendrtest<\/code> &#8212; \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 <code>R<\/code>. \u041c\u044b \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438 <code>Makevars<\/code>-\u0444\u0430\u0439\u043b\u044b. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">LIBDIR = .\/rust\/target\/release STATLIB = $(LIBDIR)\/libextendrtest.a PKG_LIBS = -L$(LIBDIR) -lextendrtest  all: C_clean  $(SHLIB): $(STATLIB)  $(STATLIB): \tcargo build --lib --release --manifest-path=.\/rust\/Cargo.toml \t C_clean: \trm -Rf $(SHLIB) $(STATLIB) $(OBJECTS)  clean: \trm -Rf $(SHLIB) $(STATLIB) $(OBJECTS) rust\/target<\/code><\/pre>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0441 <code>R<\/code> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>Rust<\/code>-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>entrypoint.c<\/code>.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f Windows, \u0441 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u0447\u0442\u043e \u043d\u0430 Windows \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c   \u0438<code>x86<\/code>, \u0438 <code>x64<\/code>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a <code>STATLIB<\/code>.<\/p>\n<p><code>extendr<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>Rust<\/code>, \u043e\u043d \u0435\u0449\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>R<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 <code>Rust<\/code> \u043a\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0430\u043a\u0435\u0442\u0430 <code>{extendrtest}<\/code>, \u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0443\u0442\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"r\">extendrtest::add_i32(4L, 11L)  # [1] 15  extendrtest::add_vec(1:10, 10:1)  #  [1] 11 11 11 11 11 11 11 11 11 11 <\/code><\/pre>\n<p>\u0414\u0430, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<h4>\u0428\u0430\u0433 \u0442\u0440\u0435\u0442\u0438\u0439: user-friendliness<\/h4>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u044b \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u0430\u043a <code>{cpp11}<\/code> &#8212; header-only \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>C++11<\/code> \u043a\u043e\u0434\u0430. \u0422\u0430\u043a <a href=\"https:\/\/github.com\/extendr\/rextendr\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f<\/a> \u043d\u0430 \u0441\u0432\u0435\u0442 <code>{rextendr}<\/code>, <code>R<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0431\u0435\u0437 <code>Rust<\/code>-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e <code>extendr<\/code>, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>{usethis}<\/code>;<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>Rust<\/code> &#8212; \u043a\u043e\u0434\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043f\u0440\u044f\u043c\u043e \u0432 <code>R<\/code>-\u0441\u0435\u0441\u0441\u0438\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 <em>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/em> \u0414\u043b\u044f \u041f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 <code>knitr<\/code>-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 (engines), \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <code>{extendr}<\/code> \u0438 <code>{extendrsrc},<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b <code>Rust<\/code>-\u043a\u043e\u0434\u0430 (\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f) \u0432 \u0432\u0430\u0448 Rmarkdown \u043f\u0440\u044f\u043c\u043e \u0440\u044f\u0434\u043e\u043c \u0441 <code>R<\/code>-\u043a\u043e\u0434\u043e\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 <code>{rextendr}<\/code> \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432 CRAN,  \u0438 \u043c\u044b \u0436\u0434\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u042f \u0434\u0443\u043c\u0430\u044e, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>{rextendr}<\/code>. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<sup> <\/sup><code>{reprex}<\/code>.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435,<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\"fn hello_r() -&gt; &amp;'static str { \\\"Hello R!\\\" }\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmp259cVM\\file10186cb44264' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmp259cVM\/file10186cb44264\/target\/extendr_wrappers.R'. hello_r() #&gt; [1] \"Hello R!\"<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u044f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043d\u043e \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <code>NA<\/code>?<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\"fn add_i32(x : i32, y : i32) -&gt; i32 { x + y }\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmp2P2cnQ\\file2f7c65e8269a' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmp2P2cnQ\/file2f7c65e8269a\/target\/extendr_wrappers.R'. add_i32(42L, NA) #&gt; Error in add_i32(42L, NA): unable to convert R object to primitive <\/code><\/pre>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b, \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u044d\u0442\u0438\u043c, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 &#8212;  <code>NA<\/code> \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 <code>i32<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\" fn add_i32_opt(x : Option&lt;i32&gt;, y : Option&lt;i32&gt;) -&gt; Option&lt;i32&gt; {     match (x, y) {         (Some(a), Some(b)) =&gt; Some(a + b),         _ =&gt; None     } } \") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmpyg3uPw\\file6587a897d2a' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmpyg3uPw\/file6587a897d2a\/target\/extendr_wrappers.R'.  add_i32_opt(NA, 42L) #&gt; [1] NA add_i32_opt(42L, 100L) #&gt; [1] 142<\/code><\/pre>\n<p>\u0425\u043e\u0442\u0438\u0442\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0433\u0438\u0438? \u041c\u0430\u043a\u0440\u043e\u0441 <code>R!<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <code>R<\/code>-\u043a\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0435\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439. \u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0435\u0442<\/p>\n<pre><code class=\"r\">x &lt;- 42L  y &lt;- 100L  rextendr::rust_eval(\"R!(x)? * 2 + R!(y)? * 3\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\RtmpKeC23J\\file32ec53677fc9' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpKeC23J\/file32ec53677fc9\/target\/extendr_wrappers.R'. #&gt; [1] 384<\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 <code>R<\/code> \u0438 <code>Rust<\/code>.<\/p>\n<pre><code class=\"r\">library(tibble) x &lt;- 10:1 # \u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 R rextendr::rust_eval(\"call!(\\\"tibble\\\", x = R!(x), y = 1..=10)\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\RtmpcDWhlk\\file45802f52dc5' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpcDWhlk\/file45802f52dc5\/target\/extendr_wrappers.R'. #&gt; # A tibble: 10 x 2 #&gt;        x     y #&gt;    &lt;int&gt; &lt;int&gt; #&gt;  1    10     1 #&gt;  2     9     2 #&gt;  3     8     3 #&gt;  4     7     4 #&gt;  5     6     5 #&gt;  6     5     6 #&gt;  7     4     7 #&gt;  8     3     8 #&gt;  9     2     9 #&gt; 10     1    10<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043d\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b. \u041e\u043d\u0438 \u043b\u0438\u0448\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f <code>R<\/code> \u0438 <code>Rust<\/code>. <\/p>\n<p>\u0414\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u043f\u0435\u0447\u0430\u0442\u0438 \u0432 <code>Rout<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 : <code>rprintln!<\/code>.<\/p>\n<pre><code class=\"r\">x &lt;- 42L rextendr::rust_eval(\"rprintln!(\\\"Hello from Rust! x = {}\\\", R!(x)?.as_integer().unwrap());\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\RtmpWQh3w0\\file48e024f161ce' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpWQh3w0\/file48e024f161ce\/target\/extendr_wrappers.R'. #&gt; Hello from Rust! x = 42<\/code><\/pre>\n<h2>\u041f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 extendr-\u043f\u0430\u043a\u0435\u0442<\/h2>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>{rextendr}<\/code> \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"r\">pkg &lt;- file.path(tempfile(), \"myextendr\") dir.create(pkg, recursive = TRUE) usethis::create_package(pkg) usethis::proj_activate(pkg) rextendr::use_extendr() rextendr::document() rextendr::document() hello_world()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"r\">pkg &lt;- file.path(tempfile(), \"myextendr\") dir.create(pkg, recursive = TRUE) usethis::create_package(pkg) #&gt; v Setting active project to 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpAVW4HZ\/file122c180d1953\/myextendr' #&gt; v Creating 'R\/' #&gt; v Writing 'DESCRIPTION' #&gt; Package: myextendr #&gt; Title: What the Package Does (One Line, Title Case) #&gt; Version: 0.0.0.9000 #&gt; Authors@R (parsed): #&gt;     * First Last &lt;first.last@example.com&gt; [aut, cre] (YOUR-ORCID-ID) #&gt; Description: What the package does (one paragraph). #&gt; License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a #&gt;     license #&gt; Encoding: UTF-8 #&gt; LazyData: true #&gt; Roxygen: list(markdown = TRUE) #&gt; RoxygenNote: 7.1.1 #&gt; v Writing 'NAMESPACE' #&gt; v Setting active project to '&lt;no active project&gt;' usethis::proj_activate(pkg) #&gt; v Setting active project to 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpAVW4HZ\/file122c180d1953\/myextendr' #&gt; v Changing working directory to 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpAVW4HZ\/file122c180d1953\/myextendr\/' rextendr::use_extendr() #&gt; v Creating 'src\/rust\/src'. #&gt; v Writing 'src\/entrypoint.c' #&gt; v Writing 'src\/Makevars' #&gt; v Writing 'src\/Makevars.win' #&gt; v Writing 'src\/.gitignore' #&gt; v Writing 'src\/rust\/Cargo.toml'. #&gt; v Writing 'src\/rust\/src\/lib.rs' #&gt; v Writing 'R\/extendr-wrappers.R' #&gt; v Finished configuring extendr for package myextendr. #&gt; * Please update the system requirement in 'DESCRIPTION' file. #&gt; * Please run `rextendr::document()` for changes to take effect. rextendr::document() #&gt; i Generating extendr wrapper functions for package: myextendr. #&gt; ! No library found at 'src\/myextendr.dll', recompilation is required. #&gt; Re-compiling myextendr #&gt;   -  installing *source* package 'myextendr' ... #&gt;      ** using staged installation #&gt;      ** libs #&gt;      rm -Rf myextendr.dll .\/rust\/target\/x86_64-pc-windows-gnu\/release\/libmyextendr.a entrypoint.o #&gt;      \"C:\/rtools40\/mingw64\/bin\/\"gcc  -I\"C:\/PROGRA~1\/R\/R-41~1.0\/include\" -DNDEBUG          -O2 -Wall  -std=gnu99 -mfpmath=sse -msse2 -mstackrealign  -UNDEBUG -Wall -pedantic -g -O0 -c entrypoint.c -o entrypoint.o #&gt;      cargo build --target=x86_64-pc-windows-gnu --lib --release --manifest-path=.\/rust\/Cargo.toml #&gt;              Updating crates.io index #&gt;             Compiling winapi-build v0.1.1 #&gt;       Compiling winapi v0.3.9 #&gt;       Compiling winapi v0.2.8 #&gt;       Compiling proc-macro2 v1.0.27 #&gt;       Compiling unicode-xid v0.2.2 #&gt;       Compiling syn v1.0.73 #&gt;       Compiling extendr-engine v0.2.0 #&gt;       Compiling lazy_static v1.4.0 #&gt;             Compiling kernel32-sys v0.2.2 #&gt;             Compiling quote v1.0.9 #&gt;             Compiling extendr-macros v0.2.0 #&gt;             Compiling libR-sys v0.2.1 #&gt;             Compiling extendr-api v0.2.0 #&gt;             Compiling myextendr v0.1.0 (C:\\Users\\...\\AppData\\Local\\Temp\\RtmpAVW4HZ\\file122c180d1953\\myextendr\\src\\rust) #&gt;              Finished release [optimized] target(s) in 33.09s #&gt;      C:\/rtools40\/mingw64\/bin\/gcc -shared -s -static-libgcc -o myextendr.dll tmp.def entrypoint.o -L.\/rust\/target\/x86_64-pc-windows-gnu\/release -lmyextendr -lws2_32 -ladvapi32 -luserenv -LC:\/PROGRA~1\/R\/R-41~1.0\/bin\/x64 -lR #&gt;      installing to C:\/Users\/...\/AppData\/Local\/Temp\/RtmpAVW4HZ\/devtools_install_122c37bd1965\/00LOCK-myextendr\/00new\/myextendr\/libs\/x64 #&gt;   -  DONE (myextendr) #&gt; v Writing 'R\/extendr-wrappers.R'. #&gt; i Updating myextendr documentation #&gt; i Loading myextendr #&gt; Writing NAMESPACE #&gt; Writing NAMESPACE #&gt; Writing hello_world.Rd rextendr::document() #&gt; i Generating extendr wrapper functions for package: myextendr. #&gt; i 'R\/extendr-wrappers.R' is up-to-date. Skip generating wrapper functions. #&gt; i Updating myextendr documentation #&gt; i Loading myextendr #&gt; Writing NAMESPACE #&gt; Writing NAMESPACE hello_world() #&gt; [1] \"Hello world!\"<\/code><\/pre>\n<\/div>\n<\/details>\n<p><code>hello_world()<\/code> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Rust \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <code>R<\/code>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e <code>hello_world.Rd<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>rextendr::document()<\/code> (\u0430\u043d\u0430\u043b\u043e\u0433 <code>devtools::document()<\/code>).  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>rextendr<\/code>-\u043f\u0430\u0440\u0441\u0435\u0440 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>\/\/\/<\/code> \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a\u0430\u043a <code>R<\/code> \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. <code>Rust<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<pre><code class=\"rust\"> \/\/\/ Return string `\"Hello world!\"` to R. \/\/\/ @export #[extendr] fn hello_world() -&gt; &amp;'static str {     \"Hello world!\" }<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 <code>R<\/code> \u043e\u0431\u0435\u0440\u0442\u043a\u0443<\/p>\n<pre><code class=\"r\">#' Return string `\"Hello world!\"` to R. #' @export hello_world &lt;- function() .Call(wrap__hello_world)<\/code><\/pre>\n<p>\u0438, \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 <code>NAMESPACE<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>{roxygen2}<\/code>.<\/p>\n<h2>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e<\/h2>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0444\u0438\u0447\u0443 <code>extendr<\/code>. \u041a\u0440\u0435\u0439\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0446\u0435\u043b\u044b\u0435 \u0442\u0438\u043f\u044b. \u041b\u0435\u0433\u043a\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0440\u0443\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u0437 <code>Rust<\/code>  \u0432 <code>R<\/code> , \u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 &#8212; \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u0430\u043a \u0441\u0441\u044b\u043b\u043a\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u041e\u041e\u041f \u0432 <code>R<\/code> \u0432 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c (object-first) \u0441\u0442\u0438\u043b\u0435, \u043c\u043e\u0434\u0438\u0446\u0438\u0444\u0438\u0440\u0443\u044f in-place \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0438\u0437 <code>Rust<\/code>: <\/p>\n<details class=\"spoiler\">\n<summary>\u041c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"r\">rextendr::rust_source(code = \" struct Counter {     n: i32, }  #[extendr] impl Counter {     fn new() -&gt; Self {         Self { n: 0 }     }          fn increment(&amp;mut self) {         self.n += 1;     }          fn get_n(&amp;self) -&gt; i32 {         self.n     } } \") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\RtmpWOu1pt\\file5318783e2176' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/RtmpWOu1pt\/file5318783e2176\/target\/extendr_wrappers.R'.  cntr &lt;- Counter$new() cntr$get_n() #&gt; [1] 0 cntr$increment() cntr$increment() cntr$get_n() #&gt; [1] 2<\/code><\/pre>\n<\/div>\n<\/details>\n<h2>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0438 \u0441\u0443\u043c\u0431\u0443\u0440\u043d\u0435\u0439, \u0447\u0435\u043c \u044f \u043e\u0436\u0438\u0434\u0430\u043b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c <strong>\u0432\u0441\u0435<\/strong> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <code>extendr<\/code>. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u0439 \u0438 \u0435\u0449\u0435 \u0434\u0430\u043b\u0435\u043a \u043e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 <code>Rust<\/code> \u0432 <code>R<\/code>, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u044d\u0442\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u043c. \u041c\u044b \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 <code>Rust<\/code>, \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 <code>C<\/code> \/ <code>C++<\/code>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0435\u0439\u0447\u0430\u0441 \u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0431\u044b\u043b\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 Windows. \u041c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 Windows <code>extendr<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>Rust<\/code> &#8212; \u0442\u0443\u043b\u0447\u0435\u0439\u043d, <code>stable-x86_64-pc-windows-msvc<\/code>, \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0446\u0435\u043b\u044f\u043c\u0438 (targets) <code>x86_64-pc-windows-gnu<\/code> \u0438 <code>i686-pc-windows-gnu<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 <code>Rtools40v2<\/code> (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <code>Rtools40<\/code>). <\/p>\n<p> \u0421\u043a\u0443\u0434\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/extendr.github.io\/rextendr\/index.html\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/extendr\/\" rel=\"noopener noreferrer nofollow\">extendr<\/a>.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430!<\/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\/554176\/\"> https:\/\/habr.com\/ru\/post\/554176\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h2>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d Rust \u0432 R?<\/h2>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f &#8212; \u0430 \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Rust<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>R<\/code>? \u041e\u0442\u0432\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: <code>Rust<\/code> &#8212; \u043d\u043e\u0432\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430. <code>Rust<\/code> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u0435\u043d \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 (\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u044f\u0437\u044b\u043a\u0430\u043c\u0438), \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. <code>Rust<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u041e\u041e\u041f \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437-\u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445\/\u041e\u041e\u041f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, <code>Rust<\/code> \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a zero-cost abstraction \u044f\u0437\u044b\u043a, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 <code>C++<\/code>.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 <code>Rust<\/code> \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0435 \u043a\u0440\u0435\u0439\u0442\u044b. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0440\u0435\u0439\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 \u0434\u043b\u044f <code>R<\/code>, \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0430 <code>R<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>Rust<\/code>: \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0446\u0435\u043b\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u043e\u0432.<\/p>\n<h2>\u0427\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b R \u043a\u043e\u0434 \u043c\u043e\u0433 \u0432\u044b\u0437\u0432\u0430\u0442\u044c Rust-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443?<\/h2>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 &#8212; \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u043d\u043e\u0433\u043e. <code>R<\/code>-\u043f\u0430\u043a\u0435\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>src\/<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>src\/Makevars<\/code> \u0438\u043b\u0438 <code>src\/Makevars.win <\/code>\u0444\u0430\u0439\u043b\u043e\u0432 (\u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044f <code>make<\/code>) \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0437\u0432\u0430\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 <code>cargo <\/code>(\u0441\u043c. \u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/github.com\/r-rust\/hellorust\/blob\/0b53c737ead980f58fe9584fbf513f15fdfe0582\/src\/Makevars#L10\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>): <\/p>\n<pre><code class=\"bash\">cargo build --release --manifest-path=rustlib\/Cargo.toml<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>Rust<\/code> -\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a <code>crate-type = [\"staticlib\"]<\/code>. \u041a\u0440\u043e\u043c\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>Rust<\/code>-\u043a\u043e\u0434\u0430, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>C<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 <code>R<\/code>-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0442 <code>R<\/code>, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/r-rust\/hellorust\/blob\/master\/src\/wrapper.c\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a<\/a>).<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; <code>C<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 <code>R<\/code> <code>SEXP<\/code> (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c) \u0432\u043e \u0447\u0442\u043e-\u0442\u043e, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0441 <code>Rust<\/code>, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 <code>R<\/code> (\u0432\u0441\u0435 \u044d\u0442\u0438 \u0432\u0430\u0448\u0438 <code>PROTECT<\/code>, <code>UNPORTECT<\/code>, \u0438 \u0442. \u0434.). \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0431\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. <\/p>\n<h2>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c R \u0438 Rust: \u0442\u0440\u0438 \u043f\u0336\u0440\u0336\u043e\u0336\u0441\u0336\u0442\u0336\u044b\u0336\u0445\u0336 \u0448\u0430\u0433\u0430<\/h2>\n<h4>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 R<\/h4>\n<p>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 <code>R<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>API<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0432\u0438\u0434\u0435 <code>C<\/code>\/ <code>C++<\/code> \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0441\u043c. <code>$R_HOME\\include\\<\/code>). \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e &#8212; \u0437\u0430\u0433\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a <code>Rust<\/code>. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0443 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435: <code>rust-bindgen<\/code> (<a href=\"https:\/\/rust-lang.github.io\/rust-bindgen\/\" rel=\"noopener noreferrer nofollow\">rust-lang\/rust-bindgen<\/a>). <code>bindgen<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>Rust<\/code>-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <a href=\"https:\/\/crates.io\/crates\/libR-sys\" rel=\"noopener noreferrer nofollow\">\u043a\u0440\u0435\u0439\u0442<\/a> <code>libR-sys<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c <code>R<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 &#8212; \u0432\u0435\u0449\u044c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, <code>bindgen<\/code> \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442  <code>clang<\/code>\u0438 \u0441\u043b\u043e\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c pre-computed (\u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0433\u0435\u043d\u0435\u043d\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435) \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 <code>R<\/code>. \u0421\u043f\u0438\u0441\u043e\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f <code>linux-x64<\/code> (\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ubuntu-20.04), <code>win-x86\/x64<\/code> (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>msys2<\/code>, <code>x86<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445), <code>macOS<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u044f 11 \u0432\u0435\u0440\u0441\u0438\u044e (\u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438), <code>x64<\/code> \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e <code>arm64<\/code> (\u0447\u0435\u0441\u0442\u043d\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u0435\u0441\u0442\u044c \u043b\u0438 <code>arm64<\/code> \u0441\u0431\u043e\u0440\u043a\u0430 <code>R<\/code> \u043f\u043e\u0434 <code>macOS<\/code>).  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\/\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432: <code>oldrel<\/code>, <code>release<\/code>, \u0438 <code>devel<\/code>, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 &#171;\u043f\u0440\u043e\u0448\u043b\u043e\u0439&#187;, &#171;\u0442\u0435\u043a\u0443\u0449\u0435\u0439&#187; (\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e <code>4.1.0<\/code>) \u0438 &#171;\u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0439\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435&#187; \u0432\u0435\u0440\u0441\u0438\u044f\u043c <code>R<\/code>.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0433\u0434\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>R<\/code> \u043f\u0430\u043a\u0435\u0442, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0430\u044f \u0433\u043e\u043b\u043e\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c \u043d\u0430 Windows). \u0413\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c <code>R<\/code> \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u043d\u0440\u0438\u0440\u0432\u043e\u0430\u0442\u044c \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u0438 (\u0435\u0441\u043b\u0438 <code>Rust<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443). <\/p>\n<p>\u0418\u0441\u0445\u043e\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0443\u0442\u043f\u0435\u043d <a href=\"https:\/\/github.com\/extendr\/libR-sys\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041a\u0440\u0435\u0439\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0442. \u043a. \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043f\u043b\u043e\u0439\u043c\u0435\u043d\u0442\u0430 \u043d\u043e\u0432\u044b\u0445 \u0431\u0430\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u043b\u0438\u0437 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <code>R<\/code>.<\/p>\n<h4>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h4>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0448\u0430\u0433 &#8212; \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0431\u043e\u0438\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430. \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a &#8212; \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0432 <code>Rust<\/code> \u0438 \u0432 <code>R<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0438\u0437 <code>R<\/code>, \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u0435\u0439\u0448\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0431\u0430\u0433\u043e\u0432. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>Rust<\/code>.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435. \u0412\u0441\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <code>extendr<\/code> \u0438, \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u043e\u0432, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u042d\u043d\u0434\u0438 \u0422\u043e\u043c\u0430\u0441\u043e\u043d\u0443 (<a href=\"https:\/\/github.com\/andy-thomason\" rel=\"noopener noreferrer nofollow\">@andy-thomason<\/a>). \u0411\u0435\u0437 \u0435\u0433\u043e \u0432\u043a\u043b\u0430\u0434\u0430, \u043d\u0430 \u043c\u043e\u0439 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, <code>extendr<\/code> \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0439\u0447\u0430\u0441, \u0431\u044b\u043b \u0431\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d. <\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u043a\u043e\u0434\u0443. \u041a\u0430\u043a \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0431\u043e\u0438\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430? \u041b\u0435\u0433\u043a\u043e, \u043d\u0430\u0434\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 <code>Rust<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/crates.io\/crates\/syn\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <\/a><code>syn<\/code> \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0440\u0435\u0439\u0442\u044b. \u041c\u043e\u0435\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442 <code>Rust<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u0430  <code>#[extendr]<\/code>:<\/p>\n<pre><code class=\"rust\">#[extendr] fn add_i32(x : i32, y : i32) -&gt; i32 { x + y }  #[extendr] fn add_vec(x : &amp;[i32], y : &amp;[i32]) -&gt; Vec&lt;i32&gt; {      x.iter().zip(y.iter()).map(|v| v.0 + v.1).collect() }<\/code><\/pre>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"rust\">extendr_module! {   mod extendrtest;   fn add_i32;   fn add_vec; }<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u043e \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0444\u0438\u0447, \u043a <code>extendr<\/code> \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043a WIP.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>Rust<\/code>-\u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>src\/<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0444\u0430\u0439\u043b\u044b-\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>R<\/code> \u043f\u043e\u043f\u0440\u043e\u0441\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e, \u0432 <code>src\/<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>entrypoint.c<\/code>, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">void R_init_extendrtest_extendr(void *dll);  void R_init_extendrtest(void *dll) {   R_init_extendrtest_extendr(dll); }<\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c <code>R_init_extendrtest_extendr<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442\u0430, \u0430 <code>R_init_extendrtest<\/code> &#8212; \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 <code>R<\/code>. \u041c\u044b \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438 <code>Makevars<\/code>-\u0444\u0430\u0439\u043b\u044b. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">LIBDIR = .\/rust\/target\/release STATLIB = $(LIBDIR)\/libextendrtest.a PKG_LIBS = -L$(LIBDIR) -lextendrtest  all: C_clean  $(SHLIB): $(STATLIB)  $(STATLIB): \tcargo build --lib --release --manifest-path=.\/rust\/Cargo.toml \t C_clean: \trm -Rf $(SHLIB) $(STATLIB) $(OBJECTS)  clean: \trm -Rf $(SHLIB) $(STATLIB) $(OBJECTS) rust\/target<\/code><\/pre>\n<p>\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c <code>Rust<\/code>-\u043a\u0440\u0435\u0439\u0442, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0441 <code>R<\/code> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>Rust<\/code>-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>entrypoint.c<\/code>.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f Windows, \u0441 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439 \u0447\u0442\u043e \u043d\u0430 Windows \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c   \u0438<code>x86<\/code>, \u0438 <code>x64<\/code>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a <code>STATLIB<\/code>.<\/p>\n<p><code>extendr<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>Rust<\/code>, \u043e\u043d \u0435\u0449\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 <code>R<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 <code>Rust<\/code> \u043a\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0430\u043a\u0435\u0442\u0430 <code>{extendrtest}<\/code>, \u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0443\u0442\u043f\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"r\">extendrtest::add_i32(4L, 11L)  # [1] 15  extendrtest::add_vec(1:10, 10:1)  #  [1] 11 11 11 11 11 11 11 11 11 11 <\/code><\/pre>\n<p>\u0414\u0430, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<h4>\u0428\u0430\u0433 \u0442\u0440\u0435\u0442\u0438\u0439: user-friendliness<\/h4>\n<p>\u0412 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043c\u044b \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u043a\u0430\u043a <code>{cpp11}<\/code> &#8212; header-only \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <code>C++11<\/code> \u043a\u043e\u0434\u0430. \u0422\u0430\u043a <a href=\"https:\/\/github.com\/extendr\/rextendr\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f<\/a> \u043d\u0430 \u0441\u0432\u0435\u0442 <code>{rextendr}<\/code>, <code>R<\/code> &#8212; \u043f\u0430\u043a\u0435\u0442 \u0431\u0435\u0437 <code>Rust<\/code>-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e <code>extendr<\/code>, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>{usethis}<\/code>;<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <code>Rust<\/code> &#8212; \u043a\u043e\u0434\u0430 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043f\u0440\u044f\u043c\u043e \u0432 <code>R<\/code>-\u0441\u0435\u0441\u0441\u0438\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 <em>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/em> \u0414\u043b\u044f \u041f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 <code>knitr<\/code>-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 (engines), \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <code>{extendr}<\/code> \u0438 <code>{extendrsrc},<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b <code>Rust<\/code>-\u043a\u043e\u0434\u0430 (\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f) \u0432 \u0432\u0430\u0448 Rmarkdown \u043f\u0440\u044f\u043c\u043e \u0440\u044f\u0434\u043e\u043c \u0441 <code>R<\/code>-\u043a\u043e\u0434\u043e\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 <code>{rextendr}<\/code> \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432 CRAN,  \u0438 \u043c\u044b \u0436\u0434\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u042f \u0434\u0443\u043c\u0430\u044e, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>{rextendr}<\/code>. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<sup> <\/sup><code>{reprex}<\/code>.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435,<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\"fn hello_r() -&gt; &amp;'static str { \\\"Hello R!\\\" }\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmp259cVM\\file10186cb44264' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmp259cVM\/file10186cb44264\/target\/extendr_wrappers.R'. hello_r() #&gt; [1] \"Hello R!\"<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u044f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043d\u043e \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <code>NA<\/code>?<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\"fn add_i32(x : i32, y : i32) -&gt; i32 { x + y }\") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmp2P2cnQ\\file2f7c65e8269a' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmp2P2cnQ\/file2f7c65e8269a\/target\/extendr_wrappers.R'. add_i32(42L, NA) #&gt; Error in add_i32(42L, NA): unable to convert R object to primitive <\/code><\/pre>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b, \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u044d\u0442\u0438\u043c, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 &#8212;  <code>NA<\/code> \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 <code>i32<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a<\/p>\n<pre><code class=\"r\">rextendr::rust_function(\" fn add_i32_opt(x : Option&lt;i32&gt;, y : Option&lt;i32&gt;) -&gt; Option&lt;i32&gt; {     match (x, y) {         (Some(a), Some(b)) =&gt; Some(a + b),         _ =&gt; None     } } \") #&gt; i build directory: 'C:\\Users\\...\\AppData\\Local\\Temp\\Rtmpyg3uPw\\file6587a897d2a' #&gt; v Writing 'C:\/Users\/...\/AppData\/Local\/Temp\/Rtmpyg3uPw\/file6587a897d2a\/target\/extendr_wrappers.R'.  add_i32_opt(NA, 42L) #&gt; [1] NA add_i32_opt(42L, 100L) #&gt; [1] 142<\/code><\/pre>\n<p>\u0425\u043e\u0442\u0438\u0442\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0433\u0438\u0438? \u041c\u0430\u043a\u0440\u043e\u0441 <code>R!<\/code><\/p>\n<\/p>\n<\/p>\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-324902","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/324902","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=324902"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/324902\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=324902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=324902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=324902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}