Стандартная библиотека Rust: полный обзор для разработчиков

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Стандартная библиотека Rust: полный обзор

Стандартная библиотека Rust (std) — это фундамент, на котором строится любое приложение на этом языке. Она предоставляет набор надёжных, эффективных и безопасных инструментов для решения типовых задач, от работы с коллекциями до низкоуровневого управления памятью. В отличие от многих других языков, стандартная библиотека Rust спроектирована так, чтобы минимизировать зависимость от внешних крейтов (crates) для базовых операций, сохраняя при этом производительность, близкую к C/C++.

Основные модули стандартной библиотеки

Стандартная библиотека организована в логические модули. Рассмотрим ключевые из них:

  • std::collections — структуры данных: Vec, HashMap, HashSet, BTreeMap, LinkedList и другие.
  • std::io — работа с вводом-выводом: чтение/запись файлов, работа с потоками, буферизация.
  • std::fs — файловая система: создание, удаление, копирование файлов и директорий.
  • std::thread — многопоточность: создание потоков, синхронизация через Mutex, Arc.
  • std::sync — примитивы синхронизации: каналы (mpsc), барьеры, семафоры.
  • std::net — сетевое программирование: TCP/UDP сокеты, адреса.
  • std::time — работа со временем: замеры, таймеры, длительности.
  • std::mem — управление памятью: размеры типов, выравнивание, swap, replace.

Коллекции: от Vec до HashMap

Коллекции в Rust — это не просто контейнеры. Они реализуют богатый API и гарантируют безопасность памяти на этапе компиляции. Самой популярной коллекцией является Vec<T> — динамический массив.

fn main() {
    let mut numbers: Vec<i32> = vec![1, 2, 3, 4];
    numbers.push(5);
    
    // Итерация с изменением
    for num in &mut numbers {
        *num *= 2;
    }
    
    // Фильтрация
    let evens: Vec<&i32> = numbers.iter()
        .filter(|&&x| x % 2 == 0)
        .collect();
    
    println!("{:?}", evens); // [2, 4, 6, 8, 10]
}

HashMap — ассоциативный массив с хешированием. Важно отметить, что по умолчанию используется криптостойкий хеш-алгоритм (SipHash), что предотвращает атаки типа HashDoS.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Alice"), 100);
    scores.insert(String::from("Bob"), 85);
    
    // Безопасное получение значения
    match scores.get(&String::from("Alice")) {
        Some(score) => println!("Score: {}", score),
        None => println!("Not found"),
    }
    
    // Обход с итератором
    for (name, score) in &scores {
        println!("{}: {}", name, score);
    }
}

Работа с вводом-выводом и файлами

Модуль std::io предоставляет как высокоуровневые, так и низкоуровневые средства для работы с потоками данных. Особого внимания заслуживает типаж Read и Write.

use std::fs::File;
use std::io::{self, Read, Write};

fn read_file(path: &str) -> io::Result<String> {
    let mut file = File::open(path)?;
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;
    Ok(contents)
}

fn write_file(path: &str, data: &str) -> io::Result<()> {
    let mut file = File::create(path)?;
    file.write_all(data.as_bytes())?;
    Ok(())
}

fn main() -> io::Result<()> {
    write_file("example.txt", "Hello, Rust!")?;
    let content = read_file("example.txt")?;
    println!("{}", content);
    Ok(())
}

Многопоточность: безопасная работа с потоками

Одно из главных преимуществ Rust — гарантия отсутствия гонок данных (data races) на этапе компиляции. Стандартная библиотека предоставляет все необходимые прими

Рекомендаций