Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Вступ

Примітка: Це видання книги збігається з The Rust Programming Language, доступним у друкованому та електронному форматі від No Starch Press.

Ласкаво просимо до Мови програмування Rust — вступної книги про Rust. Мова програмування Rust допомагає писати швидше та надійніше програмне забезпечення. Висока ергономіка та низькорівневий контроль часто суперечать одне одному в дизайні мов програмування; Rust кидає виклик цьому протиріччю. Балансуючи між потужними технічними можливостями та чудовим досвідом розробника, Rust дає вам можливість контролювати низькорівневі деталі (наприклад, використання пам’яті) без усіх труднощів, традиційно пов’язаних з таким контролем.

Для кого призначений Rust

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

Команди розробників

Rust виявляється продуктивним інструментом для співпраці у великих командах розробників з різним рівнем знань системного програмування. Низькорівневий код схильний до різних тонких помилок, які в більшості інших мов можна виявити лише через ретельне тестування та уважний перегляд коду досвідченими розробниками. У Rust компілятор відіграє роль контролера доступу (або воротаря), відмовляючись компілювати код з такими важко вловимими помилками, включаючи помилки конкурентності (concurrency). Працюючи разом з компілятором, команда може витрачати час на логіку програми, а не на пошук помилок.

Rust також привносить сучасні інструменти розробника у світ системного програмування:

  • Cargo, вбудований менеджер залежностей та інструмент збірки, робить додавання, компіляцію та управління залежностями безболісним та узгодженим у всій екосистемі Rust.
  • Rustfmt забезпечує узгоджений стиль кодування серед розробників.
  • rust-analyzer забезпечує інтеграцію з IDE для автодоповнення коду та вбудованих повідомлень про помилки.

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

Студенти

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

Компанії

Сотні компаній, великих і малих, використовують Rust у виробництві для різних завдань, включаючи інструменти командного рядка, веб-сервіси, інструменти DevOps, вбудовані пристрої, аналіз та транскодування аудіо та відео, криптовалюти, біоінформатику, пошукові системи, застосунки Інтернету речей, машинне навчання та навіть основні частини браузера Firefox.

Розробники відкритого програмного забезпечення

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

Люди, яким важлива швидкість та стабільність

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

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

Для кого призначена ця книга

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

Як користуватися цією книгою

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

У цій книзі ви знайдете два типи розділів: концептуальні розділи та проєктні розділи. У концептуальних розділах ви дізнаєтеся про аспект Rust. У проєктних розділах ми будуємо невеликі програми разом, застосовуючи те, що ви дізналися до цього часу. Розділи 2, 12 та 21 є проєктними розділами; решта — концептуальні.

Розділ 1 пояснює, як встановити Rust, як написати програму “Привіт, Світ!” та як використовувати Cargo, менеджер пакетів та інструмент збірки Rust. Розділ 2 є практичним вступом до написання програми на Rust, де ви будуєте гру в вгадування числа. Тут ми охоплюємо концепції на високому рівні, а пізніші розділи надають додаткові деталі. Якщо ви хочете одразу забруднити руки, Розділ 2 — це місце для цього. Розділ 3 охоплює функції Rust, схожі на функції інших мов програмування, а в Розділі 4 ви дізнаєтеся про систему володіння (ownership) Rust. Якщо ви особливо прискіпливий учень, який воліє вивчити кожну деталь перед тим, як рухатися далі, ви можете пропустити Розділ 2 і перейти безпосередньо до Розділу 3, повернувшись до Розділу 2, коли захочете попрацювати над проєктом, застосовуючи деталі, які ви вивчили.

Розділ 5 обговорює структури (structs) та методи (methods), а Розділ 6 охоплює переліки (enums), вирази match та конструкцію потоку управління if let. Ви будете використовувати структури та переліки для створення власних типів у Rust.

