Hello, World!
Після встановлення Rust настав час написати першу програму цією мовою. Давно стало традицією при вивченні нової мови програмування писати маленьку програму, що виводить на екран текст Hello, world!
, і ми не будемо відступати від цієї традиції.
Примітка: Ця книжка передбачає базове знайомство із командним рядком. Rust як така не висуває особливих вимог до редакторів, інструментів і розміщення коду, тому якщо вам зручніше використовувати інтегроване середовище розробки (IDE) замість командного рядка, можете користуватися вашим улюбленим IDE. Багато сучасних IDE певною мірою підтримують Rust; зверніться до документації IDE, щоб дізнатися більше. Останнім часом команда Rust зосередилася на підтримці IDE за допомогою
rust-analyzer
. Перегляньте Додаток D, для більш докладної інформації.
Створення Теки Проєкту
Для початку, створіть теку для розміщення вашого Rust коду. Для Rust немає значення, де розміщено ваш код, але для вправ і проєктів у цій книжці ми рекомендуємо зробити теку projects у вашій домашній теці і тримати всі проєкти там.
Запустіть термінал і введіть такі команди, щоб створити теку projects та теку для проєкту “Hello, world!” усередині теки projects.
У Linux, macOS та PowerShell на Windows, введіть це:
$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
Для Windows CMD введіть це:
> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world
Написання і Запуск Rust-Програми
Тепер створіть новий вихідний файл і назвіть його main.rs. Файли Rust завжди закінчуються розширенням .rs. Якщо у назві файлу використовується більш ніж одне слово, домовлено для розділення використовувати підкреслення. Наприклад, можна назвати файл hello_world.rs, але не helloworld.rs.
Тепер відкрийте щойно створений файл main.rs і наберіть код з Блоку коду 1-1.
Файл: main.rs
fn main() { println!("Hello, world!"); }
Збережіть цей файл і поверніться до вікна термінала у теці ~/projects/hello_world. На Linux або macOs наберіть такі команди, щоб скомпілювати та запустити файл:
$ rustc main.rs
$ ./main
Hello, world!
У Windows запустіть команду .\main.exe
замість ./main
:
> rustc main.rs
> .\main.exe
Hello, world!
Незалежно від вашої операційної системи, у терміналі буде виведено рядок Hello, world!
. Якщо він не вивівся, зверніться до підрозділу Розв'язання проблем розділу Встановлення, щоб дізнатися, як отримати допомогу.
Якщо вивелося Hello, world!
- вітаємо! Ви щойно офіційно написали програму мовою Rust. Тобто ви стали Rust програмістом! Ласкаво просимо!
Анатомія Програми Rust
Розгляньмо програму “Hello, world!” докладніше. Ось перший шматок пазла:
fn main() { }
Ці рядки визначають функцію, що зветься main
. Функція main
особлива: вона завжди є першим кодом, що запускається у кожній виконуваній програмі Rust. Перший рядок проголошує функцію з назвою main
без параметрів і яка нічого не повертає. Якби були параметри, їхні імена треба було розмістити між дужками ()
.
Тіло функції обгорнуто у {}
. Rust вимагає фігурних дужок навколо тіл усіх функцій. Вважається хорошим стилем розміщувати початкову дужку на тому ж рядку, що й проголошення функції, з відступом в один пробіл.
Примітка: Якщо ви бажаєте дотримуватися стандартного стилю у всіх проєктах Rust, ви можете скористатися інструментом автоматичного форматування
rustfmt
для форматування вашого коду в певному стилі (докладніше проrustfmt
у Додатку D). Команда Rust додала цей інструмент до стандартного набору програм Rust, на кшталтrustc
, тобто він уже має бути встановленим на вашому комп'ютері!
Тіло функції main
містить такий код:
#![allow(unused)] fn main() { println!("Hello, world!"); }
Цей рядок виконує всю роботу в цій маленькій програмі: виводить текст на екран. Тут треба зазначити чотири важливі деталі.
По-перше, у Rust заведено робити відступи в чотири пробіли, а не табуляцію.
По-друге, println!
викликає макрос Rust. Якби він викликав функцію, то це виглядало б як println
(без !
). Ми поговоримо про макроси в Rust детальніше в Розділі 19. Поки що вам достатньо знати, що коли ви бачите !
, це означає, що ви викликаєте макрос, а не звичайну функцію, і що макроси не завжди дотримуються тих самих правил, що функції.
По-третє, ви бачите стрічку Hello, world!
. Ми передаємо цю стрічку як аргумент до println!
, і вона виводиться на екран.
По-четверте, рядок завершується крапкою із комою (;
), що позначає, що цей вираз завершено, і можна починати наступний. Більшість рядків в коді Rust завершується крапкою із комою.
Компіляція та Запуск є Окремими Кроками
Ви щойно запустили новостворену програму, тож дослідимо кожен крок у цьому процесі.
Перед запуском програми Rust необхідно її скомпілювати за допомогою компілятора Rust, набравши команду rustc
і передавши їй ім'я вихідного файлу, отак:
$ rustc main.rs
Якщо ви маєте досвід роботи з C чи C++, ви можете помітити, що це схоже на gcc
чи clang
. Після вдалої компіляції Rust створює двійковий виконуваний файл.
На Linux, macOs чи PowerShell на Windows можна побачити цей файл, ввівши команду ls
у командній оболонці:
$ ls
main main.rs
На Linux і macOs ви побачите два файли. У PowerShell на Windows ви побачите ті ж три файли, що й за допомогою CMD. У CMD на Windows ви побачите таке:
> dir r /B %= опція /B означає показувати лише імена файлів =%
main.exe
main.pdb
main.rs
Тут показано вихідний файл з розширенням .rs, виконуваний файл (main.exe на Windows, але просто main на інших платформах) і, на Windows, файл з інформацією для зневадження з розширенням .pdb. Тепер можна запустити main чи main.exe, ось так:
$ ./main # чи .\main.exe у Windows
Якщо main.rs - це ваша програма "Hello, world!", вона виведе Hello, world!
у ваш термінал.
Якщо ви більше знайомі з динамічними мовами на кшталт Ruby, Python чи JavaScript, вам може бути незвичним, що компіляція і виконання програми - окремі кроки. Rust є завчасно компільованою мовою, тобто ви можете скомпілювати програму, передати виконуваний файл комусь іншому, і він зможе запустити її навіть якщо у нього не встановлено Rust. Якщо ви дасте комусь файл .rb, .py чи .js, то у нього має бути встановлена реалізація Ruby, Python чи Javascript (відповідно), але в тих мовах потрібна лише одна команда, щоб скомпілювати та запустити вашу програму. Всі переваги мови програмування мають свою ціну.
Проста компіляція за допомогою rustc
годиться для простеньких програм, але зі зростанням вашого проєкту вам захочеться мати можливість керувати всіма параметрами і легко ділитися кодом. Наступний крок - інструмент Cargo, що допоможе вам писати програми Rust для реального світу.