Зарегистрироваться
Восстановить пароль
FAQ по входу

Макнамара Тим. Rust в действии

  • Файл формата djvu
  • размером 9,55 МБ
Макнамара Тим. Rust в действии
Пер. с англ. Николая Вильчинского. — СПб.: БХВ-Петербург, 2023. — 528 с.: ил. — ISBN 978-5-9775-1166-7.
Книга о прикладных аспектах языка программирования Rust, описывающая внутреннее устройство языка и сферы его использования. Rust рассматривается как современное дополнение для С при программировании ядра ОС и при системном программировании, а также как низкоуровневый скоростной язык, обеспечиваю­щий максимальную производительность. Объяснены тонкости работы с процессо­ром, многопоточное программирование, работа с памятью, а также взаимодействие с Linux. Изложенный материал позволяет как писать современные приложения на Rust с нуля, так и внедрять Rust в сложившуюся базу кода.
Главная цель книги — обучить вас программированию на языке Rust. В книге представлены довольно крупные и способствующие обучению рабочие проекты. По ходу изучения материала будут созданы база данных, эмулятор процессора, яд­ро операционной системы и разработано несколько других интересных проектов. Предстоит даже заняться процедуральным искусством. Каждый проект разработан с целью изучения языка программирования Rust в удобном для вас темпе. Для тех, кто еще не освоился в Rust-программировании, есть множество возможностей по расширению проектов в любом выбранном направлении.
Основной упор в примерах кода делается на доступность для начинающих. В них нет особых излишеств, применяемых в элегантных, идиоматических приемах языка Rust. Читатели, неплохо разбирающиеся в программировании на Rust, могут не со­гласиться с некоторыми принятыми в примерах стилевыми решениями. Но я наде­юсь, что они потерпят их ради тех, кто еще только учится.
Эта книга не задумывалась в качестве исчерпывающего справочника. Некоторые части языка и стандартной библиотеки были опущены. Как правило, здесь имеются в виду узкоспециализированные составляющие, изучению которых потребовалось бы уделить отдельное внимание. Вместо этого книга сосредоточена на предостав­лении читателям достаточного объема базовых знаний и придания уверенности в том, что, в случае необходимости, им будет по силам изучить опущенные здесь специализированные области. Книга также уникальна в семействе книг, посвящен­ных системному программированию, поскольку почти каждый приведенный в ней пример работает в Microsoft Windows.
Кому следует прочитать эту книгу:
Эта книга должна понравиться тем, кто интересуется языком Rust, кто учится на практических примерах, или тем, кто напуган фактом принадлежности Rust к язы­кам системного программирования. Наибольшую пользу от книги получат читате­ли, уже имеющие опыт программирования, поскольку в ней будет изложен ряд концепций, используемых при программировании компьютерного оборудования.
Книга ориентирована на специалистов по С, Linux, системному программи­рованию и на всех, кто желает освоить Rust и сразу приступить к работе с ним.
Предисловие
Благодарности
О книге
Кому следует прочитать эту книгу
Организация книги: дорожная карта
О программном коде
Дискуссионный форум liveBook
Другие онлайн-ресурсы
Об авторе
Об иллюстрации на обложке книги
Введение в Rust
Где используется Rust
С какой целью бьша написана книга «Rust в действии))
Вкус языка
Хитрый путь к «Hello, world!))
Ваша первая программа на Rust
Загрузка исходного кода книги
На что похож Rust
В чем заключается особенность Rust
Цель создания Rust: безопасность
Цель создания Rust: производительность
Цель создания Rust: управляемость
Особые возможности Rust
Достижение высокой производительности
Многопоточное выполнение программ
Достижение эффективной работы с памятью
Недостатки Rust
Циклические структуры данных
Время, затрачиваемое на компиляцию
Строгость
Объем языка
Излишний ажиотаж
Примеры использования ТLS-безопасности
HeartЫeed
Goto fail
Для чего Rust подходит лучше всего
В утилитах командной строки
В обработке данных
В расширяемых приложениях
В средах с ограниченными ресурсами
В серверных приложениях
В приложениях для ПК
О.7. В автономном режиме
В мобильных приложениях
В веб-режиме
В системном программировании
Скрытая фишка Rust: его сообщество
Разговорник по Rust
Резюме
Особенности языка Rusт
Основы языка
Создание работоспособной программы
Компиляция одиночных файлов с помощью утилиты rustc
Компиляция Rust-проектов с использованием cargo
Взгляд на синтаксис Rust
Определение переменных и вызов функций
Числа
Целые и десятичные (с плавающей точкой) числа
Записи целых чисел с основанием 2, 8 и
Сравнение чисел
Рациональные, комплексные числа и другие числовые типы
Управление ходом выполнения программы
For: основной механизм итераций
Continue: пропуск оставшейся части текущей итерации
While: выполнение цикла, пока не изменится состояние условия
Loop: основа для циклических конструкций Rust
Break: прерывание цикла
If, ifelse и else: условное ветвление
Match: соответствие образцу с учетом типов
Определение функций
Использование указателей
Проект: визуализация множества Мандельброта
Расширенные определения функций
Явные аннотации времени жизни
Обобщенные функции
Создание grep-lite
О. Создание списков с использованием массивов, слайсов и векторов
Массивы
Слайсы
Векторы
Включение стороннего кода
Создание документации по сторонним контейнерам в локальной среде
Управление имеющимся в Rust набором инструментальных средств с помощью rustup
Поддержка аргументов командной строки
Чтение данных из файлов
Чтение из стандартного устройства ввода stdin
Резюме
Составные типы данных
Использование простых функций для экспериментов с API
Моделирование файлов с помощью struct
Добавление методов к структуре struct путем использования блока impl
Упрощение создания объектов за счет реализации метода new ()
Возвращение сообщений об ошибках
Изменение значения известной глобальной переменной
Использование возвращаемого типа Result
Определение и использование перечисления enum
Использование enum для управления внутренним состоянием
Определение общего поведения с помощью типажей
Создание типажа Read
Реализация std::fmt::Display для ваших собственных типов
Выставление своих типов на всеобщее обозрение
Protecting private data Защита личных данных
Создание встроенной документации ваших проектов
Использование rustdoc для визуализации документов, касающихся одного исходного файла
Использование cargo для визуализации документов для контейнера и его зависимостей
Резюме
Время жизни, владение и заимствование
Реализация имитации наземной станции CubeSat
Выявление первой проблемы, связанной со временем жизни
Особое поведение элементарных типов
Справочник по рисункам, используемым в этой главе
Кто такой владелец? Есть ли у него какие-либо обязанности
Как происходит переход владения
Решение проблем, связанных с владением
Если полное владение не требуется, используйте ссылки
Сократите количество долгоживущих значений
Продублируйте значение
Заключите данные в специальные типы
Резюме
Демистификация системного программирования
Углубленное изучение данных
Комбинации битов и типы
Жизнь целых чисел
Усвоение порядка следования байтов
Представление десятичных чисел
Числа с плавающей точкой
Взгляд на fЗ2 изнутри
Выделение знакового бита
Выделение экспоненты
Выделение мантиссы
Разбиение числа с плавающей точкой на составные части
Форматы чисел с фиксированной точкой
Генерация случайных вероятностей из случайных байтов
Реализация центрального процессора (CPU), чтобы удостовериться, что функции также являются данными
CPU RIA/1: сумматор
Полный листинг кода для CPU RIA/1: сумматор
CPU RIA/2: мультипликатор
CPU RIA/3: блок вызова
CPU 4: добавление всего остального
Резюме
Память
Указатели
Исследование типов ссылок и указателей, имеющихся в Rust
Обычные указатели, используемые в Rust
Экосистема указателей Rust
Строительные блоки интеллектуальных указателей
Предоставление программам памяти для размещения их данных
Стек
Куча
Что такое динамическое распределение памяти
Анализ влияния, оказываемого динамическим выделением памяти
Виртуальная память
История вопроса
Шаг 1. Сканирование процессом собственной памяти
Преобразование виртуальных адресов в физические
Шаг 2. Работа с операционной системой для сканирования адресного пространства
Шаг 3. Чтение и запись в память процесса
Резюме
Файлы и хранилища
Что такое формат файла
Создание собственных форматов файлов для хранения данных
Запись данных на диск с помощью serde и формата Ьincode
Реализация клона hexdump
Файловые операции, проводимые в Rust
Открытие файла в Rust и управление его режимом доступности
Безопасное взаимодействие с файловой системой с помощью
Path
Реализация хранилища «ключ-значение)> с архитектурой, структурированной по записям и доступной только для добавления
Модель «ключ-значение
Представление actionkv vl: хранилище ключей и значений в памяти с интерфейсом командной строки
Actionkv vl: интерфейсный код
Настройка продукта условной компиляции
Понимание сути actionkv: контейнер libactionkv
Инициализация структуры ActionКV
Работа с отдельно взятой записью
Запись многобайтных двоичных данных на диск в гарантированном порядке следования байтов
Проверка ошибок ввода-вывода с помощью контрольных сумм
Вставка в существующую базу данных новой пары
Полный код листинга для actionkv
Работа с ключами и значениями с использованием
HashМap и BTreeMap
Создание HashМap и ее заполнение значениями
Извлечение значений из HashМap и BTreeMap
Что выбрать: HashМap или BTreeMap
Добавление к actionkv v2.0 индекса базы данных
Резюме
Работа в сети
Все о сетевой работе в семи абзацах
Создание НТТР GЕТ-запроса с использованием reqwest
Типажные объекты
На что способны типажные объекты
Что такое типажные объекты
Создание небольшой ролевой игры: rрg-проект
ТСР
Что такое номер порта
Преобразование имени хоста в IР-адрес
Способы обработки ошибок, наиболее удобные для помещения в библиотеки
Проблема: невозможность возвращения нескольких типов ошибок
Заключение в оболочку нижестоящих ошибок путем определения нашего собственного типа ошибки
Фокусы с unwrap() и expect()
МАС-адреса
Создание МАС-адресов
Реализация конечных автоматов с помощью перечислений
Чистый ТСР
Создание виртуального сетевого устройства
«Чистый» НТТР
Резюме
Время и хронометраж
Предыстория вопроса
Источники времени
Определения
Кодирование времени
Представление часовых поясов
ISO 8601 и стандартами электронной почты
Реструктуризация кода clock v0.1.0 с целью более широкой архитектурной поддержки
Форматирование времени
Предоставление полноценного интерфейса командной строки
Общее поведение
Установка времени для операционных систем, использующих libc
Установка времени в MS Windows
Более совершенные способы обработки ошибок
Network Тime Protocol (NTP)
Отправка NТР-запросов и интерпретация ответов
Корректировка местного времени по ответу сервера
Преобразования между представлениями о времени, использующими различные степени точности и эпохи
Резюме
Процессы, потоки и контейнеры
Безымянные функции
Порождение потоков
Введение в замыкания
Порождение потока
Эффект от порождения нескольких потоков
Эффект от порождения множества потоков
Воспроизведение результатов
Совместно используемые переменные
Отличие замыканий от функций
Аватары, процедурно генерируемые из многопоточного парсера и генератора кода
Как запустить проект render-hex, и как выглядит его предполагаемый вывод
Обзор однопоточной версии render-hex
Порождение потока для каждой логической задачи
Использование пула потоков и очереди задач
Конкурентные вычисления и виртуализация задач
Потоки
Что такое контекстное переключение
Процессы
WebAssemЬly
Контейнеры
А зачем вообще использовать операционную систему
Резюме
Ядро операционной системы
Оперяющаяся операционная система (FledgeOS)
Настройка среды разработки под создание ядра операционной системы
Проверка среды разработки
FledgeOS-0: получение хоть чего-то работоспособного
Первая загрузка
Инструкции по компиляции
Листинги исходного кода
Способы справиться с паникой
Вывод информации на экран с использованием
VGА-совместимого текстового режима
FledgeOS
Экономия ресурсов за счет прямого взаимодействия с центральным процессором
Исходный код fledgeos
Почти что правильная обработка исключений
Исходный код fledgeos
Вывод на экран цветного текста
Управление представлением перечислений в памяти
Зачем использовать перечисления
Создание шрифта для вывода информации в буфер кадра VGA
Вывод на экран
Исходный код fledgeos
Реализация обработчика паники, сообщающего пользователю об ошибке
Повторная реализация panic() с использованием core::fmt::Write
Реализация core::fmt::Write
Исходный код fledge
Резюме
Сигналы, прерывания и исключения
Глоссарий
Сравнение сигналов и прерываний
Влияние прерываний на приложения
Программные прерывания
Аппаратные прерывания
Обработка сигналов
Поведение по умолчанию
Приостановка и возобновление работы программы
Перечень всех сигналов, поддерживаемых операционной системой
Обработка сигналов с помощью настраиваемых действий
Применение в Rust глобальных переменных
Использование глобальной переменной для указания на инициирование завершения выполнения программы
Отправка сигналов, определяемых в приложении
Общие сведения об указателях на функции и их синтаксисе
Игнорирование сигналов
Завершение работы из глубокой вложенности в стеке вызовов
Представление проекта sjlj
Настройка встроенных функций для их использования в программе
Приведение указателя к другому типу
Компиляция кода проекта sjlj
Исходный код проекта sjlj
Заметка о применении этих методов на платформах, не использующих сигналы
Пересмотр исключений
Резюме
  • Чтобы скачать этот файл зарегистрируйтесь и/или войдите на сайт используя форму сверху.
  • Регистрация