7 причин використовувати Rust для наступного проекту розробки

| | 0 Comments| 5:18 AM
Categories:

Ви розробник, який хоче вивчити Rust? Щоб допомогти вам визначитися, у цій статті представлені деякі функції Rust, однієї з найпопулярніших мов системного програмування.

У цій статті ми вивчимо мову програмування Rust і її особливості, такі як система типів, безпека пам’яті та право власності. Ми також розглянемо список ресурсів, які можуть допомогти вам вивчити Rust.

Давайте почнемо!

Що таке іржа?

Rust — це мова системного програмування. Він розпочався як особистий проект Грейдона Хоара, розробника, у 2006 році. Менш ніж за десять років він став популярним вибором для системного програмування та суміжних програм. Середня зарплата програміста Rust становить близько 120 тисяч доларів.

Отже, якщо ви хочете перейти з C++ на Rust або хочете вибрати нову мову, вивчення Rust може бути чудовим вибором! Згідно з опитуванням розробників StackOverflow, Rust визнано найулюбленішою мовою програмування сім років поспіль.

Джерело зображення: StackOverflow

Rust пропонує швидкість низькорівневих системних мов програмування, таких як C і C++, і безпеку високорівневих мов програмування, таких як Python.

Від відомих проектів, таких як Dropbox і Firefox до WebAssembly і вбудованого програмування, Rust широко використовується в усіх сферах розробки програмного забезпечення. Rust пропонує готову підтримку керування пакетами через Cargo.

Cargo: менеджер пакетів для Rust

Cargo — це менеджер пакетів для Rust. Ви можете використовувати cargo для встановлення пакетів із ящиків, реєстру пакетів Rust. Крім того, що cargo є менеджером пакунків, який дозволяє шукати, встановлювати та керувати пакунками, cargo також виконує функцію запуску тестів, генератора документів і системи збирання.

Тепер, коли у вас є огляд Rust, давайте ближче розглянемо деякі особливості Rust, які виділяють його як мову системного програмування, яка широко поширена.

Корисні повідомлення про помилки

Як програміст-початківець, ви зіткнетеся з помилками та витратите значну кількість часу на налагодження коду. Ви будете використовувати повідомлення про помилки та попередження, надані компілятором, щоб вирішити ці проблеми. А корисні повідомлення допоможуть швидше налагодити помилку.

Приклад повідомлення про помилку

Коли ваш код не компілюється успішно, Rust надає корисні повідомлення про помилки, які містять пояснення того, що потрібно виправити у вашому коді та де.

У цьому прикладі змінна num2 визначена всередині функції inner(). Тому він обмежений сферою дії функції. Якщо ви спробуєте отримати до нього доступ поза функцією, компілятор видасть помилку:

fn main() {
    let num1 = 10;
    fn inner(){
        let num2 = 9; 
    }
    println!("The value of num2 is: {}", num2);
}

А повідомлення про помилку містить інформацію про те, що потрібно виправити.

error[E0425]: cannot find value `num2` in this scope
 --> src/main.rs:6:42
  |
6 |     println!("The value of num2 is: {}", num2);
  |                                          ^^^^ help: a local variable with a similar name exists: `num1`

Попередження під час компіляції

Компілятор також надає корисні попередження щодо проблем у вашому коді. Якщо ви визначаєте змінні, але ніколи не використовуєте їх у решті програми, Rust видасть вам попереджувальне повідомлення, як показано.

fn main() {
    let num1 = 10;
    let num2 = 9;
    println!("The value of num1 is: {}", num1);
}

Тут змінна num2 оголошена, але ніколи не використовується.

warning: unused variable: `num2`
 --> src/main.rs:3:9
  |
3 |     let num2 = 9;
  |         ^^^^ help: if this is intentional, prefix it with an underscore: `_num2`
  |

Строго типізована мова

Ще одна причина, чому вам слід використовувати Rust для ваших проектів розробки, це його система типів. Rust є строго типізованою мовою, що означає, що вона не підтримує приведення типу. Приведення типу — це коли мова може неявно перетворити значення в типі даних в інший.

  Як перезавантажити віддалений комп'ютер? (Команда + інструменти)

Наприклад, код Python у наступній клітинці коду виконуватиметься без помилок. Це тому, що в Python відмінне від нуля число має істинне значення True, і тому оператор if виконується без помилок, навіть якщо число 10 є цілим числом, а не логічним.

num1 = 10
if num1:
    num2 = 9
print(f"num2 is {num2}")

# Output: num2 is 9

З іншого боку, Rust не нав’язує типи. Отже, наступний код видасть помилку:

fn main() {
    let num1 = 10;
    if num1{
        let num2 = 9; 
    }
}

Помилка повідомляє про невідповідність типу, де очікувалося логічне значення, а було знайдено ціле число.

