Як і для чого вивчати мову програмування Rust
Вітаю читачів DOU. Мене звати Марк Цирульник, я VP of Engineering в Blaize — українській full-stack блокчейн-компанії. IT та crypto-індустрії досить швидко розвиваються в останні роки натомість я глибоко впевнений, що ці галузі все ще мають величезний потенціал, не кажучи вже про перспективи «витіснити» традиційні сфери.
Однією з найпоширеніших мов програмування в домені блокчейн наразі є саме Rust, тому я й вирішив поділитися особливостями, корисними порадами, перевагами й недоліками Rust з колегами, які ще роздумують, чи варто переходити на Rust, а також з freshmen в індустрії. Детальніше про це — нижче.
Навіщо вчити Rust: переваги та використання
Rust — це мова програмування, яка зарекомендувала себе як ефективний інструмент для розробки надійного і безпечного програмного забезпечення. Rust була розроблена Mozilla Research з метою створення мови, яка була б безпечною і мала низький рівень абстракції, тобто могла б надавати прямий контроль над машинним кодом.
Сьогодні Rust це універсальна мова, яку можна використовувати під задачі будь-якої складності, будь-то консольна утиліта, прошивка для вбудованої електроніки чи високонавантажений бекенд, який опрацьовує сотні бізнес-сценаріїв.
Серед основних переваг Rust можна виділити наступне:
- Rust було створено для потреб надійного вебрушія Servo, але зараз мова «переросла себе» та здебільшого займає нішу розробки вбудованих систем і операційних систем та високонавантажених сервісів.
- Rust — це наступник C та Go, який здебільшого не має їхніх недоліків і здатний обробляти будь-які задачі на які здатні Go, С чи С++ ефективніше. Швидкість С++ завдяки Zero-cost abstraction та нативному виконанню, надійність OCaml завдяки простоті та compile time перевіркам володіння ресурсами.
- Ownership, Life time та Borrow checker — вбудована, сучасна модель управління пам’яттю Rust, поділена на три секції, яка дозволяє розробнику уникнути небажаних наслідків, пов’язаних з неправильною роботою з пам’яттю.
- Потужний інструмент Трейтів та Макросів для метапрограмування.
Загалом, однією з найбільших переваг Rust є те, що вона надає програмістам можливість розробляти програми з високим рівнем безпеки. Rust має вбудовану систему виявлення помилок в момент компіляції, що знижує кількість помилок, які можуть виникнути під час роботи програми.
Rust досить ефективно та швидко виконує поставлені задачі завдяки своїй спрощеній системі синтаксису та оптимізації коду. Таким чином, Rust є ідеальним вибором для розробки програмного забезпечення з високими вимогами до безпеки та ефективності, таких як операційні системи, браузери, криптографічні протоколи та інші.
Недоліків у мови, звичайно, менше, але вони є. Зокрема:
- Сьогодні Rust не є найпопулярнішим інструментом серед ІТ-фахівців, тож знайти позицію для спеціаліста саме з цієї мови буде значно складніше, ніж, наприклад, розробнику на добре знайомих JS чи Python:
- вакансії на djinni;
- на pypl.github.io;
- ресурс TIOBE.
- Я б, швидше, назвав це особливістю, ніж недоліком, але все ж таки. Rust — це, переважно, блокчейн-розробка. Тобто, якщо ви також вбачаєте великий потенціал у Web3.0 та crypto, дана мова безперечно має стати одним з ваших інструментів.
- Rust має дійсно повільну компіляцію порівняно з багатьма іншими сучасними мовами програмування.
- Враховуючи, що Rust є «молодою» мовою у порівнянні з тією ж самою С++, вона не має такої розгалуженої екосистеми бібліотек.
Чи дійсно Rust така складна мова
Одним з часто поширених стереотипів про Rust є те, що вона є дуже складною мовою програмування. Однак, насправді Rust не є надто складною мовою для вивчення, особливо, якщо ви вже маєте досвід в програмуванні на інших мовах. Водночас слід враховувати наступні особливості:
- мова доволі низькорівнева, тож треба розуміти, як власне функціонує комп’ютер. У фахівця, який планує опанувати Rust мають бути ґрунтовні базові знання основ та концепцій програмування.
- Лаконічний синтаксис Rust не перевантажений великою кількістю різноманітних способів зробити одне й те саме. Низька варіативність іноді може завадити оперативному вирішенню навіть не найважчих проблем.
- У Rust немає exception, що робить обробку та усунення помилок, м’яко кажучи, не тривіальною задачею.
Водночас Rust має вбудовані засоби документування, що дозволяє програмістам швидко знайти інформацію про функції і типи даних в коді. Rust також має активну спільноту розробників, яка надає підтримку та допомогу новачкам у вивченні мови.
Поради як вивчати Rust максимально продуктивно
Мені важко давати поради новачкам, бо сам я вивчав Rust, маючи великий бекграунд знань з розробки на С++ та розробки в цілому, і почати розробляти на Rust для мене взагалі-то не було проблемним. Однак, для новачків або тих, хто не має досвіду з С++ Rust може здатися трохи не привітливим на перших порах.
Тож моя перша порада будь-кому, хто вивчає Rust — це максимально опанувати особливу модель управління пам’яттю Rust з трьох вершників апокаліпсиса: Ownership, Borrowing checker та Lifetime.
Для максимального розуміння логіки вказаної фічі треба, в першу чергу, розібратися з двома речами:
- що таке розумний вказівник (він є в багатьох мовах, навіть якщо у вашій є збирач сміття, то ви можете розібратися, як саме він працює, в більшості випадків це буде концептуально той самий smart pointer);
- в чому полягає проблема одночасного запису та читання даних (здебільшого, вам важливо зрозуміти, що таке read-write mutex).
Коли ви опануєте ці два концепти, ви побачите, що змінні в Rust — це умовно одночасно і розумний вказівник і rw-mutex, які на етапі компіляції перевіряють свої умови що в будь-який час використання змінна має лише одного відповідального за її звільнення і не дозволяє ситуації одночасного читання та запису.
Останній концепт — це lifetime, але він простіший за попередні два й умовно зводиться до того, що будь-яка змінна живе з рядка X до рядка Y і все, чим вона володіє повинно жити не довше неї.
Авжеж, Rust більший за ці концепти, тож, другою (хоча й не новою) для вас буде ще одна порада: пишіть якомога більше коду, тренуйтесь спочатку на невеликих проєктах, щоб натренуватися на тих речах, які вже зрозумілі й зіткнутися та розібратися з новими проблемами.
Гарним інструментом для реалізації моєї поради буде ресурс Exercism, який може стати для вас тим самим першим, невеликим проєктом, на якому ви й зможете попрактикуватися та «набити руку».
До того ж Rust має велику «родину» розробників та спеціалістів на мові, тож ніколи не бійтеся звертатися до досвідченіших колег у відповідних спільнотах з питанням чи проблемою, — впевнений, вам залюбки допоможуть. Це може бути україномовний телеграм-канал або відповідні розділи у Reddit, як, наприклад, цей.
Додатково до наведеного, звичайно, не варто забувати й про теорію, хоча й вивчати та розглядати її необхідно з точки зору практичної. Зупинимося трохи детальніше саме на теоретичних джерелах, де ви зможете отримати корисну та актуальну інформацію, що буде вам в пригоді при опануванні Rust.
Ресурси для вивчення Rust
По Rust, на жаль, не так багато україномовних ресурсів, тож володіння англійською для максимально оперативного та ефективного вивчення мови буде дуже корисним.
Вашими головними помічниками в Rust будуть три основні джерела:
- теорія;
- теорія на практиці;
- додзьо де ви будете ставити питання компілятору «а що не так?»:)
Для тих, хто вивчає Rust, вже маючи досвід з С++, дуже рекомендую ознайомитися із порівняльним аналізом цих мов з точку зору концептів. Це допоможе вам входити у Rust не from scratch, а вже з певним базисом.
Як я вже зазначав вище, зовсім не зайвим для вас може бути проходження курсів на ресурсах Exercism або JetBrains.
Щодо книг: якщо ви прихильник традиційних методів вивчення та отримання інформації, в контексті Rust можу лише сказати, що всі вони здебільшого є адаптаціями rust-book. Тож, якщо ви бажаєте мати у своїй колекції якусь книгу, можете спробувати Rust for Rustaceans.
Також корисним може бути ресурс Rust Design Patterns, оскільки вказане джерело допоможе вам ознайомитися з ідеологічно вірними підходами до розв’язання стандартних проблем.
Звичайно, ви також можете користуватися стандартними, очевидними варіантами для осягнення Rust, зокрема: відеокурси на YouTube, курси на Udemy тощо.
І що далі
У підсумку, Rust є потужною мовою програмування, яка має багато переваг і може бути використана для розв’язання різноманітних завдань. Розробники, які знають та користуються Rust, можуть насолоджуватися швидкодією, безпекою та ефективністю, що значно підвищує їх конкурентоздатність на ринку.
Хоча Rust має дещо високий поріг входу (певні складнощі та особливості вивчення та використання), вона має потужну спільноту та ресурси, які допоможуть вам опанувати її максимально продуктивно та швидко.
А як ви дійшли до Rust? Якими інструментами користувалися для її вивчення? Ділиться та обговорюйте у коментарях.
Найкращі коментарі пропустити