10,49 €
Официальный гид по языку программирования Rust от команды разработчиков Rust из Mozilla Foundation. Добро пожаловать в мир Rust! Этот официальный гид поможет вам создавать более быстрое и надежное программное обеспечение. Высокоуровневая эргономика и низкоуровневое управление часто противоречат друг другу, но Rust бросает вызов этому конфликту. Авторы книги входят в команду разработчиков языка, а значит, вы получите всю информацию из первых рук — от установки языка до создания надежных и масштабируемых программ. От создания функций, выбора типов данных и привязки переменных вы перейдете к более сложным концепциям: - Владение и заимствование, жизненный цикл и типажи. - Гарантированная безопасность программ. - Тестирование, обработка ошибок и эффективный рефакторинг. - Обобщения, умные указатели, многопоточность, типажные объекты и сопоставления. - Работа со встроенным менеджером пакетов Cargo для создания, тестирования, документирования кода и управления зависимостями. - Продвинутые средства работы с Unsafe Rust. Вы найдете множество примеров кода, а также три главы, посвященные созданию полноценных проектов для закрепления знаний: игры-угадайки, создание инструмента командной строки и многопоточного сервера.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Seitenzahl: 801
Veröffentlichungsjahr: 2023
Переводчик А. Логунов
Литературный редактор И. Кизилова
Художник В. Мостипан
Корректоры С. Беляева, Н. Сидорова
Стив Клабник, Кэрол Николс
Программирование на Rust. — СПб.: Питер, 2020.
ISBN 978-5-4461-1656-0
© ООО Издательство "Питер", 2020
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Не сразу очевидно, но язык программирования Rust всецело строится на расширении возможностей: независимо от того, какой код вы пишете сейчас, Rust наделяет вас возможностями достичь большего, уверенно программировать в более широком спектре областей, чем раньше.
Возьмем, например, работу «на системном уровне», которая завязана на низкоуровневые детали управления памятью, представления данных и конкурентности. Традиционно на эту сферу программирования смотрят как на доступную только избранным, которые посвятили годы обучения, чтобы избежать ее печально известных ловушек. И даже те, кто работает в этой области, действуют весьма осторожно, чтобы не подвергать свой код уязвимостям, аварийным сбоям и повреждениям.
Язык Rust разрушает эти барьеры, устраняя старые ловушки и предоставляя дружественный, безупречный набор инструментов, который поможет вам на этом пути. Программисты, которым нужно погрузиться в более низкоуровневое управление, смогут сделать это с помощью языка Rust, не беря на себя привычный риск сбоев или дыр в безопасности и не изучая тонкости переменчивой цепочки инструментов. Более того, данный язык разработан так, чтобы естественным образом направлять вас к надежному коду, который является эффективным с точки зрения скорости и использования памяти.
Программисты, которые уже работают с низкоуровневым кодом, могут использовать Rust для повышения своих амбиций. Например, введение в Rust конкурентности является операцией с относительной невысокой степенью риска: компилятор будет отлавливать типичные ошибки за вас. И вы можете заняться более активной оптимизацией в коде и быть уверенным, что случайно не внесете сбои или уязвимости.
Но Rust не ограничивается программированием низкоуровневых систем. Он является выразительным и эргономичным настолько, что делает приятным написание CLI-приложений, веб-серверов и многих других видов кода — позже в книге вы найдете простые примеры того и другого. Работа с Rust позволяет накапливать навыки, применимые в одной области, и использовать их в другой сфере. Вы можете усвоить язык Rust, написав веб-приложение, а затем применить те же навыки в разработке кода для Raspberry Pi.
Эта книга всеобъемлюще охватывает потенциал языка Rust, наделяя его пользователей расширенными возможностями. Этот доступный текст был задуман для того, чтобы помочь вам повысить не только уровень знаний о языке Rust, но и ваши достижения и уверенность в себе как программиста в целом. Так что погружайтесь, готовьтесь учиться, и добро пожаловать в сообщество языка Rust!
Николас Мацакис и Аарон Турон
Авторы исходят из того, что вы используете язык Rust 1.31.0 или более позднюю версию с опцией edition="2018" во всех проектах Cargo.toml, где применяются идиомы Rust в редакции 2018 года. См. раздел «Установка» для получения информации об установке или обновлении Rust, а также приложение Д, где можно найти сведения о редакциях языка.
Редакция 2018 года языка Rust включает в себя ряд улучшений, которые делают Rust эргономичнее и проще в освоении. Настоящая версия книги содержит ряд изменений, отражающих эти улучшения:
• Глава 7 «Управление растущими проектами с помощью пакетов, упаковок и модулей» была в основном переписана. Система модулей и характер работы путей в редакции 2018 года были сделаны более согласованными.
• В главе 10 появились новые разделы, озаглавленные «Типажи в качестве параметров» и «Возвращение типов, реализующих типажи», которые объясняют новый синтаксис impl Trait.
• В главе 11 есть новый раздел под названием «Использование типа Result<T, E> в тестах», где показаны способы написания тестов, в которых используется оператор ?.
• Раздел «Продвинутые сроки жизни» в главе 19 был удален, поскольку улучшения компилятора сделали конструкции в этом разделе еще более редкими.
• Предыдущее приложение Г «Макрокоманды» было расширено за счет процедурных макрокоманд и перенесено в раздел «Макрокоманды» главы 19.
• Приложение А «Ключевые слова» также объясняет новое языковое средство под названием «сырые идентификаторы», которое позволяет взаимодействовать коду, написанному в редакции 2015 года, c редакцией 2018 года.
• Приложение Г теперь называется «Полезные инструменты разработки», в нем рассказывается о недавно выпущенных инструментах, которые помогают вам писать код Rust.
• В книге мы исправили ряд мелких ошибок и неточных формулировок. Спасибо читателям, которые о них сообщили!
Обратите внимание, что любой код в первом варианте этой книги, который компилировался, будет продолжать компилироваться без опции edition="2018" в Cargo.toml проекта, даже после того как вы обновите используемую вами версию компилятора Rust. Яркий пример гарантии обратной совместимости Rust в действии!
Мы хотели бы поблагодарить всех, кто работал над Rust, за создание удивительного языка, о котором стоит написать книгу. Мы благодарны всем участникам сообщества языка Rust за их радушие и создание среды, достойной того, чтобы пригласить туда еще больше людей.
Мы особенно благодарны всем, кто читал первые редакции этой книги онлайн и давал отзывы, отчеты об ошибках и запросы на включение внесенных изменений. Особая благодарность Эдуарду-Михаю Буртеску и Алексу Крайтону за научное редактирование и Карен Рустад Тельва за обложку. Спасибо нашей команде из издательства No Starch — Биллу Поллоку, Лиз Чедвик и Джанель Людовиз — за то, что они усовершенствовали эту книгу и издали ее.
Стив хотел бы поблагодарить Кэрол за то, что она была замечательным соавтором. Без нее эта книга была бы гораздо менее качественной и написание заняло бы гораздо больше времени. Дополнительная благодарность Эшли Уильямс, которая оказала невероятную поддержку на всех этапах.
Кэрол хотела бы поблагодарить Стива за то, что он пробудил в ней интерес к Rust и дал возможность поработать над этой книгой. Она благодарна своей семье за постоянную любовь и поддержку, в особенности мужу Джейку Гулдингу и дочери Вивиан.
Стив Клабник возглавляет команду по документированию Rust и является одним из ключевых разработчиков языка. Часто выступает с лекциям и пишет много открытого исходного кода. Ранее работал над такими проектами, как Ruby и Ruby on Rails.
Кэрол Николс является членом команды разработчиков Rust Core и соучредителем Integer 32, LLC, первой в мире консалтинговой компании по разработке ПО, ориентированной на Rust. Николс является организатором конференции «Ржавый пояс» (Rust Belt) по языку 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 шанс и посмотрите, подходят ли вам его возможности.
Мы предполагаем, что вы писали код на другом языке программирования, но не делаем никаких допущений относительно того, на каком именно. Мы постарались сделать этот материал доступным для тех, кто имеет широкий спектр навыков программирования. Мы не будем тратить время на разговоры о том, что такое программирование. Если вы в программировании абсолютный новичок, то для начала прочтите введение в программирование.
В общем-то, авторы этой книги исходят из того, что вы читаете ее последовательно, от начала до конца. Последующие главы строятся на понятиях предыдущих глав, и в начальных главах мы можем не углубляться в детали по конкретной теме; обычно мы возвращаемся к этой теме в дальнейшем.
В этой книге вы найдете два типа глав: концептуальные и проектные. В концептуальных главах вы будете усваивать тот или иной аспект языка. Мы вместе будем создавать небольшие программы, применяя то, что вы уже усвоили. Главы 2, 12 и 20 посвящены разработке проектов, остальные главы — концептуальные.
В главе 1 рассказано, как установить Rust, написать программу «Hello, World!» и использовать пакетный менеджер и инструмент Cargo. Глава 2 представляет собой практическое введение в язык Rust. Здесь мы рассмотрим понятия с точки зрения высокоуровневого языка, а в последующих главах приведем дополнительные подробности. Если вы хотите сразу же приступить к практике, то сможете это сделать. Можно даже пропустить главу 3, в которой рассматриваются средства языка Rust, аналогичные средствам других языков программирования, сразу перейти к главе 4 и узнать о системе владения в Rust. Но если вы дотошны и предпочитаете разбирать каждую деталь, прежде чем переходить к следующей, то можете пропустить главу 2, перейти к главе 3, а затем вернуться к главе 2, когда захотите поработать над проектом. Так вы сможете применить знания, которые освоили.
В главе 5 обсуждаются структуры и методы, а в главе 6 рассматриваются перечисления, выражения match и конструкция управления потоком iflet. Вы будете использовать структуры и перечисления для создания в языке Rust настраиваемых типов.
В главе 7 вы узнаете о системе модулей и правилах конфиденциальности для выстраивания организационной структуры вашего кода и его публичном интерфейсе программирования приложений (API). В главе 8 обсуждаются некоторые часто встречающиеся структуры сбора данных, обеспечиваемые стандартной библиотекой, такие как векторы, строки и хеш-отображения. В главе 9 изучаются философия и методы обработки ошибок.
В главе 10 мы погрузимся в обобщения, типажи и жизненные циклы, которые дают вам возможность определять код, применимый к нескольким типам. Глава 11 полностью посвящена тестированию, которое даже несмотря на гарантии безопасности языка Rust является необходимым для обеспечения правильной логики программы. В главе 12 мы построим собственную реализацию подмножества функциональности инструмента командной строки grep, которая ищет текст внутри файлов. Для этого мы воспользуемся многими понятиями, которые обсуждаются в предыдущих главах.
В главе 13 рассматриваются замыкания и итераторы — средства, которые восходят к функциональным языкам программирования. В главе 14 мы изучим Cargo подробнее и расскажем о лучших практических приемах обмена библиотеками с другими разработчиками. В главе 15 обсуждаются умные указатели, которые обеспечивает стандартная библиотека, и типажи, которые гарантируют их функциональность.
В главе 16 мы рассмотрим разные модели конкурентного программирования и поговорим о том, как Rust помогает вам безбоязненно программировать в множестве потоков исполнения. Глава 17 обращается к сопоставлению идиом Rust с принципами объектно-ориентированного программирования, с которыми вы, возможно, знакомы.
Глава 18 представляет собой справочный материал о паттернах и сопоставлении с паттернами, которые являются мощными способами выражения идей во всех программах на языке Rust. Глава 19 содержит ряд дополнительных тем, представляющих интерес, включая небезопасный код Rust, макрокоманды и другие сведения о типажах, типах, функциях и замыканиях.
В главе 20 мы осуществим проект, в котором выполним реализацию низкоуровневого многопоточного сервера!
Наконец, несколько приложений в конце книги содержат полезную информацию о языке в справочном формате. В приложении А приводятся ключевые слова языка Rust, в приложении Б рассказывается об операторах и символах языка Rust, в приложении В рассматриваются генерируемые типажи, предусмотренные стандартной библиотекой, в приложении Г приводятся некоторые полезные инструменты разработчика, а в приложении Д даются пояснения по поводу редакций языка Rust.
Просто невозможно прочитать эту книгу неправильно: если вы хотите пропустить что-то, пропускайте! В случае если вы почувствуете какую-то путаницу, то, возможно, вам придется вернуться к предыдущим главам. Короче, делайте все, что вам подходит.
Важная часть процесса усвоения языка Rust — научиться читать сообщения об ошибках, выводимые на экран компилятором: они будут направлять вас к рабочему коду. В связи с этим мы приведем много примеров, которые не компилируются вместе с сообщением об ошибке, которое компилятор покажет вам в каждой ситуации. Знайте, что если вы введете и запустите выполнение случайного примера, то он может не скомпилироваться! Обязательно прочтите окружающий текст, чтобы увидеть, что пример, который вы пытаетесь выполнить, является неизбежно ошибочным. В большинстве ситуаций мы будем вести вас к правильной версии любого кода, который не компилируется.
Эта книга распространяется по лицензии открытого исходного кода и текста. Если вы нашли ошибку, то, пожалуйста, не стесняйтесь добавить сообщение о проблеме или отправить запрос на включение внесенных изменений на GitHub по адресу https://github.com/rust-lang/book/. Более подробную информацию смотрите в CONTRIBUTING.md по адресу https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md.
Исходный код примеров из этой книги, список опечаток и другая информация доступны по адресу https://www.nostarch.com/Rust2018/.
Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.