Модули стандартной библиотеки 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;       // Но так проще
}