1. Введение в экосистему Rust: установка, Cargo и первая программа
Введение в экосистему Rust: установка, Cargo и первая программа
Добро пожаловать в курс «Основы языка программирования Rust»! Мы начинаем наше путешествие в мир системного программирования с языка, который за последние годы завоевал сердца миллионов разработчиков. Rust — это не просто очередной инструмент в арсенале программиста; это язык, который меняет подход к написанию надежного и быстрого кода.
В этой первой статье мы разберемся, почему Rust стал таким популярным, установим необходимые инструменты, познакомимся с менеджером пакетов Cargo и напишем нашу первую работающую программу.
Почему Rust?
Прежде чем открывать терминал, давайте ответим на вопрос: зачем изучать Rust? Долгое время в системном программировании существовала дилемма. Вы могли выбрать скорость и контроль над «железом» (C, C++), но при этом рисковали допустить критические ошибки работы с памятью. Либо вы могли выбрать безопасность и удобство (Python, Java, Go), но жертвовали производительностью из-за работы сборщика мусора (Garbage Collector).
Rust решает эту проблему. Он предлагает:
!Иллюстрация баланса между безопасностью и скоростью, который обеспечивает Rust
Установка инструментов: Rustup
Первый шаг — установка набора инструментов (toolchain). В мире Rust для этого используется специальная утилита под названием rustup. Это инсталлятор и менеджер версий языка.
Установка на Linux и macOS
Если вы используете Unix-подобную систему, откройте терминал и введите следующую команду:
Скрипт скачает необходимые файлы и начнет установку. Вам будет предложено выбрать параметры установки — в большинстве случаев достаточно нажать Enter для выбора варианта по умолчанию (default).
Установка на Windows
Для пользователей Windows процесс также прост:
rustup-init.exe.> Важно: Для работы Rust на Windows вам также понадобятся инструменты сборки C++ (Visual Studio C++ Build Tools). Если они не установлены, rustup предупредит вас об этом и предложит установить их автоматически.
Проверка установки
После завершения установки вам, возможно, потребуется перезапустить терминал, чтобы обновились переменные среды (PATH). Чтобы убедиться, что все прошло успешно, введите:
Вы должны увидеть что-то вроде rustc 1.75.0 (82e1608df 2023-12-21). Это означает, что компилятор Rust (rustc) установлен и готов к работе.
Первая программа: Hello, World!
По традиции, начнем с программы, которая выводит текст на экран. Сначала мы сделаем это «вручную», чтобы понять, как работает компилятор, а затем используем профессиональный инструмент Cargo.
Ручной метод
main.rs. Расширение .rs — стандарт для файлов исходного кода Rust.Вы увидите вывод: Hello, world!.
Поздравляем! Вы только что написали и скомпилировали свою первую программу на Rust. Однако в реальной разработке прямой вызов rustc используется редко. Для управления проектами существует Cargo.
Знакомство с Cargo
Cargo — это система сборки и менеджер пакетов Rust. Он делает множество полезных вещей:
* Создает структуру нового проекта. Скачивает и собирает библиотеки (в Rust они называются крейтами или crates*), от которых зависит ваш код. * Запускает тесты. * Собирает документацию.
!Cargo управляет всеми аспектами жизненного цикла проекта
Создание проекта через Cargo
Давайте пересоздадим наш проект, используя Cargo. Удалите предыдущие файлы и введите в терминале:
Эта команда создаст новую директорию hello_cargo. Давайте заглянем внутрь:
Cargo создал для нас структуру файлов. Рассмотрим её подробнее:
Сборка и запуск
Теперь перейдите в папку проекта:
Чтобы собрать и запустить программу одной командой, используйте:
Вы увидите примерно такой вывод:
Cargo скомпилировал код, положил исполняемый файл в папку target/debug/ и сразу запустил его.
Полезные команды Cargo
* cargo build: Только компилирует проект, но не запускает его.
* cargo check: Проверяет код на наличие ошибок, но не создает исполняемый файл. Это работает намного быстрее, чем build, и очень полезно, когда вы пишете код и хотите быстро проверить, нет ли синтаксических ошибок.
* cargo build --release: Собирает проект для релиза (продакшена). Компиляция займет больше времени, но программа будет работать значительно быстрее благодаря оптимизациям.
Анатомия программы на Rust
Давайте вернемся к коду в файле src/main.rs и разберем его по частям.
Функция main
Строка fn main() { объявляет функцию.
* fn: Ключевое слово для объявления функции.
* main: Имя функции. В Rust функция main особенная — это точка входа в программу. Именно с неё начинается выполнение кода.
* (): Скобки указывают на параметры функции. В данном случае параметров нет.
* { ... }: Фигурные скобки обозначают тело функции — блок кода, который будет выполнен.
Макрос println!
Строка println!("Hello, world!"); выполняет вывод текста.
Обратите внимание на восклицательный знак ! после println. Это очень важная деталь.
* Если вы видите имя с !, значит, вы вызываете макрос, а не обычную функцию.
* Макросы в Rust — это мощный инструмент метапрограммирования, который генерирует код во время компиляции.
* В данном случае println! (print line) берет строку и печатает её в консоль, добавляя символ перевода строки в конце.
Точка с запятой
Строка заканчивается символом ;. В Rust, как и во многих C-подобных языках, точка с запятой указывает на завершение инструкции (statement). Это говорит компилятору: «Эта команда закончена, переходи к следующей».
Форматирование кода
Rust имеет строгие, но полезные стандарты форматирования. Официальный стиль предполагает использование 4 пробелов для отступа (не табуляции).
К счастью, вам не нужно следить за этим вручную. В экосистему Rust входит инструмент rustfmt. Вы можете отформатировать весь проект автоматически, выполнив команду:
Это гарантирует, что код всех Rust-разработчиков выглядит единообразно и читаемо.
Заключение
Сегодня мы сделали первый и самый важный шаг. Мы установили Rust с помощью rustup, узнали, что rustc — это компилятор, а cargo — наш верный помощник для управления проектами. Мы также разобрали структуру простейшей программы и узнали отличие макроса от функции.
В следующей статье мы погрузимся в основы синтаксиса: узнаем, как хранить данные с помощью переменных и почему неизменяемость — это хорошо.