Привіт, світ! (Hello, World!)
Тепер, коли ви встановили Rust, настав час написати вашу першу програму на 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, який ви щойно створили, і введіть код із Лістинга (Listing) 1-1.
fn main() {
println!("Hello, world!");
}
Збережіть файл і поверніться до вікна термінала в каталозі ~/projects/hello_world. У Linux або macOS введіть такі команди, щоб скомпілювати й запустити файл:
$ rustc main.rs
$ ./main
Hello, world!
У Windows введіть команду .\main замість ./main:
> rustc main.rs
> .\main
Hello, world!
Незалежно від вашої операційної системи, рядок Hello, world! має надрукуватися в
терміналі. Якщо ви не бачите цього виводу, поверніться до частини
“Troubleshooting” розділу Встановлення (Installation), щоб дізнатися
способи отримати допомогу.
Якщо 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!");
}
Цей рядок робить усю роботу в цій невеликій програмі: він виводить текст на екран. Тут є три важливі деталі, на які слід звернути увагу.
По-перше, println! викликає макрос Rust. Якби він викликав функцію, це було б
записано як println (без !). Макроси Rust — це спосіб писати код, який
створює код для розширення синтаксису Rust, і ми обговоримо їх докладніше в
Розділі 20. Наразі вам достатньо знати, що використання !
означає, що ви викликаєте макрос замість звичайної функції, і що макроси не завжди
слідують тим самим правилам, що й функції.
По-друге, ви бачите рядок "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 /B %= the /B option says to only show the file names =%
main.exe
main.pdb
main.rs
Це показує файл вихідного коду з розширенням .rs, виконуваний файл (main.exe у Windows, але main на всіх інших платформах) і, під час використання Windows, файл, що містить відомості для налагодження, з розширенням .pdb. Після цього ви запускаєте файл main або main.exe ось так:
$ ./main # or .\main on Windows
Якщо ваш main.rs — це програма “Hello, world!”, цей рядок виводить Hello, world! у ваш термінал.
Якщо ви краще знайомі з динамічною мовою, такою як Ruby, Python або JavaScript, ви можете бути не звиклі до компіляції та запуску програми як окремих кроків. Rust — це мова попередньої компіляції (ahead-of-time compiled), що означає, що ви можете скомпілювати програму й передати виконуваний файл комусь іншому, і ця людина зможе запустити його навіть без встановленого Rust. Якщо ви дасте комусь файл .rb, .py або .js, їм потрібно буде мати встановлену реалізацію Ruby, Python або JavaScript (відповідно). Але в цих мовах вам потрібна лише одна команда, щоб скомпілювати й запустити вашу програму. У дизайні мов завжди є компроміс.
Проста компіляція за допомогою rustc цілком підходить для простих програм, але
коли ваш проєкт росте, вам захочеться керувати всіма параметрами й легко ділитися
вашим кодом. Далі ми познайомимо вас із інструментом Cargo, який допоможе вам
писати реальні програми на Rust.