error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if num1{
  |        ^^^^ expected `bool`, found integer

Безпека пам’яті

Безпека пам’яті є ще однією особливістю Rust, яка робить його привабливим для програмістів. Ми спробуємо дати побіжний огляд того, як це працює.

Перед використанням змінні мають бути ініціалізовані

У Rust усі змінні мають бути ініціалізовані, перш ніж їх можна буде використовувати. У таких мовах, як C, наступний код, де num не ініціалізовано, компілюється та виконується без помилок. Значення неініціалізованої змінної є деяким сміттєвим значенням.

#include <stdio.h>

int main(void) {
    int num;
	printf("The value of num is %d", num);
	return 0;
}
// Output: The value of num is 0

Якщо ви спробуєте зробити щось подібне в Rust, ви зіткнетеся з помилкою під час компіляції. Отже, Rust не має поняття про збирання сміття.

fn main() {
    let num:i32;
    println!("The value of num is: {}",num);
}
error[E0381]: used binding `num` isn't initialized
 --> src/main.rs:3:40
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     println!("The value of num is: {}",num);
  |                                        ^^^ `num` used here but it isn't initialized
  |

Безпека пам’яті під час компіляції

Rust забезпечує безпеку пам’яті під час компіляції. Візьмемо простий приклад. Тут, хоча умовний оператор if має логічне значення true, що означає, що значення num завжди буде 100, ми отримуємо помилку, коли намагаємося вивести значення num.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    println!("The value of num is: {}", num);
}

Це тому, що умовне оцінювання відбувається під час виконання, і компілятор не зможе гарантувати, що num має значення під час компіляції.

error[E0381]: used binding `num` is possibly-uninitialized
 --> src/main.rs:6:41
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     if true{
  |        ---- if this `if` condition is `false`, `num` is not initialized
4 |         num = 100;
5 |     }
  |      - an `else` arm might be missing here, initializing `num`
6 |     println!("The value of num is: {}", num);
  |                                         ^^^ `num` used here but it is possibly-uninitialized

Якщо ви уважніше подивитеся на повідомлення про помилку, ви побачите, що за допомогою оператора else ми можемо гарантувати, що num матиме значення. Таким чином, наступний код працюватиме без помилок. Тому що таким чином компілятор може визначити, що num матиме значення під час компіляції, тому помилок не буде.

fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    else{
        num = 50;
    }
    println!("The value of num is: {}", num);
}
The value of num is: 100

Незмінність змінних

Також корисно зазначити, що змінні в Rust незмінні за замовчуванням. Це означає, що вам, як розробнику, не потрібно турбуватися про випадкове перезаписування значення певної змінної. Ось приклад:

fn main() {
    let num1 = 10;
    num1 = 5;
    println!("The value of num1 is: {}", num1);
}

Оскільки num1 ініціалізовано рівним 10, коли ви намагаєтеся призначити йому значення 5, ви отримуєте повідомлення про помилку “неможливо двічі призначити незмінну змінну num1”.

error[E0384]: cannot assign twice to immutable variable `num1`
 --> src/main.rs:3:5
  |
2 |     let num1 = 10;
  |         ----
  |         |
  |         first assignment to `num1`
  |         help: consider making this binding mutable: `mut num1`
3 |     num1 = 5;
  |     ^^^^^^^^ cannot assign twice to immutable variable

Власність і запозичення

Право власності забезпечує безпеку пам’яті. Функціонально право власності в Rust можна підсумувати таким чином:

  Чи справді програми записують екран вашого iPhone?

Кожен об’єкт повинен мати одного і тільки одного власника. Якщо власник виходить за межі видимості, об’єкт відкидається.

Візьмемо простий приклад. Тут ми ініціалізуємо рядок str1, а потім переміщуємо його значення до str2. Оскільки будь-який об’єкт може мати лише одного власника, об’єкт str1 видаляється, як тільки його значення переміщується до str2.

fn main() {
    let str1 = String::from("Rust");
    let str2 = str1;
    println!("The value of str1 is: {}", str1);
}
error[E0382]: borrow of moved value: `str1`
 --> src/main.rs:4:42
  |
2 |     let str1 = String::from("Rust");
  |         ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 |     let str2 = str1;
  |                ---- value moved here
4 |     println!("The value of str1 is: {}", str1);
  |                                          ^^^^ value borrowed here after move

Хоча це здається інтуїтивно зрозумілим, щоб краще зрозуміти й оцінити, як працює право власності, корисно вивчити концепції запозичень і посилань.

Швидкий розвиток

Поки що ми обговорили кілька корисних функцій мови програмування Rust. Щоб переглянути кілька:

  • Rust оптимізовано як для швидкості, так і для безпеки.
  • Він поставляється з вбудованим інструментом керування пакунками та створює систему.
  • Він також має багату стандартну бібліотеку.

По суті, Rust пропонує все, що може побажати розробник. Тому за допомогою Rust ви можете швидко розробляти програми з мінімальним налагодженням і швидшими збірками.

Кросплатформна розробка

З Rust ви можете вибрати розробку на платформі за своїм вибором. Rust підтримує найпоширеніші платформи: Linux, MacOS і Windows.

