Узнайте о рабочих пространствах Rust: инструменте для организации и создания сложных проектов с несколькими ящиками, позволяющем совместно использовать код и упрощающем сборку/тестирование.
Что такое рабочие области Rust?
Рабочие области Rust — это способ организовать несколько ящиков Rust в рамках одного проекта. Они позволяют разработчикам управлять несколькими ящиками как единым блоком, упрощая сборку, тестирование и распространение сложных проектов. Рабочая область Rust — это каталог, содержащий файл Cargo.toml, который используется для определения крейтов, составляющих рабочую область, и их зависимостей.
Cargo — это менеджер пакетов и инструмент сборки Rust, который используется для управления и сборки рабочих областей Rust. Когда вы запускаете команду типа cargo build
или cargo test
в рабочей области, Cargo автоматически создает все ящики в рабочей области с учетом их зависимостей. Это означает, что вы можете создавать и тестировать все свои крейты с помощью одной команды, а не запускать отдельные команды для каждого крейта.
Одним из основных преимуществ использования рабочих пространств Rust является то, что они позволяют вам обмениваться кодом между крейтами. Например, если у вас есть общая библиотека, которую вы хотите использовать в нескольких крейтах, вы можете поместить ее в отдельный крейт, а затем включить в качестве зависимости в каждый из других крейтов. Это помогает уменьшить дублирование и упрощает поддержку и обновление кода.
Чтобы запустить команду cargo
для определенного пакета, вы можете использовать аргумент --package PACKAGE_NAME
. Например:
cargo build --package my_package
Это создаст крейт my_package
в рабочей области.
Как использовать рабочие пространства Rust
Чтобы создать рабочее пространство Rust, вам сначала нужно создать новый каталог, а затем создать в нем файл Cargo.toml. Вы можете сделать это вручную или использовать команду cargo new
, которая создаст новую рабочую область с базовым файлом Cargo.toml.
После того, как вы создали свое рабочее пространство, вы можете добавить в него дополнительные ящики, создав новые каталоги внутри рабочего пространства и используя команду cargo new
для создания нового ящика в каждом каталоге. Каждый крейт будет иметь свой собственный файл Cargo.toml, который можно использовать для определения его зависимостей и конфигурации сборки.
Чтобы создать и протестировать рабочее пространство, вы можете использовать команды cargo build
и cargo test
соответственно. Эти команды создадут и протестируют все ящики в рабочей области с учетом их зависимостей.
Если вы хотите использовать ящик из другого ящика в своей рабочей области, вы можете добавить его в качестве зависимости в файле Cargo.toml ящика, который зависит от него. Например, если в вашей рабочей области есть ящик с именем «общий» и другой ящик с именем «приложение», вы можете добавить «общий» в качестве зависимости в файле Cargo.toml «приложения» следующим образом:
[dependencies] common = { path = "../common" }
Это скажет Cargo создать и связать «общий» ящик при создании и тестировании ящика «приложения».
Теперь вы можете использовать функции и типы из «общего» крейта в своем коде, импортировав их с ключевым словом use
, за которым следует путь к библиотеке. Например, если в вашем «общем» ящике есть функция под названием «foo», вы можете использовать ее в своем коде следующим образом:
use common::foo; fn main() { foo(); }
Это вызовет функцию «foo» из «общего» ящика.
Заключение
Таким образом, рабочие области Rust — это мощный инструмент для организации и создания сложных проектов, состоящих из нескольких ящиков. Они позволяют вам управлять несколькими крейтами как единым блоком, совместно использовать код между крейтами, а также создавать и тестировать все ваши крейты с помощью одной команды. Используя рабочие пространства Rust, вы можете улучшить ремонтопригодность и масштабируемость ваших проектов, а также упростить сотрудничество с другими разработчиками.
Хотите связаться?
Если вы хотите связаться со мной, пожалуйста, напишите мне в LinkedIn.
Кроме того, не стесняйтесь проверить мои книжные рекомендации 📚.