Перейти к содержимому

Введение в Rust

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

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

Rust начинался как личный проект Грейдона Хоара, который позже привёл его в Mozilla, где проект получил поддержку. Стабильная версия 1.0 вышла в 2015 году. Сейчас язык развивают Rust Foundation (на английском) и большое open-source сообщество.

Исторически приходилось выбирать одно из двух:

  • Низкоуровневые языки (C, C++): быстрые и близкие к железу, но память управляется вручную. Ошибки ведут к падениям и дырам в безопасности.
  • Высокоуровневые языки (Python, Java, Go): безопасные и удобные, но они опираются на сборщик мусора, а это стоит производительности и предсказуемости.

Главная идея Rust — третий путь: он гарантирует безопасность памяти на этапе компиляции с помощью системы владения (ownership), с которой ты познакомишься позже в этом курсе. Никакого сборщика мусора и никаких ручных free() — компилятор сам понимает, когда память больше не нужна.

Примерная карта того, где Rust находится рядом с языками, которые ты, возможно, знаешь:

Язык Скорость Безопасность памяти Сборщик мусора
C / C++ Высокая Вручную, легко ошибиться Нет
Go Хорошая Безопасно Да
Python Ниже Безопасно Да
Rust Высокая Безопасно (проверяется при компиляции) Нет

Вывод: Rust стремится к скорости уровня C и к безопасности высокоуровневых языков одновременно. Подробное сравнение на настоящем коде — в уроке Rust против C++, Go и Python.

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

  • Firefox — части его движка отрисовки написаны на Rust
  • Cloudflare и Discord — серверные сервисы, где важна производительность
  • Ядро Linux — теперь принимает драйверы, написанные на Rust
  • Консольные утилиты — быстрые любимцы разработчиков вроде ripgrep, bat и fd
  • WebAssembly — Rust один из лучших вариантов, чтобы запускать код с нативной скоростью в браузере

Пока не нужно понимать каждую деталь — просто обрати внимание, насколько это читается:

fn main() {
let name = "Rustacean";
println!("Привет, {name}!");
}

Вывод:

Привет, Rustacean!
▶ Попробуй сам

«Безопасность памяти» звучит абстрактно, поэтому вот конкретный случай. Допустим, у тебя есть список из трёх результатов, и ты просишь десятый, которого нет.

В C это разрешено. Программа молча прочитает то, что случайно лежит в памяти после твоего списка. Ты можешь получить случайное число, падение программы или дыру в безопасности — и ничто тебя не предупредит.

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

fn main() {
let scores = [90, 85, 77];
println!("{}", scores[9]);
}
error: this operation will panic at runtime
--> src/main.rs:3:20
|
3 | println!("{}", scores[9]);
| ^^^^^^^^^ index out of bounds: the length is 3 but the index is 9

Компилятор говорит, что эта операция вызовет панику во время работы: индекс выходит за границы — длина 3, а индекс 9.

А когда ты не уверен, что элемент существует, Rust даёт вежливый способ спросить. .get() отвечает «вот он» или «здесь ничего нет» (None), вместо того чтобы подсунуть мусор:

fn main() {
let scores = [90, 85, 77];
println!("первый результат: {}", scores[0]);
println!("десятый результат: {:?}", scores.get(9));
}

Вывод:

первый результат: 90
десятый результат: None
▶ Попробуй сам

Пока не беспокойся о [...], .get() и None. Ты как следует разберёшь их в уроках Массивы и Option. Сейчас важно другое: целый класс ошибок вида «прочитал память, которую нельзя было читать» либо ловится до запуска программы, либо безопасно обрабатывается во время её работы.

Честный ответ: первая неделя-другая может раздражать. Такие понятия, как владение и заимствование, действительно новые, а компилятор будет отвергать код, который, как тебе кажется, должен работать. Но это сопротивление — компилятор учит тебя писать более безопасный код, и всё встаёт на свои места быстрее, чем ожидает большинство.

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

Измени программу из раздела «Попробуем на вкус» так, чтобы она приветствовала тебя по имени, и добавь вторую строку Добро пожаловать в Rust!. Подсказка: каждый println! печатает одну строку, поэтому понадобятся два.

Показать решение
fn main() {
let name = "Саша";
println!("Привет, {name}!");
println!("Добро пожаловать в Rust!");
}

Вывод:

Привет, Саша!
Добро пожаловать в Rust!
▶ Попробуй сам

Сохрани слово Rust и год 2015 под двумя именами, а затем выведи предложение Rust 1.0 вышел в 2015 году., используя оба. Подсказка: внутри одного println! можно использовать несколько {name}.

Показать решение
fn main() {
let language = "Rust";
let year = 2015;
println!("{language} 1.0 вышел в {year} году.");
}

Вывод:

Rust 1.0 вышел в 2015 году.
▶ Попробуй сам
  • Rust — быстрый и безопасный системный язык: скорость уровня C без сборщика мусора.
  • Он предотвращает ошибки работы с памятью на этапе компиляции благодаря владению.
  • Его используют в браузерах, ядрах ОС, облачных сервисах, консольных утилитах и WebAssembly.
  • Порог входа реальный, но преодолевается быстро — компилятор на твоей стороне.

Дальше: установим Rust и запустим первую программу на твоём компьютере.

Проверь себя

1. Как Rust обеспечивает безопасность памяти без сборщика мусора?

2. Что, судя по таблице сравнения, общего у Rust и Go?

3. Как называют себя разработчики на Rust?

Результат: 0 / 3

  • Введение — книга «Язык программирования Rust»: для кого написана официальная книга и как она устроена (перевод на русский). Лучший бесплатный спутник этого курса.
  • rust-lang.org: официальный сайт с ответом на вопрос «Почему Rust?» (производительность, надёжность, продуктивность) и историями компаний, которые его используют.
  • Изучить Rust: официальный список учебных материалов, включая Rust на примерах и упражнения Rustlings.
  • Announcing Rust 1.0 — Rust Blog (на английском): пост 2015 года, в котором Rust объявили стабильным, и что «стабильность» обещает твоему коду.
  • Rust Foundation (на английском): некоммерческая организация, которая поддерживает проект Rust и его мейнтейнеров.