# Основы языка программирования Rust
Table of Contents
Основы языка программирования Rust
Введение в Rust
Rust — это современный язык системного программирования, созданный для обеспечения безопасности, скорости и параллелизма. Разработанный в Mozilla, он сочетает низкоуровневый контроль над памятью с высокоуровневыми абстракциями, что делает его идеальным для задач, где важны производительность и надежность.
Ключевые особенности Rust:
- Безопасность памяти без использования сборщика мусора.
- Система владения (ownership) для управления ресурсами.
- Статическая типизация с выводом типов.
- Алгебраические типы данных (например,
OptionиResult). - Многопоточность без гонок данных благодаря строгим правилам времени жизни и заимствования.
Rust популярен в системном программировании, разработке веб-ассембли, embedded-системах и инструментах командной строки.
Установка и настройка
- Установите Rust через rustup:
Terminal window curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - Проверьте установку:
Terminal window rustc --versioncargo --versioncargo— это менеджер пакетов и системы сборки Rust.
Синтаксис и базовые концепции
1. Переменные и изменяемость
- Переменные по умолчанию неизменяемы.
- Используйте
mutдля изменяемых переменных.let x = 5; // Неизменяемаяlet mut y = 10; // Изменяемаяy = 15; // OK// x = 7; // Ошибка компиляции!
2. Типы данных
- Скалярные типы:
i32,u64,f64,bool,char. - Составные типы: кортежи, массивы.
let tuple: (i32, f64, char) = (42, 3.14, 'R');let arr: [i32; 3] = [1, 2, 3];
3. Функции
- Используйте
fnдля объявления. - Возвращаемое значение указывается после
->.fn add(a: i32, b: i32) -> i32 {a + b // Нет точки с запятой — это выражение возвращает значение}
4. Управление потоком
- Условные операторы:
let number = 7;if number < 5 {println!("Меньше 5");} else {println!("Больше или равно 5");}
- Циклы:
for i in 1..5 { // Диапазон 1-4println!("{}", i);}let mut count = 0;loop {count += 1;if count == 3 { break; }}
Система владения (Ownership)
Владение — уникальная особенность Rust, гарантирующая безопасность памяти.
Правила владения:
- У каждого значения есть владелец (переменная).
- Только один владелец в каждый момент времени.
- При выходе владельца из области видимости, значение удаляется.
Пример:
let s1 = String::from("hello");let s2 = s1; // s1 больше не действителен — владение передано s2// println!("{}", s1); // Ошибка!Заимствование (Borrowing)
- Ссылки (
&) позволяют использовать значение без передачи владения. - Неизменяемые ссылки: можно иметь сколько угодно.
- Изменяемые ссылки: только одна на область видимости.
let s = String::from("hello");let len = calculate_length(&s); // Неизменяемая ссылкаfn calculate_length(s: &String) -> usize {s.len()}let mut s = String::from("hi");change(&mut s); // Изменяемая ссылкаfn change(s: &mut String) {s.push_str(", world");}
Время жизни (Lifetimes)
- Гарантируют, что ссылки действительны до их использования.
- Аннотируются символом
'a.fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {if x.len() > y.len() { x } else { y }}
Обработка ошибок
Rust использует типы Result<T, E> и Option<T> для обработки ошибок.
Option<T>:Some(T)илиNone.Result<T, E>:Ok(T)илиErr(E).fn divide(a: f64, b: f64) -> Result<f64, String> {if b == 0.0 { Err(String::from("Деление на ноль")) }else { Ok(a / b) }}match divide(4.0, 2.0) {Ok(result) => println!("Результат: {}", result),Err(e) => println!("Ошибка: {}", e),}
Структуры и перечисления
-
Структуры группируют данные:
struct User {username: String,email: String,sign_in_count: u64,}let user = User {email: String::from("user@example.com"),username: String::from("user"),sign_in_count: 1,}; -
Перечисления (Enums):
enum IpAddr {V4(u8, u8, u8, u8),V6(String),}let home = IpAddr::V4(127, 0, 0, 1);
Модули и пакеты (Cargo)
- Cargo.toml — файл конфигурации для зависимостей.
- Модули организуют код в иерархии:
mod sound {pub mod instrument {pub fn guitar() { /* ... */ }}}fn main() {sound::instrument::guitar();}
Заключение
Rust предлагает уникальное сочетание безопасности, производительности и современных возможностей. Его система владения и строгий компилятор предотвращают множество ошибок на этапе компиляции, что делает программы надежными.
Следующие шаги:
- Изучите The Rust Book.
- Практикуйтесь на Rustlings.
- Исследуйте крейты (пакеты) на crates.io.
Rust требует времени для освоения, но вложенные усилия окупаются созданием быстрого и безопасного кода. Удачи в изучении! 🦀