У Розділі 7 ви дізнаєтеся про систему модулів (modules) Rust та про правила приватності для організації вашого коду та його публічного інтерфейсу прикладного програмування (API). Розділ 8 обговорює деякі загальні структури даних колекцій, які надає стандартна бібліотека, такі як вектори (vectors), рядки (strings) та хеш-таблиці (hash maps). Розділ 9 досліджує філософію та техніки обробки помилок (error handling) Rust.

Розділ 10 заглиблюється в узагальнені типи (generics), трейти (traits) та часи життя (lifetimes), які дають вам можливість визначати код, що застосовується до кількох типів. Розділ 11 повністю присвячений тестуванню, яке навіть з гарантіями безпеки Rust необхідне для забезпечення правильної логіки вашої програми. У Розділі 12 ми будуємо власну реалізацію підмножини функціональності з інструменту командного рядка grep, який шукає текст у файлах. Для цього ми використаємо багато концепцій, які обговорювали в попередніх розділах.

Розділ 13 досліджує замикання (closures) та ітератори (iterators): функції Rust, що надходять з функціональних мов програмування. У Розділі 14 ми детальніше розглянемо Cargo та поговоримо про найкращі практики обміну вашими бібліотеками з іншими. Розділ 15 обговорює розумні вказівники (smart pointers), які надає стандартна бібліотека, та трейти, що забезпечують їх функціональність.

У Розділі 16 ми розглянемо різні моделі конкурентного програмування та поговоримо про те, як Rust допомагає вам програмувати в кількох потоках (threads) конкурентність без страху (fearless concurrency). Розділ 17 розширює це, розглядаючи синтаксис async/await та легку модель конкурентності, яку він підтримує.

Розділ 18 розглядає, як ідіоми Rust порівнюються з принципами об’єктно-орієнтованого програмування, з якими ви можете бути знайомі. Розділ 19 є довідником по шаблонах та зіставленню зі зразком (pattern matching), які є потужними способами вираження ідей у програмах на Rust. Розділ 20 містить різноманітні цікаві розширені теми, включаючи небезпечний Rust, макроси та більше про часи життя, трейти, типи, функції та замикання.

У Розділі 21 ми завершимо проєкт, в якому реалізуємо низькорівневий багатопотоковий веб-сервер!

Нарешті, деякі додатки містять корисну інформацію про мову у форматі довідника. Додаток А охоплює ключові слова Rust, Додаток Б охоплює оператори та символи Rust, Додаток В охоплює похідні трейти, що надаються стандартною бібліотекою Rust, Додаток Г охоплює деякі корисні інструменти розробки, а Додаток Д пояснює видання Rust. У Додатку Е ви можете знайти переклади книги, а в Додатку Є — деталі про те, як створюється Rust та що таке нічний Rust.

Немає неправильного способу читати цю книгу: якщо ви хочете пропустити вперед, дерзайте! Можливо, вам доведеться повернутися до попередніх розділів, якщо відчуєте плутанину. Але робіть те, що вам підходить.

Важливою частиною процесу вивчення Rust є навчання читати повідомлення про помилки, які відображає компілятор: вони направлять вас до робочого коду. Тому ми наведемо багато прикладів, які не компілюються, разом з повідомленням про помилку, яке компілятор покаже вам у кожній ситуації. Знайте, що якщо ви введете та запустите випадковий приклад, він може не скомпілюватися! Переконайтеся, що ви прочитали навколишній текст, щоб побачити, чи призначений приклад, який ви намагаєтеся запустити, для помилки. Ferris також допоможе вам розрізнити код, який не призначений для роботи:

FerrisЗначення
Ferris з знаком питанняЦей код не компілюється!
Ferris піднімає руки вгоруЦей код панікує!
Ferris з однією піднятою клешнеюЦей код не виробляє бажаної поведінки.

У більшості ситуацій ми направимо вас до правильної версії будь-якого коду, який не компілюється.

Вихідний код

Вихідні файли, з яких генерується ця книга, можна знайти на GitHub.