Rust добавил glob-импорты, библиотечные крейты и поддержку множественных бинарников в одном проекте. Эти возможности упрощают архитектуру крупных приложений и меняют подход к структуре кода.
Glob-импорты: от явности к удобству
Оператор glob (*) импортирует все элементы модуля одной строкой. Для языка, где каждый импорт обычно указывается явно, это серьёзное упрощение.
// Импорт всех коллекций сразу
use std::collections::*;
fn example_glob() {
let mut map = HashMap::new();
map.insert("key", "value");
}Экономит время, но в больших проектах может затруднить понимание происхождения типов.
Библиотечные крейты для переиспользования
Library crate меняет мышление — вместо программы создаёте переиспользуемую логику для других частей проекта.
// src/lib.rs
pub fn greet(name: &str) -> String {
format!("Hello, {}", name)
}
pub fn farewell(name: &str) -> String {
format!("Goodbye, {}", name)
}Заставляет думать о публичных API и совместимости версий — ключевые навыки системной разработки.
Множественные точки входа
Rust поддерживает несколько бинарных крейтов в одном проекте — каждый с отдельной функцией main(). Подходит для CLI с подкомандами или микросервисов с общей бизнес-логикой.
// src/main.rs
use my_library::greet;
fn main() {
println!("{}", greet("Rust"));
}
// src/bin/other_tool.rs
fn main() {
println!("Отдельный инструмент в том же проекте");
}В отличие от других языков, где множественные main-пакеты требуют отдельных директорий, Rust интегрирует функциональность в workspace.
Что меняется для разработчиков
Эти инструменты превращают Rust в платформу системного дизайна. Разработчики думают об архитектуре с первых строк, а не рефакторят при росте сложности.
Ownership + enum'ы + модули + крейты создают целостную экосистему. Следующий шаг — cargo workspaces для управления зависимостями в enterprise-проектах.


