ra-jit: ускорение инкрементальных сборок Rust до 92 раз быстрее

ra-jit — инструмент для ускорения инкрементальных сборок Rust, который делает их в 10-92 раз быстрее по сравнению с cargo. Он работает рядом с cargo, компилируя изменённые функции проекта в памяти и позволяя запущенному приложению динамически подхватывать новые версии кода.

Если у тебя есть крупный проект на Rust, который часто требует компиляции, ra-jit может значительно сократить время на сборку после изменений. Он демонстрирует высокую эффективность на различных проектах, таких как ripgrep и nushell, и может быть полезен для команд, стремящихся повысить продуктивность разработки.

Однако ra-jit имеет несколько ограничений: его можно использовать только с Rust версии 1.99.0, а поддерживаются только macOS на Apple Silicon и Linux на x86-64 или ARM64. На других платформах, включая Intel Macs и Windows, инструмент не работает как нужно, передавая сборку cargo. Также важно учесть, что ra-jit требует достаточно оперативной памяти для работы.

Проект ra-jit предназначен для ускорения процесса сборки проектов на Rust. Суть его работы заключается в том, что он держит скомпилированные части проекта в памяти и, после внесения изменений, компилирует только те функции, которые были изменены. Таким образом, время сборки после правок составит всего несколько миллисекунд, что значительно быстрее, чем обычная инкрементальная сборка с помощью cargo.

Преимущества ra-jit были продемонстрированы на реальных проектах, таких как ripgrep, nushell, helix и bun, где были получены следующие результаты:

  • до 10× быстрее на macOS (ARM64);
  • до 24× быстрее на Linux (ARM64);
  • до 12× быстрее на Linux (x86-64).

Как установить и запустить

Для использования тобе потребуется:

  • Rust 1.99.0 с его исходным кодом (компонент rust-src).
  • Система macOS с Apple Silicon или Linux (x86-64 или ARM64).
  • Достаточно свободной оперативной памяти.

Чтобы установить ra-jit, выполни следующие команды:

rustup toolchain install 1.99.0 --component rust-src
cargo +1.99.0 install --locked ra-jit

Затем перейди в папку своего проекта и запусти ra-jit:

cd my-project
rustup override set 1.99.0
cargo ra-jit run

Использование в проекте

После установки ты можешь начать использовать ra-jit. Для первого запуска потребуется немного времени, пока ra-jit загрузит твой проект:

cargo ra-jit build

После завершения загрузки ты сможешь вносить изменения в код, и сборка будет выполняться быстрее с помощью ra-jit:

cargo ra-jit build

Здесь "[ra-jit]" в выводе указывает на то, что сборка выполнена именно ra-jit.

Ограничения

На данный момент ra-jit имеет ряд ограничений:

  • Поддерживаются только macOS с Apple Silicon и Linux (x86-64 и ARM64).
  • Необходимо использовать только Rust 1.99.0.
  • Некоторые сборки могут выполняться с использованием cargo вместо ra-jit.
  • В проекте должен использоваться достаточный объем памяти.

Как это работает

ra-jit использует rust-analyzer для анализа и компилирует функции с помощью Cranelift. После внесения изменений компилируются только измененные функции, что существенно сокращает время сборки. Это связано с тем, что заново связывается только измененный код, а не выполняется полная пересборка проекта.

Если ты хочешь использовать ra-jit для разработки, следует также обратиться к документам, доступным в репозитории проекта, чтобы узнать о других возможностях и деталях.

Открыть на GitHub: indexable-inc/ra-jit →

Что нового на GitHub — короткие обзоры на русском Новые обзоры приходят в Telegram. Без спама, по делу.
Подписаться

Похожие статьи

Популярные темы на сайте