R
, как и большинство подобных ему высокоуровневых скриптовых языков, часто полагается на код, написанный на более низкоуровневом языке. Библиотеки R
- пакеты (packages) - нередко содержат код, написанный на C
, C++
или FORTRAN
. Нативный код позволяет обойти различные ограничения (например, однопоточность) и ускорить выполнение сложных алгоритмов за счет оптимизаций, попросту недоступных из самого R
. Вся эта вычислительная мощь, тем не менее, получает удобный и совместимый с другими инструментами интерфейс на стороне R
.
Разработка пакетов с C
/ C++
кодом давно налажена благодаря сторонним библиотекам, включая {usethis}
, {devtools}
, {pkgbuild}
, {cpp11}
и т.д. Но что насчет других низкоуровневых языков? Ведь R
всего-навсего динамически подгружает и вызывает библиотеки, поэтому если соблюсти все необходимые условия, можно, например, создать пакет с кодом, написанном на Rust
. Несмотря на то, что на практике это действительно работает, разработка, поддержка и внедрение таких инструментов - довольно трудоемкий процесс. Точнее был трудоемким до этого момента.
Enter extendr
, проект, который позволяет соединить R
и Rust
и с легкостью интегрировать Rust
код в пакеты R
, одновременно предоставляя возможность хостить R
сессию в Rust
. extendr
находится в разработке довольно давно (больше полугода активной фазы) и представляет собой MVP (minimum viable product), но до сих пор был обделен вниманием. Rust
-крейт уже какое-то время доступен на crates.io
, а R
-пакет ожидает проверки на CRAN
.
extendr
- отличный способ наладить взаимодействие между разработчиками, пишущими на Rust
и R
. Если вы знаете один из языков и хотели бы познакомиться со вторым, или же хотите портировать свои R
-пакеты с проблематичных C
/ C++
на модный Rust
, добро пожаловать под cut.