- Рассказывать, как появился Rust и где он применяется
- Сравнивать три подхода к управлению памятью: ручной, сборщик мусора и владение
- Устанавливать Rust через rustup и пользоваться командами
cargo new,cargo runиcargo build - Выводить текст и переменные с помощью макроса
println!
Представь язык, который работает так же быстро, как C++, но не даёт ошибиться при работе с памятью: ошибку находит сам компилятор ещё до того, как программа упадёт. Инженеры Microsoft и Google сообщали, что около 70% серьёзных уязвимостей в их продуктах вызваны ошибками работы с памятью. Rust создан именно для решения этой проблемы и сегодня входит в число самых любимых языков программирования.
Коротко о Rust
Rust — язык системного программирования: код компилируется прямо в машинный код, без виртуальной машины и интерпретатора. У него три главных обещания: скорость (на уровне C и C++), безопасность памяти (висячие указатели, двойное освобождение памяти и гонки данных обнаруживаются при компиляции) и продуктивность (инструмент Cargo, понятные сообщения об ошибках и сильная система типов).
- 2006Личный проект
Сотрудник Mozilla Грейдон Хоар начинает работать над Rust как над личным проектом.
- 2009Поддержка Mozilla
Mozilla начинает официально спонсировать проект и развивает его для браузерных технологий.
- 2015Rust 1.0
В мае выходит первая стабильная версия. С тех пор новая версия выходит каждые 6 недель.
- 2021Rust Foundation
AWS, Google, Huawei, Microsoft и Mozilla создают независимый фонд для поддержки языка.
- 2022В ядре Linux
В Linux 6.1 появляется начальная поддержка драйверов на Rust.
Где используется Rust?
- Операционные системы — драйверы ядра Linux, некоторые компоненты Windows и новые части Android.
- Браузеры — ряд частей Firefox, например движок Stylo, который вычисляет CSS-стили.
- WebAssembly — код на Rust компилируется в WebAssembly и работает в браузере почти со скоростью машинного кода.
- Утилиты командной строки — быстрые инструменты вроде
ripgrep,fdиbat; поиск в редакторе VS Code работает именно наripgrep. - Серверы и облака — виртуальные машины AWS Firecracker, высоконагруженные сервисы Cloudflare и Discord.
Безопасность памяти без сборщика мусора
Любая программа во время работы выделяет память и потом должна её вернуть. В C и C++ это делает программист вручную, и ошибка приводит к падению программы или к уязвимости. В Java, Python и Go сборщик мусора (garbage collector) в фоновом режиме убирает неиспользуемую память, но это стоит дополнительной памяти и времени. Rust выбрал третий путь — правила владения. Компилятор отслеживает, кому принадлежит каждое значение, и сам освобождает память ровно в нужный момент.
| Подход | Языки | Плюс | Минус |
|---|---|---|---|
| Ручное управление | C, C++ | максимальная скорость и контроль | утечки, висячие указатели |
| Сборщик мусора | Java, C#, Python, Go | удобно и безопасно | паузы, лишняя память |
| Владение и проверка заимствований | Rust | и скорость, и безопасность | поначалу сложнее учить |
Установка через rustup
- 1Скачай установщик
В Windows скачай
rustup-init.exeс сайтаrustup.rsи запусти его. В macOS и Linux выполни в терминале командуcurl, показанную ниже. - 2Инструменты C++ в Windows
В Windows для Rust нужен пакет Microsoft Visual Studio C++ Build Tools. Установщик сам предложит его поставить — соглашайся на стандартные параметры.
- 3Проверь установку
Открой новый терминал и введи
rustc --versionиcargo --version. Обе команды должны показать номер версии. - 4Периодически обновляй
Команда
rustup updateобновляет Rust до последней стабильной версии.
# macOS / Linux
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# any OS: check the tools
rustc --version
cargo --versionrustc), Cargo, форматировщик rustfmt, анализатор clippy и документацию стандартной библиотеки.Первый проект с Cargo
Cargo — официальный инструмент сборки и менеджер пакетов Rust: он создаёт проекты, компилирует код, запускает программы и тесты, скачивает библиотеки. Новый проект создаёт команда cargo new:
cargo new hello
cd hello
cargo runhello/
├── Cargo.toml
├── .gitignore
└── src/
└── main.rsCargo.toml хранит имя, версию и зависимости проекта, а код находится в файле src/main.rs. Cargo также создаёт git-репозиторий.[package]
name = "hello"
version = "0.1.0"
edition = "2024"
[dependencies]edition — редакция языка (2015, 2018, 2021, 2024). Новые проекты получают последнюю; код этого курса работает и в редакции 2021, и в 2024.fn main() {
println!("Hello, world!");
}Hello, world!
fn main()— точка входа: выполнение программы начинается здесь.println!— не функция, а макрос: в Rust макросы узнают по знаку!в конце имени.- Текст пишется в двойных кавычках, а инструкция заканчивается
;. Для отступа используют 4 пробела.
$ cargo run
Compiling hello v0.1.0 (/home/aysel/hello)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.61s
Running `target/debug/hello`
Hello, world!cargo run сначала компилирует код (в папку target/debug), а затем запускает программу. Время на каждом компьютере будет своим.Вывод переменных
В тексте println! пара {} — это заполнитель: вместо неё подставляется значение, указанное после запятой. Имя переменной можно написать прямо внутри скобок: {name}. Переменные создаются ключевым словом let — подробнее об этом в следующем уроке.
fn main() {
let name = "Aysel";
let year = 2015;
println!("Hello, {name}!");
println!("Rust 1.0 was released in {}.", year);
println!("{} + {} = {}", 2, 3, 2 + 3);
}Hello, Aysel! Rust 1.0 was released in 2015. 2 + 3 = 5
| Команда | Что делает |
|---|---|
cargo new name | создаёт новый проект |
cargo run | компилирует и запускает |
cargo build | собирает в target/debug |
cargo build --release | собирает оптимизированную версию в target/release |
cargo check | только проверяет ошибки, не создавая файл, — самая быстрая |
cargo fmt | форматирует код в официальном стиле |
cargo clippy | анализирует код и даёт советы |
fn main() {
let name = 'Aysel';
println("Hello, {name}!");
}fn main() {
let name = "Aysel";
println!("Hello, {name}!");
}char), а текст пишется в двойных. Вызов println без ! даёт ошибку E0423, и компилятор подсказывает написать println!.Главное
- Rust — компилируемый системный язык, сочетающий скорость, безопасность памяти и продуктивность.
- В Rust нет сборщика мусора: памятью управляют правила владения, которые проверяет компилятор.
- rustup устанавливает и обновляет Rust; Cargo создаёт, собирает и запускает проекты и скачивает библиотеки.
println!— макрос; заполнители{}или{name}подставляют значения в текст.- Когда важна скорость, собирай оптимизированную версию через
cargo build --release.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.