Привет, мир!
Теперь, когда вы установили Rust, давайте напишем первую программу на Rust. Традиционно, в любом новом изучаемом языке программирования, первая программа просто выводит на экран текст «Привет, мир!». Хорошо начинать с такой простой программы, т.к. вы можете убедиться, что ваш компилятор не только установлен, но и работает правильно. Вывод информации на экран будет замечательным способом проверить это.
Первое, с чего мы должны начать, это создать файл для нашего кода. Мне нравится
размещать директорию projects
в домашней директории и хранить там все мои
проекты. Для Rust не имеет значения, где располагается ваш код.
На самом деле это приводит к ещё одной проблеме, о которой мы должны предупредить: данное руководство предполагает, что у вас есть базовые навыки работы в командной строке. У Rust нет специфичных требований к вашей среде разработки или тому, где вы храните свой код. Если вы больше предпочитаете использовать IDE, можно посмотреть на проект SolidOak, или на плагины к вашей любимой IDE. Существует множество расширений разного качества, созданных сообществом. Команда разработчиков Rust так же предоставила плагины для различных редакторов. Настройка вашего редактора или IDE выходит за пределы данного руководства. Посмотрите руководство по использованию выбранного вами плагина.
С учётом вышесказанного, давайте сделаем поддиректорию для нашей программы в директории с проектами.
$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
Если вы используете Windows и не используете PowerShell, ~
может не работать.
Обратитесь к документации вашей оболочки для уточнения деталей.
Теперь создадим новый файл для текста программы. Назовём наш файл main.rs
.
Файлы с исходными текстами на Rust всегда имеют расширение .rs
. Если вы
хотите использовать в имени вашего файла больше одного слова, разделяйте их
подчёркиванием: hello_world.rs
, а не helloworld.rs
.
Теперь когда файл открыт, добавьте в него следующий код:
fn main() {
println!("Привет, мир!");
}
Сохраните файл, а затем введите эти команды в ваше окно терминала:
$ rustc main.rs
$ ./main # или main.exe в Windows
Привет, мир!
Работает! Разберём подробнее что же произошло. (Примечание переводчика: вам нужен терминал с поддержкой юникода, чтобы вывод русских символов работал правильно. Большинство современных терминалов поддерживают юникод из коробки.)
fn main() {
}
Эти строки определяют «функцию» в Rust. Функция main
особенна: это начало
каждой программы на Rust. Первая строка говорит: «Мы объявляем функцию,
именуемую main
, которая не получает параметров и ничего не возвращает». Если
бы мы хотели передать в функцию параметры, то указали бы их в скобках ((
и
)
). Так как нам не надо ничего возвращать из этой функции, мы можем опустить
указание типа возвращаемого значения. Мы вернёмся к этому позже.
Вы должны были заметить, что функция обёрнута в фигурные скобки ({
и }
).
Rust требует их вокруг тел всех функций. Также хорошим стилем считается ставить
открывающую фигурную скобку на той же строке, что и объявление функции,
отделённую от него одним пробелом.
Теперь эта строка:
println!("Привет, мир!");
Эта строка делает всю работу в нашей маленькой программе. Тут есть несколько нюансов, которые имеют существенное значение. Во-первых, отступ в четыре пробела, а не табуляция. Пожалуйста, настройте выбранный вами редактор так, чтобы вставлять четыре пробела при помощи клавиши табуляции. Мы предоставляем некоторые примеры настроек для различных редакторов.
Теперь разберёмся с println!()
. Это вызов макроса, которыми
представлено метапрограммирование в Rust. Если бы вместо макроса была функция,
это бы выглядело следующим образом: println()
. Для достижения нашей цели, нас
не должна волновать эта разница. Просто знайте, что иногда вы будете видеть !
,
по которому можно понять, что вы вызываете макрос вместо обычной функции. Rust
реализует println!
как макрос вместо функции по веским причинам, но это
достаточно глубокая тема, и мы обсудим этот момент позже. И последнее, что нужно
отметить: макросы Rust значительно отличаются от макросов C, если вы их
использовали. Не бойтесь использовать макросы. В конце концов мы вернёмся к
деталям, а сейчас просто доверьтесь нам.
Идём дальше. "Привет, мир!"
— это «строка». Строки — это удивительно сложная
тема в системном языке программирования. Это «статически расположенная в памяти»
строка. Если вы хотите больше узнать про расположении в памяти, рекомендуем
почитать про стек и кучу, но в принципе вы можете пока не
заботиться о таких деталях. Мы передаём строку в качестве аргумента в
println!
, который выводит строки на экран. Это достаточно просто!
В завершение, строка заканчивается точкой с запятой (;
). Rust — это язык с ориентацией на выражения
, а это означает, что в нём большая часть вещей
является выражением. ;
используется для указания, что выражение закончилось и
начинается следующее. Большинство строк кода на Rust заканчивается на ;
.
Наконец, скомпилируем и запустим нашу программу. Соберём программу компилятором
rustc
, передав ему в качестве аргумента название нашего файла с кодом:
$ rustc main.rs
Это похоже на gcc
или clang
, если вы программировали раньше на C или C++.
Rust создаст двоичный исполняемый файл. Вы можете убедиться в этом с помощью
ls
:
$ ls
main main.rs
Или в Windows:
$ dir
main.exe main.rs
У нас есть два файла: файл с нашим исходным кодом, с расширением .rs
, и
исполняемый файл (main.exe
в Windows, main
в остальных случаях).
$ ./main # или main.exe в Windows
Мы вывели наш текст "Привет, мир!"
в окне терминала.
Если вы пришли из динамических языков программирования вроде Ruby, Python или
JavaScript, необходимость предварительной компиляции программы может показаться
вам необычной. Rust — это язык, программы на котором компилируются перед
исполнением. Это означает, что вы можете собрать программу, дать её кому-то
ещё, и ему не нужно устанавливать Rust. Если вы передадите кому-нибудь .rb
,
.py
или .js
файл, им понадобится Ruby/Python/JavaScript, чтобы
скомпилировать и запустить вашу программу, но компиляция и запуск этих программ
делается одной командой (например, python main.py
). В мире языков
программирования много компромиссов, и Rust сделал свой выбор.
Поздравляем! Вы написали первую программу на Rust. Это делает вас программистом на Rust! Добро пожаловать!
Дальше мы познакомимся с новым инструментом Cargo
, который используется для
написания настоящих программ на Rust. Использовать rustc
удобно лишь для
небольших программ, но по мере роста проекта, потребуется инструмент, который
поможет управлять настройками проекта, а также облегчит обмен кода с другими
людьми и проектами.