March 12

Основы Rust для чайников

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

Начну с объяснения что такое вообще rust:

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

Rust отличается своими механизмами владения и безопасностью взаимодействия с памятью. Кроме того, он обладает высокой скоростью выполнения кода, сравнимой с C-подобными языками, и после компиляции может выполнять код с огромной скоростью.

А теперь приступим к установке самого языка, устанавливать будем на linux, по этому если у вас windows, то рекомендую изучить другую статью.

1. Для начала установим rustup.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
2. Следуем инструкциям, и нажимаем enter.
3. Добавляем cargo в path.
source $HOME/.cargo/env
4. Проверяем, установили ли мы rust.
rustc --version
5. Если все успешно, переходим к следующему пункту

Открываем консоль, выбираем директорию для нашего проекта, а потом открываем её в консоли:

cd {директория где вы хотите разместить проект}

Затем создаем проект в cargo:

cargo new {название которое вы хотите дать проекту}

Потом в папке, директорию которой вы выбрали, вы найдете папку с названием проекта откроете её, а в ней такая структура:

my_project/
├── src/            # Исходный код проекта
│   ├── main.rs     # Главный файл программы (точка входа)
├── Cargo.toml      # Основной конфигурационный файл проекта
├── Cargo.lock      # Файл зависимостей (генерируется автоматически)

Открываем main.rs, и видим в нем уже написанный пример кода, вот такой:

fn main() {
    println!("Hello, World!");
}

Это код вывода в консоль, сообщения Hello, World!, println - это как print в python, ну думаю понятно, если вы не прогуливали информатику в школе, а теперь объясню подробно синтаксис, если вы понимаете python, то знаете что такое def, так вот, fn main() это тоже самое, просто вместо def там fn.

Попробуем разобраться с переменными, у нас есть 2 варианта переменной

let text = "hello, world!";
let mut text = "hello, world!";

let - объявление переменной, text - название переменной, = {содержимое переменной}.

let - объявление переменной, mut - обозначение что переменную можно изменить после объявления, text - название переменной, = {содержимое переменной}.

Думаю это мы поняли, теперь объясню стандартную библиотеку std::io, в rust нет такого как в python, просто вводим input("подсказка для ввода"), здесь для этого std::io, вот как выглядит это в коде:

use std::io; //импортируем библиотеку

fn main() {
    let mut text: String = String::new();
    
    io::stdin() //это короче как бы из библиотеки хуйня, которая как input в python
        .read_line(&mut text) //здесь мы говорим этой хуйне, чтобы она текст из завершенного ввода, записала в переменную text
        .expect("Здесь мы пишем что должен вывести скрипт, если ему не удается прочитать ввод в консоль.");

    let text = text.trim(); //превращаем text в text.trim(), это нужно для удаления лишних пробелов, и чтобы не было ошибок в работе программы.
    println!("{}", text.trim());
}

А теперь объясню стандартные циклы в rust, для тех кто вообще дуб дубом, объясняю. Циклы — конструкции в программировании, отвечающие за выполнения последовательностей действий в программе. Сейчас покажу пример одного из циклов, к примеру loop

fn main() {
    let mut count: i32 = 0;

    loop {
        count += 1;

        println!("Интерация: {}", count);
        if count == 1000 {
            break
        }
    }
}    

Повторяем интерацию пока не получим число 1000, а по достижению 1000, завершаем цикл с помощью break.

Есть ещё цикл while, этот цикл выполняется пока заданное знание является истинным, к примеру приведу этот код.

fn main() { // создаем функцию.
    let mut x = 5; // объявляем переменную x.

    while x > 0 { // устанавливаем while пока x больше 0, повторяем процесс.
        println!("x = {}", x);
        x -= 1; // с каждым повтором отнимаем по единице.
    }

    println!("Готово!"); // после завершения цикла, по законам линейной работы языков программирования, мы можем поставить вывод информации о завершении цикла.
}

Чтож, небольшие основы мы узнали, однако предстоит ещё работа с файлами, с помощью std::fs - аналог библиотеки OS в python. Однако сейчас мы изучим структуры, что же такое вообще структуры?

Struct — Это что-то подобное шаблону, в rust, то есть это как шкаф, в котором есть полки, куда можно что-то положить. С помощью структур мы можем создавать что-то типо словаря как в python, или сохранять пароль и имя пользователя, а так же отсортировать данные.

Как же использовать структуры? Сейчас покажу на примере.

struct user {
    name: String, // создаем ячейку для имени, с форматом String, для текста.
    age: i32, // создаем ячейку для возраста с форматом i32, чтобы хранить числа
}

fn main() {
    let person = user {
        name: String::from("Егор"),
        age: 25,
    }; // применяем структуру на переменную

    println!("Пользователя зовут: {a}, и ему {x} лет.", a=person.name, x=person.age); // используем переменную с структурой
}

Сейчас более менее стало думаю понятно что за язык, и он становится более читаемым после этого. По этому объясню как взаимодействовать с cargo.

  1. cargo new {название нового проекта}
  2. cargo run // запуск кода
  3. cargo build // коомпилировать код в exe или формат программы для вашей ОС.

Спасибо за чтение моей статьи!