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