Rust без спешки

Короткие заметки о языке, в котором компилятор спорит с вами до запуска программы, а не после.

Rust — компилируемый язык системного уровня. От C и C++ он взял скорость и контроль над памятью, но отказался от их главной беды: целый класс ошибок — обращение к освобождённой памяти, двойное освобождение, гонки данных — здесь не доживает до запуска. Сборщика мусора при этом нет: за памятью следит система владения, и вся проверка происходит во время компиляции.

use std::collections::HashMap;

fn main() {
    let text = "не имей сто рублей а имей сто друзей";
    let mut counts: HashMap<&str, u32> = HashMap::new();

    for word in text.split_whitespace() {
        *counts.entry(word).or_insert(0) += 1;
    }

    // «имей» и «сто» встретятся по два раза
    println!("{counts:?}");
}

Заметки

С чего начать

  1. Поставьте инструменты через rustup — он установит компилятор rustc, менеджер пакетов cargo и будет обновлять их одной командой rustup update.
  2. Создайте проект: cargo new hello, зайдите в каталог и выполните cargo run.
  3. Читайте «The Rust Programming Language» — её называют просто «книгой». Есть перевод на русский, а сама книга открывается локально командой rustup doc --book.
  4. Параллельно решайте упражнения Rustlings: маленькие задачи, где нужно починить код, чтобы он скомпилировался.

Первые недели компилятор будет отклонять код, который в другом языке «просто работал бы». Это нормально. Читайте сообщения об ошибках целиком: в Rust они на редкость подробные и чаще всего сразу подсказывают исправление.

Где Rust уместен

Для одноразового скрипта на двадцать строк Rust обычно избыточен, и в этом нет ничего страшного: у каждого инструмента своя работа.