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

Привет, мир!

Теперь, когда вы установили 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 и введите код из Листинга 1-1.

Filename: main.rs
fn main() {
    println!("Hello, world!");
}
Listing 1-1: Программа, выводящая Hello, world!

Сохраните файл и вернитесь в окно терминала в каталоге ~/projects/hello_world. На Linux или macOS введите следующие команды, чтобы скомпилировать и запустить файл:

$ rustc main.rs
$ ./main
Hello, world!

На Windows введите команду .\main вместо ./main:

> rustc main.rs
> .\main
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!");
}

Эта строка выполняет всю работу в этой небольшой программе: она выводит текст на экран. Здесь есть три важных детали, на которые стоит обратить внимание.

Во-первых, 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 %= опция /B говорит показывать только имена файлов =%
main.exe
main.pdb
main.rs

Это показывает файл исходного кода с расширением .rs, исполняемый файл (main.exe в Windows, но main на всех других платформах) и, при использовании Windows, файл, содержащий отладочную информацию с расширением .pdb. Отсюда вы запускаете файл main или main.exe, вот так:

$ ./main # или .\main в 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.