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 →
RepoRadar