Розробка програм загалом проста, оскільки ви можете скомпілювати вихідний код Rust у виконуваний файл, не залежачи від інших інструментів збірки та зовнішніх компіляторів.

Спільнота, яка підтримує вас, значною мірою спрощує вашу подорож до навчання. Rust має величезну базу користувачів, яка з кожним роком лише зростає.

Популярність Rust в опитуванні розробників StackOverflow свідчить про те, що існує велика спільнота користувачів із багатьма досвідченими розробниками, які бажають поділитися своїми знаннями та досвідом.

Окрім офіційної документації, є також створений користувачами сайт документації та дискусійний форум. Ви також можете переглянути відповідні обговорення в групах Rust subreddit і LinkedIn.

Навчальні ресурси для початку роботи з Rust

У цьому розділі наведено кілька корисних ресурсів, які допоможуть вам розпочати роботу з Rust. Це не вичерпний список, але він містить деякі рекомендовані навчальні посібники, курси та книги, які допоможуть вам у навчанні.

  Виправити помилку запису на диск Dota 2

#1. Іржа на прикладі

Rust By Example навчить вас основам Rust і стандартним бібліотекам за допомогою серії прикладів, які ви можете кодувати в онлайн-редакторі.

Розглянуті теми включають ящики, вантаж: інструмент керування пакунками для Rust, генерики, особливості, обробку помилок та багато іншого.

#2. шелестів

Rustlings — ще один офіційний навчальний ресурс для мови програмування Rust. Це схоже на приклад Rust. Однак вам потрібно налаштувати локальне середовище розробки, клонувати приклад репозиторію та вирішити прості задачі, щоб вивчити ці концепції.

#3. Доріжка Rust для вправ

Rust Track on Exercism містить більше 100 вправ, які допоможуть вам вивчити та перевірити ваше розуміння Rust. Exercism — це безкоштовна платформа, де ви можете отримати наставництво від досвідчених програмістів, а також кодувати свій шлях до вправ.

#4. Інтенсивний курс Ultimate Rust

Інтенсивний курс Ultimate Rust, який викладає Натан Стокс на Udemy, охоплює наступне:

  • Основи програмування на Rust
  • Модульна система в Rust
  • Типи даних і потік керування
  • Довідка та запозичення
  • Структури, ознаки та колекції

#5. Ultimate Rust 2: проміжні концепції

Ultimate Rust 2 є продовженням курсу Ultimate Rust Crash Course і охоплює такі теми:

  • Закриття
  • Ітератори
  • Обробка помилок
  • Одиничний та інтеграційний тест
  • Журналування, багатопотоковість і канали

#6. Rust lang: Повний посібник для початківців 2023

Цей курс Udemy, який викладає Каталін Стефан, є комплексним курсом програмування на Rust. Деякі з розглянутих тем включають:

  • Основи Rust
  • Типи даних, керуючі структури
  • Функції, риси
  • Управління пам’яттю
  • Паралелізм

#7. Програмування Rust: швидка, безпечна розробка систем

Програмування Rust від O’Reilly — популярна книга з програмування Rust, яка навчить вас наступному:

  • Основні типи даних
  • Власність і позики
  • Асинхронне програмування
  • Швидкі багатопотокові програми
  • Закриття, ітератори
  • Колекції

#8. Мова програмування Rust, 2-е видання

Авторами мови програмування Rust є відомі учасники спільноти Rust. Ця книга охоплює все, що вам потрібно знати про Rust, зокрема:

  • Власність і позики
  • Роди, ознаки
  • Розумні покажчики, багатопотоковість
  • Тестування та усунення помилок

#9. Повний довідковий посібник із програмування на Rust

Повний довідковий посібник із програмування Rust від Packt охоплює наступне:

  • Реалізація структур даних у Rust
  • Написання повторно використовуваних і тестованих компонентів у Rust
  • Проектування багатопоточних програм, проектування алгоритмів і
  • Застосування Rust у програмах WebAssembly, мережі та командного рядка

#10. Творчі проекти для програмістів Rust

Якщо ви досвідчений розробник, який вивчає Rust, то створити кілька проектів у вашій області буде достатньо, щоб добре зрозуміти мову. Креативні проекти для програмістів Rust від Packt — це книга, яка навчає Rust, застосовуючи їх до таких проектів, як:

  • Створення веб-служб Restful
  • 2D ігри з
  • Розробка веб-додатків за допомогою WebAssembly
  • Емулятори машинної мови
  • і більше!

Висновок

У цій статті представлено огляд Rust як мови системного програмування, включаючи такі функції, як безпека пам’яті, покращене керування пакетами тощо. Ми також перерахували навчальні ресурси, які допоможуть вам почати працювати з Rust.

Наступним кроком ви можете вибрати один або кілька із згаданих навчальних ресурсів, щоб навчитися основам Rust. Щасливого програмування на Rust!

Ви також можете ознайомитися з найкращими постачальниками хостингу серверів Rust.