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

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

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

Начать курс

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

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

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

Стандартная библиотека Rust включает в себя множество модулей, покрывающих практически все аспекты разработки. Рассмотрим ключевые из них:

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

Работа с коллекциями (std::collections)

Модуль std::collections предоставляет эффективные структуры данных. Самая популярная — Vec<T> (динамический массив). Также часто используются HashMap<K, V> для хранения пар ключ-значение и HashSet<T> для уникальных элементов.

use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // Доступ по ключу
    match scores.get(&"Blue".to_string()) {
        Some(score) => println!("Score: {}", score),
        None => println!("No score found"),
    }
}

Ввод-вывод и работа с файлами (std::io и std::fs)

Модули std::io и std::fs позволяют читать и записывать файлы, работать с консольным вводом/выводом. Rust гарантирует безопасную работу с файлами благодаря системе владения.

use std::fs::File;
use std::io::{BufRead, BufReader, Write};

fn main() -> std::io::Result<()> {
    // Запись в файл
    let mut file = File::create("example.txt")?;
    file.write_all(b"Hello, Rust!")?;

    // Чтение файла построчно
    let file = File::open("example.txt")?;
    let reader = BufReader::new(file);
    for line in reader.lines() {
        println!("{}", line?);
    }
    Ok(())
}

Многопоточность (std::thread)

Rust предоставляет безопасную модель многопоточности через модуль std::thread. Компилятор предотвращает гонки данных на этапе компиляции благодаря правилам владения и заимствования.

use std::thread;
use std::time::Duration;

fn main() {
    let handle = thread::spawn(|| {
        for i in 1..5 {
            println!("Поток: {}", i);
            thread::sleep(Duration::from_millis(100));
        }
    });

    for i in 1..3 {
        println!("Главный поток: {}", i);
        thread::sleep(Duration::from_millis(50));
    }

    handle.join().unwrap();
}

Синхронизация (std::sync)

Для безопасного обмена данными между потоками используются примитивы из std::sync: Mutex (взаимное исключение), Arc (атомарный счётчик ссылок) и Barrier (барьер синхронизации).

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Результат: {}", *counter.lock().unwrap());
}

Работа с ошибками (std::error)

Модуль std::error определяет трейт Error, который позволяет единообразно обрабатывать ошибки. В Rust принято возвращать тип Result<T, E> из

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