Введение в Rust
Что такое Rust?
Заголовок раздела «Что такое Rust?»Rust — это язык системного программирования, то есть язык для тех же задач, что C или C++: операционные системы, игровые движки, браузеры, базы данных и консольные утилиты, где важны скорость и контроль.
Его особенность в том, что он даёт такую же низкоуровневую производительность, но без классических способов выстрелить себе в ногу. В C легко случайно прочитать уже освобождённую память или устроить гонку данных. В Rust такой код обычно даже не скомпилируется — компилятор остановит тебя ещё на этапе сборки.
Rust начинался как личный проект Грейдона Хоара, который позже привёл его в Mozilla, где проект получил поддержку. Стабильная версия 1.0 вышла в 2015 году. Сейчас язык развивают Rust Foundation (на английском) и большое open-source сообщество.
Какую проблему решает Rust
Заголовок раздела «Какую проблему решает Rust»Исторически приходилось выбирать одно из двух:
- Низкоуровневые языки (C, C++): быстрые и близкие к железу, но память управляется вручную. Ошибки ведут к падениям и дырам в безопасности.
- Высокоуровневые языки (Python, Java, Go): безопасные и удобные, но они опираются на сборщик мусора, а это стоит производительности и предсказуемости.
Главная идея Rust — третий путь: он гарантирует безопасность памяти на этапе компиляции с помощью системы владения (ownership), с которой ты познакомишься позже в этом курсе. Никакого сборщика мусора и никаких ручных free() — компилятор сам понимает, когда память больше не нужна.
Как Rust выглядит на фоне других языков
Заголовок раздела «Как Rust выглядит на фоне других языков»Примерная карта того, где Rust находится рядом с языками, которые ты, возможно, знаешь:
| Язык | Скорость | Безопасность памяти | Сборщик мусора |
|---|---|---|---|
| C / C++ | Высокая | Вручную, легко ошибиться | Нет |
| Go | Хорошая | Безопасно | Да |
| Python | Ниже | Безопасно | Да |
| Rust | Высокая | Безопасно (проверяется при компиляции) | Нет |
Вывод: Rust стремится к скорости уровня C и к безопасности высокоуровневых языков одновременно. Подробное сравнение на настоящем коде — в уроке Rust против C++, Go и Python.
Где используется Rust
Заголовок раздела «Где используется Rust»Скорее всего, ты уже пользуешься программами на 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?
Заголовок раздела «Сложно ли выучить Rust?»Честный ответ: первая неделя-другая может раздражать. Такие понятия, как владение и заимствование, действительно новые, а компилятор будет отвергать код, который, как тебе кажется, должен работать. Но это сопротивление — компилятор учит тебя писать более безопасный код, и всё встаёт на свои места быстрее, чем ожидает большинство.
Этот курс построен так, чтобы сгладить этот путь: маленькие шаги, настоящие примеры и кнопка «Попробуй сам» у каждого из них.
Практика
Заголовок раздела «Практика»1. Поздоровайся с собой
Заголовок раздела «1. Поздоровайся с собой»Измени программу из раздела «Попробуем на вкус» так, чтобы она приветствовала тебя по имени, и добавь вторую строку Добро пожаловать в Rust!. Подсказка: каждый println! печатает одну строку, поэтому понадобятся два.
Показать решение
fn main() { let name = "Саша"; println!("Привет, {name}!"); println!("Добро пожаловать в Rust!");}Вывод:
Привет, Саша!Добро пожаловать в Rust!2. Факт о Rust
Заголовок раздела «2. Факт о 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 и его мейнтейнеров.