Привет, мир!
Теперь, когда вы установили 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.
fn main() {
println!("Hello, world!");
}
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.