Hello, World!
Итак, поскольку вы установили Rust, приступим к написанию вашей первой программы на нём. По традиции, при изучении нового языка программирования первой программой пишется вывод текста Hello, world!
на экран. Этой программой мы сейчас и займёмся.
Примечание: эта книга предполагает некоторые базовые навыки работы с командной строкой. Rust предъявляет особых требований к вашему инструментарию или размещению кода, так что если вы предпочитаеле использовать IDE вместо командной строки — используйте любимую. Многие IDE в той или иной мере поддерживают Rust; подробности можете узнать в документации вашей IDE. Команда Rust поддерживает систему
rust-analyzer
, обеспечивающую превосходную поддержку Rust во многих IDE. Ищите подробности в Приложении D .
Создание директории проекта
Первым делом, создадим директорию для хранения вашего кода на Rust. Неважно, где вы хотите располагать свой код, но мы предлагаем вам выделить отдельную директорию для упражнений и проектов из этой книги.
Откройте терминал и введите следующие команды, чтобы создать директорию "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. Если вы используете больше одного слова в названии файла, следует отбивать слова друг от друга нижним подчёркиванием. Например, вместо helloworld.rs лучше напишите hello_world.rs.
Теперь откройте только что созданный файл main.rs и заполните его кодом из Листинга 1-1.
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
Давайте детально рассмотрим нашу программу. Вот первая деталька пазла:
fn main() { }
Эти строчки определяют функцию под названием main
. Функция main
особенна: с неё начинается исполнение программы. Мы видим, что первая строка объявляет функцию main
, не имеющую параметров и ничего не возвращающую. Если бы она имела параметры, то они были бы заключены в скобки ()
.
Тело функции заключено в {}
. Rust требует использовать фигурные скобки для определения тела функций. Принятым стилем является поставить открывающую фигурную скобку на той же строке, где объявляется функция, отделив объявление от скобки пробелом.
Примечание: Если вы хотите всюду соблюдать стандартный единообразный стиль, вы можете воспользоваться инструментом форматирования
rustfmt
. (больше оrustfmt
можно узнать в Приложении D ). Это инструмент поставляется вместе сrustc
, так что он должен быть уже на вашем компьютере!
Тело функции main
содержит следующий код:
#![allow(unused)] fn main() { println!("Hello, world!"); }
Эта строчка делает всю работу в нашей маленькой программе: она печатает текст на экран. Мы можем выделить здесь три важных детали:
Во-первых, println!
вызывает макрос. Если бы вместо этого мы вызывали функцию, она бы называлась println
(без знака !
). Мы обсудим макросы детальнее в Главе 20. Пока что вам достаточно знать, что знак !
означает вызов макроса, а не обычной функции, и что макрос не всегда ведёт себя как функция.
Во-вторых, вы видите строку "Hello, world!"
. Мы передаём эту строку как аргумент макросу println!
, и она же выводится на экран.
Third, we end the line with a semicolon (;
), which indicates that this expression is over and the next one is ready to begin. Most lines of Rust code end with a semicolon.
Компилирование и исполнение — это разные шаги
Давайте рассмотрим каждый шаг процесса запуска программы.
Перед запуском программы на Rust, вы должны её скомпилировать, используя компилятор Rust. Введите команду rustc
в терминал и передайте в качестве ей аргумента имя файла исходного кода:
$ rustc main.rs
If you have a C or C++ background, you’ll notice that this is similar to gcc
or clang
. After compiling successfully, Rust outputs a binary executable.
В Linux, macOS и PowerShell на Windows, вы можете увидеть исполняемый файл, введя команду ls
в консоль:
$ ls
main main.rs
На Linux и macOS вы увидите два файла. На Windows вы увидите три. Если вы используете 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.exe on Windows
Если ваш main.rs содержит программу "Hello, world!", то исполняемый файл выведет Hello, world!
в консоль.
Если вы более знакомы с динамическими языками программирования, такими как Ruby, Python или JavaScript, вам может быть непривычно выполнять сборку и исполнение программы как отдельные шаги. Rust — язык с предварительной компиляцией, что означает, что вы можете скомпилировать программу и отдать исполняемый файл другому человеку, и он сможет его запустить без необходимости устанавливать Rust. Если же вы дадите кому-то файл .rb, .py или .js, другому человеку потребуется сначала установить (соответственно) Ruby, Python или JavaScript. Однако, в этих языках вам нужна лишь одна команда для сборки и запуска ваших программ. Всё в дизайне языков программирования — компромисс.
Прямая компиляция через rustc
достаточна для небольших программ, но по мере их роста вам потребуется управлять различными настройками и делать ваш код лёгким для распространения. В следующем разделе мы покажем вам Cargo — инструмент, используемый для написания прикладных программ на Rust.