Модули стандартной библиотеки Rust
Общее понятие
Модули в стандартной библиотеке Rust — это организационные единицы, которые группируют связанную функциональность, типы, трейты и константы. Они образуют иерархическую структуру, которая помогает организовать код логичным и удобным для использования способом.
Структура модулей
Стандартная библиотека (std) организована в виде дерева модулей, где корневым является псевдомодуль std:
std/
├── collections/ // Коллекции данных
├── io/ // Ввод-вывод
├── fs/ // Файловая система
├── net/ // Сетевое программирование
├── thread/ // Многопоточность
├── sync/ // Синхронизация
├── convert/ // Преобразования типов
├── option/ // Работа с Option
├── result/ // Работа с Result
└── ... и многие другие
Назначение модулей
Организация кода
Каждый модуль содержит логически связанную функциональность:
std::collections— структуры данных (HashMap, Vec, String)std::io— операции ввода-выводаstd::thread— многопоточное программирование
Сокрытие реализации
Модули позволяют скрывать внутренние детали реализации, предоставляя только публичный API:
#![allow(unused)] fn main() { // Внутренние структуры могут быть скрыты mod internal { pub(crate) struct InternalData; pub struct PublicInterface { // публичные поля } } }
Управление областью видимости
Модули контролируют видимость элементов через модификаторы доступа:
pub— публичная видимостьpub(crate)— видимость в пределах крейтаpub(super)— видимость в родительском модуле
Использование модулей
Импорт функциональности
#![allow(unused)] fn main() { use std::collections::HashMap; use std::io::{Read, Write}; use std::fs::File; }
Квалифицированный доступ
#![allow(unused)] fn main() { let map = std::collections::HashMap::new(); let file = std::fs::File::open("file.txt"); }
Основные категории модулей
Базовые типы и операции
primitive— примитивные типыconvert— преобразования типовops— перегрузка операторов
Структуры данных
collections— коллекцииstring— работа со строкамиvec— векторы
Системное программирование
io— ввод-выводfs— файловая системаnet— сетевое программированиеprocess— управление процессами
Многопоточность
thread— потоки выполненияsync— примитивы синхронизации
Утилиты
fmt— форматированиеdefault— значения по умолчаниюclone— клонирование
Практическое использование
Минимальные импорты
#![allow(unused)] fn main() { // Вместо использования всего std use std::collections::HashMap; use std::io::Result; }
Re-export для удобства
Некоторые типы реэкспортируются на верхнем уровне:
#![allow(unused)] fn main() { // Vec доступен напрямую из std use std::vec::Vec; // Так тоже можно use std::Vec; // Но так проще }