Введение
Примечание: Это издание книги идентично The Rust Programming Language, доступному в печатном и электронном виде от издательства No Starch Press.
Добро пожаловать в Язык программирования Rust, вводную книгу о Rust. Язык программирования Rust помогает вам писать более быстрый и надёжный код. Эргономика высокого уровня и низкоуровневый контроль часто противоречат друг другу в дизайне языков программирования; Rust бросает вызов этому конфликту. Балансируя мощные технические возможности и отличный опыт разработчика, Rust даёт вам возможность контролировать низкоуровневые детали (такие как использование памяти) без всех хлопот, традиционно связанных с таким контролем.
Для кого предназначен Rust
Rust идеально подходит для многих людей по разным причинам. Давайте рассмотрим несколько наиболее важных групп.
Команды разработчиков
Rust доказывает свою продуктивность для совместной работы в крупных командах разработчиков с разным уровнем знаний в системном программировании. Низкоуровневый код подвержен различным тонким ошибкам, которые в большинстве других языков можно обнаружить только благодаря масштабному тестированию и тщательному ревью кода опытными разработчиками. В Rust компилятор играет роль хранителя, отказываясь компилировать код с этими неуловимыми ошибками, включая ошибки конкурентности. Работая вместе с компилятором, команда может сосредоточиться на логике программы, а не на поиске ошибок.
Rust также приносит современные инструменты разработчика в мир системного программирования:
- Cargo, встроенный менеджер зависимостей и инструмент сборки, делает добавление, компиляцию и управление зависимостями простым и последовательным во всей экосистеме Rust.
- Инструмент форматирования Rustfmt обеспечивает единый стиль кодирования для всех разработчиков.
- Rust-анализатор обеспечивает интеграцию со средой разработки (IDE) для автодополнения кода и встроенных сообщений об ошибках.
Используя эти и другие инструменты экосистемы Rust, разработчики могут быть продуктивными, пиша системный код.
Студенты
Rust предназначен для студентов и тех, кто интересуется изучением системных концепций. Используя Rust, многие люди узнают о таких темах, как разработка операционных систем. Сообщество очень дружелюбно и готово отвечать на вопросы студентов. Благодаря таким усилиям, как эта книга, команды Rust хотят сделать системные концепции более доступными для большего количества людей, особенно для новичков в программировании.
Компании
Сотни компаний, как крупных, так и небольших, используют Rust в продакшене для различных задач, включая инструменты командной строки, веб-сервисы, инструменты DevOps, встроенные устройства, анализ и транскодирование аудио и видео, криптовалюты, биоинформатику, поисковые системы, приложения Интернета вещей, машинное обучение и даже основные части веб-браузера Firefox.
Разработчики открытого исходного кода
Rust предназначен для тех, кто хочет развивать язык программирования Rust, сообщество, инструменты разработчика и библиотеки. Мы будем рады, если вы внесёте свой вклад в язык Rust.
Люди, ценящие скорость и стабильность
Rust предназначен для тех, кто жаждет скорости и стабильности в языке. Под скоростью мы подразумеваем как то, как быстро может выполняться код на Rust, так и скорость, с которой Rust позволяет вам писать программы. Проверки компилятора Rust обеспечивают стабильность при добавлении функций и рефакторинге. Это контрастирует с хрупким устаревшим кодом в языках без таких проверок, который разработчики часто боятся изменять. Стремясь к абстракциям нулевой стоимости — высокоуровневым функциям, которые компилируются в такой же низкоуровневый код, как и написанный вручную, — Rust старается сделать безопасный код также быстрым.
Язык Rust надеется поддержать и многих других пользователей; упомянутые здесь — лишь некоторые из крупнейших заинтересованных сторон. В целом, величайшая амбиция Rust — устранить компромиссы, которые программисты принимали десятилетиями, обеспечивая безопасность и продуктивность, скорость и эргономику. Попробуйте Rust и посмотрите, подходят ли вам его решения.
Для кого предназначена эта книга
Эта книга предполагает, что вы уже писали код на другом языке программирования, но не делает никаких предположений о том, на каком именно. Мы постарались сделать материал доступным для широкого круга людей с разным программным опытом. Мы не тратим много времени на то, что такое программирование вообще или как о нём думать. Если вы абсолютно новичок в программировании, вам лучше подойдёт книга, которая специально предоставляет введение в программирование.
Как использовать эту книгу
В целом, эта книга предполагает, что вы читаете её последовательно от начала до конца. Последующие главы опираются на концепции из предыдущих глав, а в предыдущих главах некоторые темы могут не раскрываться в деталях, но будут рассмотрены позже.
Вы найдёте два вида глав в этой книге: концептуальные главы и проектные главы. В концептуальных главах вы узнаете об аспекте Rust. В проектных главах мы вместе построим небольшие программы, применяя то, что вы уже выучили. Главы 2, 12 и 21 — это проектные главы; остальные — концептуальные.
Глава 1 объясняет, как установить Rust, как написать программу “Hello, world!” и как использовать Cargo, менеджер пакетов и инструмент сборки Rust. Глава 2 — это практическое введение в написание программ на Rust, где вы создадите игру “угадай число”. Здесь мы рассматриваем концепции на высоком уровне, а последующие главы дадут дополнительные детали. Если вы хотите сразу начать практиковаться, глава 2 — это место для этого. Глава 3 охватывает возможности Rust, которые похожи на возможности других языков программирования, а в главе 4 вы узнаете о системе владения Rust. Если вы особенно скрупулёзный ученик, который предпочитает изучить каждую деталь, прежде чем переходить к следующей, вы можете пропустить главу 2 и перейти сразу к главе 3, вернувшись к главе 2, когда захотите поработать над проектом, применяя изученные детали.
Глава 5 обсуждает структуры и методы, а глава 6 охватывает перечисления, выражения match и конструктор управления потоком if let. Вы будете использовать структуры и перечисления для создания пользовательских типов в Rust.
В главе 7 вы узнаете о системе модулей Rust и о правилах конфиденциальности для организации вашего кода и его публичного API (Application Programming Interface). Глава 8 обсуждает некоторые общие структуры данных коллекций, которые предоставляет стандартная библиотека, такие как векторы, строки и хэш-карты. Глава 9 исследует философию и техники обработки ошибок в Rust.
Глава 10 углубляется в обобщения, типажи и время жизни, которые дают вам возможность определять код, применимый к нескольким типам. Глава 11 полностью посвящена тестированию, которое даже с гарантиями безопасности Rust необходимо для обеспечения корректности логики вашей программы. В главе 12 мы создадим свою реализацию подмножества функциональности инструмента командной строки grep, который ищет текст внутри файлов. Для этого мы используем многие концепции, обсуждённые в предыдущих главах.
Глава 13 исследует замыкания и итераторы: возможности Rust, которые пришли из функциональных языков программирования. В главе 14 мы рассмотрим Cargo более подробно и поговорим о лучших практиках для совместного использования ваших библиотек с другими. Глава 15 обсуждает умные указатели, которые предоставляет стандартная библиотека, и типажи, обеспечивающие их функциональность.
В главе 16 мы рассмотрим различные модели конкурентного программирования и поговорим о том, как Rust помогает вам программировать в нескольких потоках без страха. В главе 17 мы строим на этом, исследуя синтаксис async и await в Rust, а также задачи, будущие значения (futures) и потоки (streams), и облегчённую модель конкурентности, которую они обеспечивают.
Глава 18 смотрит, как идиомы Rust сравниваются с принципами объектно-ориентированного программирования, с которыми вы могли быть знакомы. Глава 19 — это справочник по шаблонам и сопоставлению с образцом, которые являются мощными способами выражения идей в программах на Rust. Глава 20 содержит подборку продвинутых тем, включая небезопасный Rust, макросы и больше о времени жизни, типажах, типах, функциях и замыканиях.
В главе 21 мы завершим проект, в котором реализуем многопоточный веб-сервер низкого уровня!
Наконец, некоторые приложения содержат полезную информацию о языке в более справочном формате. Приложение A охватывает ключевые слова Rust, Приложение B охватывает операторы и символы Rust, Приложение C охватывает выводимые типажи, предоставляемые стандартной библиотекой, Приложение D охватывает некоторые полезные инструменты разработки, а Приложение E объясняет редакции Rust. В Приложении F вы можете найти переводы книги, а в Приложении G мы рассмотрим, как создаётся Rust и что такое ночной Rust.
Нет неправильного способа читать эту книгу: если хотите пропустить вперёд, делайте это! Возможно, вам придётся вернуться к предыдущим главам, если вы столкнётесь с путаницей. Но делайте то, что работает для вас.
Важной частью процесса изучения Rust является обучение чтению сообщений об ошибках, которые показывает компилятор: они направят вас к рабочему коду. Как таковые, мы предоставим много примеров, которые не компилируются, вместе с сообщением об ошибке, которое компилятор покажет вам в каждой ситуации. Знайте, что если вы введёте и запустите случайный пример, он может не скомпилироваться! Убедитесь, что вы читаете окружающий текст, чтобы увидеть, предназначен ли пример, который вы пытаетесь запустить, для ошибки. Ferris также поможет вам отличить код, который не предназначен для работы:
| Ferris | Значение |
|---|---|
| Этот код не компилируется! | |
| Этот код вызывает панику! | |
| Этот код не даёт желаемого поведения. |
В большинстве ситуаций мы приведём вас к правильной версии любого кода, который не компилируется.
Исходный код
Исходные файлы, из которых генерируется эта книга, можно найти на GitHub.