Hello, World!
Після встановлення Rust напишемо першу програму цією мовою. Давно стало традицією при вивченні нової мови програмування писати маленьку програму, що виводить на екран текст Hello, world!
, і ми не будемо відступати від цієї традиції.
Примітка: ця книжка передбачає базове знайомство із командним рядком. Rust як така не висуває особливих вимог до редакторів, інструментів і розміщення коду, тому якщо вам зручніше використовувати інтегроване середовище розробки (IDE) замість командного рядка, можете користуватися вашим улюбленим IDE. Багато сучасних IDE певною мірою підтримують Rust; зверніться до документації IDE, щоб дізнатися більше. Останнім часом команда Rust зосередилася на підтримці IDE за допомогою
rust-analyzer
. Перегляньте Додаток D, щоб дізнатися більше.
Створення теки проєкту
Для початку, створіть теку для розміщення вашого коду мовою Rust. Для Rust немає значення, де розміщено ваш код, але для вправ і проєктів у цій книжці ми рекомендуємо зробити теку projects у вашій домашній теці і тримати всі проєкти там.
Open a terminal and enter the following commands to make a projects directory and a directory for the “Hello, world!” project within the projects directory.
У 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 завершується крапкою із комою.
Компіляція і запуск - окремі кроки
You’ve just run a newly created program, so let’s examine each step in the process.
Before running a Rust program, you must compile it using the Rust compiler by entering the rustc
command and passing it the name of your source file, like this:
$ rustc main.rs
Якщо ви маєте досвід роботи з C чи C++, ви можете помітити, що це схоже на gcc
чи clang
. Після вдалої компіляції Rust створює двійковий виконуваний файл.
На Linux, macOs чи PowerShell на Windows можна побачити цей файл, ввівши команду ls
у командній оболонці. На Linux і macOs ви побачите два файли. У PowerShell на Windows ви побачите ті ж три файли, що й за допомогою CMD.
$ ls
main main.rs
У 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 для реального світу.