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.