Установка и Hello, World
Источник: ch01-01-installation.html
Кратко
Чтобы писать на Rust, сначала ставят инструменты через rustup — это официальный установщик и менеджер версий. Представьте его как «пульт управления»: он ставит компилятор, обновляет его и при необходимости удаляет. Первая программа — это функция fn main(), внутри которой макрос println! печатает текст на экран. Код компилируют командой rustc, и получается обычный исполняемый файл. Его можно запускать даже на компьютере, где Rust не установлен.
Основное
- Установка (Linux/macOS):
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh. На Windows —rustup-init.exe.
Эта команда скачивает скрипт установки и запускает его. После установки обычно нужно перезапустить терминал или выполнить подсказку про PATH, иначе система не найдёт rustc и cargo. На Windows проще скачать rustup-init.exe с сайта rust-lang.org и запустить его. Если установка прошла успешно, в терминале появятся rustc, cargo и rustup.
- Нужен линкер (C-компилятор):
gcc/clangна Linux, Xcode CLT на macOS, MSVC Build Tools на Windows.
Компилятор Rust превращает ваш код в объектные файлы, а линкер склеивает их в готовый бинарник. Без линкера rustc выдаст ошибку вроде «linker not found». На Linux обычно ставят пакет с gcc или clang, на macOS — Command Line Tools через Xcode, на Windows — Build Tools for Visual Studio. Это не «вторая установка Rust», а обязательная часть цепочки сборки.
- Проверка:
rustc --version. Обновление:rustup update. Удаление:rustup self uninstall. Локальная документация:rustup doc.
rustc --version сразу показывает, что компилятор доступен. rustup update подтягивает новые стабильные версии инструментов — это нормальная регулярная практика. rustup self uninstall полностью убирает toolchain. rustup doc открывает локальную копию документации (включая The Book) в браузере — удобно без интернета.
- Файлы Rust имеют расширение
.rs, имена пишут вsnake_case.
Например, main.rs или guessing_game.rs. Соглашение snake_case (слова через подчёркивание, маленькие буквы) касается и имён файлов, и функций, и переменных. Компилятор не требует именно такого стиля для файлов, но сообщество и инструменты (rustfmt, линтеры) ожидают его. Единый стиль облегчает чтение чужого кода.
fn main()— точка входа. Тело функции в{}, отступ — 4 пробела.
Когда вы запускаете программу, выполнение всегда начинается с main. Без этой функции бинарный крейт не соберётся. Фигурные скобки ограничивают тело функции. Четыре пробела — стандарт сообщества; rustfmt выставит их автоматически, если вы забудете.
println!— макрос (признак —!), а не функция. Строки заканчиваются;.
Восклицательный знак в имени — сигнал: это макрос. Макросы могут принимать переменное число аргументов и иначе разбирать синтаксис, чем обычные функции. Точка с запятой завершает большинство операторов. Если её забыть там, где она нужна, компилятор часто подскажет, но привыкать к ; лучше сразу.
- Rust — компилируемый язык с ahead-of-time компиляцией: результат (
main) можно запускать без установленного Rust.
«Ahead-of-time» значит: весь код переводят в машинный код до запуска, а не во время выполнения (как у многих интерпретируемых языков). Готовый файл main или main.exe — самостоятельная программа. Это удобно для раздачи: пользователю не нужен установленный Rust.
- Компиляция:
rustc main.rs, запуск:./main(на Windows.\main.exe).
rustc читает исходник и создаёт исполняемый файл рядом (имя обычно совпадает с именем файла без .rs). Затем его запускают как любую программу в терминале. Для одного файла этого достаточно; для проектов с зависимостями почти всегда используют Cargo, а не «голый» rustc.
rustfmt/cargo fmt— стандартное форматирование.
Эти команды приводят код к единому стилю: отступы, переносы, пробелы. Не нужно спорить о форматировании вручную — инструмент делает это за вас. В проектах Cargo обычно пишут cargo fmt.
Примеры
// main.rs — минимальная программа
fn main() {
println!("Hello, world!");
}
# компиляция и запуск
rustc main.rs
./main
fn main() {
let name = "Rust";
// {name} подставляет значение переменной в строку
println!("Привет, {name}!");
}
Важно запомнить
rustupсразу ставитrustc,cargoиrustfmt— этого достаточно, чтобы начать.println!— макрос: в имени есть!, это не обычная функция.rustcудобен для одного файла; для реальных проектов используют Cargo.- Без линкера (gcc/clang/MSVC) компиляция не завершится успешно.