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:?}");
}
Заметки
-
Владение и заимствование
Три правила, на которых держится безопасность памяти, и как перестать воевать с проверкой заимствований.
-
Обработка ошибок
Option,Resultи оператор?: почему в Rust нет исключений и чем это удобно. -
Шпаргалка по Cargo
Команды на каждый день: сборка, тесты, зависимости, форматирование и линтер.
С чего начать
- Поставьте инструменты через
rustup— он установит компиляторrustc, менеджер пакетовcargoи будет обновлять их одной командойrustup update. - Создайте проект:
cargo new hello, зайдите в каталог и выполнитеcargo run. - Читайте «The Rust Programming Language» — её называют просто «книгой». Есть перевод на русский, а сама книга открывается локально командой
rustup doc --book. - Параллельно решайте упражнения Rustlings: маленькие задачи, где нужно починить код, чтобы он скомпилировался.
Первые недели компилятор будет отклонять код, который в другом языке «просто работал бы». Это нормально. Читайте сообщения об ошибках целиком: в Rust они на редкость подробные и чаще всего сразу подсказывают исправление.
Где Rust уместен
- сетевые сервисы и утилиты командной строки, где важны скорость и предсказуемое потребление памяти;
- встраиваемые системы и код без стандартной библиотеки (
no_std); - модули для других языков: расширения для Python, WebAssembly для браузера;
- системные компоненты — драйверы, части ядра, движки баз данных.
Для одноразового скрипта на двадцать строк Rust обычно избыточен, и в этом нет ничего страшного: у каждого инструмента своя работа.