Rust для системного программирования: полное руководство

Rust для системного программирования: полное руководство

Rust для системного программирования: полное руководство
Автор: Хармуш Махмуд
Оригинальное название: Ultimate Rust for Systems Programming: Master Core Programming for Architecting Secure and Reliable Software Systems with Rust and WebAssembly
Оригинальный правообладатель: Orange Education Pvt Ltd, AVA®
Переводчик: Логунов А.В.
Дата выхода: 2026
Издательство: ДМК Пресс
Количество страниц: 656
Размер файла: 6,1 МБ
Тип файла: PDF
Добавил: it-books

Об авторе....21

О техническом рецензенте....22

Признательности....23

Предисловие....24

Скачивание архивов с исходным кодом и цветными изображениями....25

От издательства....26

Глава 1....27

Системное программирование на языке Rust....27

Введение....27

Содержание главы....27

Защищенность и производительность....28

Защита памяти....29

Обращение к памяти по пустому указателю....30

Переполнение буфера....35

Сборщик мусора....37

Многопоточность и параллелизм....40

Сопоставление с шаблоном....45

Времена жизни....46

Абстракции с нулевой стоимостью ....47

Интерфейс с внешними функциями (FFI)....49

Обработка ошибок....50

Контролируемые незащищенные операции....51

Инструментарий Rust ....51

Практические применения....52

Будущее вместе с Rust ....52

Отзывчивое сообщество ....53

За пределами основ....53

Заметные проекты на Rust....53

Установка Rust....55

Установка языка в Windows....55

Установка в Linux....57

Установка Rust в MacOS....58

Все готово к работе!....58

Интегрированная среда разработки и инструменты....58

Выбор интегрированной среды разработки....59

Visual Studio Code (VS Code)....59

Основные инструменты Rust....60

Менеджер пакетов....60

Анализатор исходного кода....60

Форматирование исходного кода....60

Написание первой программы на Rust....61

Начало работы....61

Написание исходного кода....61

Компиляция и запуск....61

Cargo: менеджер пакетов исходного кода на Rust....63

Знакомство с менеджером Cargo....63

Создание нового проекта....63

Навигация по структуре проекта....63

Сборка и запуск....64

Управление зависимостями....64

Тестирование и документация....65

Обследование других функциональных возможностей менеджера Cargo....65

Заключение....65

Дополнительные ресурсы....66

Вопросы для самопроверки....66

Ответы....69

Ключевые термины....69

Глава 2....72

Основы Rust....72

Введение....72

Содержание главы....72

Переменные и типы данных....73

Введение в переменные....73

Мутируемость....75

Затенение ....75

Константы....77

Числовые примитивы....78

Фиксированная ширина....79

Целочисленные типы....79

Символы и числовые типы....80

Строки и символы....82

Итерация по символам и операции со строковыми значениями....82

Использование числовых конвертаций....83

Арифметические операции....84

Сложение....85

Вычитание....85

Умножение....85

Деление....86

Взятие остатка от деления....86

Числа с плавающей точкой....87

f32 для эффективности....87

f64 для глубины точности....88

Литералы чисел с плавающей точкой....89

Математические операции....89

Ориентация в сложностях....90

Приближенное равенство....90

Освоение чисел с плавающей точкой....91

Булевы значения....91

Сложные типы данных....95

Строковые значения....95

Подстроки....96

Комбинирование строковых значений....96

Массивы....97

Преимущества фиксированного размера....98

Синтаксис и объявление....98

Надежность в сложных условиях....98

Кортежи....99

Деструктуризация кортежей....99

Управляющие конструкции....100

Условные инструкции....101

Циклы while....101

Циклы for....101

Конструкция loop....102

Выражения match....102

Функции....103

Явные сигнатуры ....103

Вложенные функции для модульности....103

Замыкания ....104

Владение, заимствование и времена жизни....104

Владение....104

Контролер заимствования ....105

Повышение производительности....106

Заключение....106

Вопросы для самопроверки ....106

Ответы....109

Ключевые термины....110

Глава 3....111

Общие черты и обобщения....111

Введение....111

Содержание главы....111

Общие черты....112

Реализация общих черт....112

Общая черта с дефолтным поведением....114

Границы общих черт....115

Расширение с помощью обобщений....116

Обобщения ....116

Адаптивные структуры....117

Ассоциированные функции....118

Ассоциированные типы....119

Объекты динамической диспетчеризации....121

Практические применения....122

Границы общих черт в стандартной библиотеке....124

Продвинутые шаблоны общих черт....125

Ассоциированные константы....125

Перегрузка операторов....125

Маркерные общие черты....126

Комбинирование общих черт....127

Избегание конфликтов общих черт....128

Всеохватывающие реализации....129

Суперчерты....130

Шаблон-обертка....131

Типы с динамически изменяемым размером....133

Условное соблюдение ....135

Программирование на уровне типов ....136

Соображения производительности....138

Заключение....138

Вопросы для самопроверки....139

Ответы....142

Глава 4....143

Встроенные в Rust структуры данных....143

Введение....143

Содержание главы....144

Массивы в Rust....144

Создание массивов....145

Доступ к элементам массива....145

Изменение элементов массива....147

Выполнение итераций по элементам массива в цикле....148

Взятие срезов из массивов....148

Многомерные массивы....150

Работа с методами массивов....151

Инициализация массивов и дефолтные значения....152

Инициализация дефолтными значениями....152

Генерирование шаблонов с помощью итераторов....152

Инициализация вычисляемыми значениями....152

Длина массива и проверка границ....153

Получение длины....153

Проверка границ ....154

Копирование и клонирование массивов....154

Копирование массивов....154

Клонирование массивов....154

Векторы....155

Создание векторов....156

Доступ к элементам и их изменение....156

Изменение векторов....157

Добавление элементов....157

Обновление элементов....158

Удаление элементов....159

Выполнение итераций по элементам в цикле....160

Использование цикла for....160

Использование метода iter_mut для мутируемой итерации....161

Использование метода enumerate для получения индекса и значения....162

Кортежи....162

Создание и инициализация кортежей....163

Доступ к элементам кортежа....163

Деструктуризация кортежей....164

Кортежные шаблоны и продвинутое использование....164

Варианты использования из реальной практики....165

Координатные вычисления....165

Обработка ошибок с помощью кортежей Result....165

Ограничения кортежей....166

Кортежи в операции сопоставления с шаблоном....166

Сопоставление кортежа с шаблонами....166

Игнорирование элементов кортежа....167

Вложенные кортежи и шаблоны....167

Опровержимость кортежных шаблонов ....168

Владение и заимствование в кортежах....168

Владение кортежами....169

Заимствование кортежей....169

Взятие срезов кортежей и оператор развертывания....170

Создание срезов элементов кортежей....170

Доступ к срезам кортежей ....171

Кортежи как аргументы функций и возвращаемые из них значения....171

Использование кортежей в качестве аргументов функций....171

Возврат кортежей из функций....172

Кортежные варианты перечислений....173

Создание вариантов перечислений с использованием кортежей....173

Срезы....174

Понимание срезов ....175

Создание срезов....176

Доступ к элементам среза....176

Изменение элементов среза....177

Практические применения....178

Манипуляция строковыми литералами....178

Обработка данных....179

Токенизация текста....180

Работа с двоичными данными....180

Отображение в память ....181

Хеш-множества в Rust....182

Создание множества....182

Обновление множества....183

Добавление элементов....183

Удаление элементов....183

Продвинутые операции на множествах....183

Симметрическая разность....184

Проверка на подмножество и надмножество....184

Практические применения....185

Дедупликация....185

Проверка на вхождение в множество ....186

Кеширование....186

Алгоритмы на графах....187

Операции на множествах....189

Тегирование и фильтрация ....190

Отслеживание уникальных значений ....191

Вопросы производительности....191

Вопросы конкурентного исполнения....192

Умные указатели Mutex....192

Атомарные типы ....193

Сериализация и десериализация....195

Нагрузочное тестирование и оптимизация....196

Хеш-словари....197

Создание хеш-словаря....197

Обновление хеш-словаря....198

Добавление элементов....198

Удаление элементов....199

Обновление элементов....199

Доступ к значениям....200

Выполнение итераций по элементам хеш-словаря в цикле....200

Продвинутые операции на хеш-словарях....202

Проверка существования ключа....202

API внесения записей....202

Очистка хеш-словаря....203

Емкость хеш-словаря....203

Практические применения....204

Подсчет вхождений....204

Мемоизация....205

Кеширование....205

Управление конфигурацией....206

Преобразование данных....207

Группировка данных....207

Графовые алгоритмы....208

Индексация баз данных....208

Заключение....209

Дополнительные ресурсы....210

Вопросы для самопроверки....212

Ответы....216

Глава 5....218

Обработка ошибок и восстановление после отказов....218

Введение....218

Содержание главы....219

Обработка ошибок с использованием типов Result и Option....219

Понимание типов Result и Option....219

Обработка ошибок с помощью типа Result....220

Обработка ошибок с помощью типа Option....221

Передача ошибок по стеку вызовов....222

Оператор ?....222

Обработка нескольких ошибок с помощью типа Result....224

Передача ошибок с использованием типов Result и Option....225

Создание конкретно-прикладных типов ошибок....226

Продвинутая обработка ошибок....227

Библиотека anyhow....227

Конкретно-прикладные типы ошибок с пакетом thiserror....228

Асинхронная обработка ошибок....230

Асинхронные функции и экземпляры типа Result....230

Конкретно-прикладные типы ошибок для асинхронного исходного кода....231

Обработка ошибок конкурентности....232

Обработка ошибок в веб-приложениях....233

Собираем все воедино....234

Разбор файлов и обработка ошибок....234

Обработка ошибок в консольных приложениях ....235

Использование библиотеки clap....236

Обработка сигналов и прерываний....237

Обработка ошибок при файловом вводе-выводе....238

Чтение и запись файлов....239

Работа с директориями....240

Обработка ошибок в сетевом программировании....240

Выполнение HTTP-запросов....241

Построение сетевых сервисов....241

Обработка ошибок в многопоточном исходном коде....243

Межпотоковый обмен данными....245

Тестирование и обработка ошибок....246

Написание тестов для обработки ошибок....246

Тестирование на основе свойств....247

Заключение....248

Справочные и дополнительные материалы....249

Вопросы для самопроверки....249

Ответы....253

Глава 6....254

Управление памятью и указатели....254

Введение....254

Содержание главы....255

Роль управления памятью....255

Трудности ручного управления памятью....256

Владение и заимствование....256

Висячие ссылки....258

Незащищенный исходный код ....259

Гонки за доступом к данным....260

Управление ресурсами....261

Стек и куча....261

Роль стека в Rust....263

Роль кучи в Rust....263

Модель владения ....264

Заимствование в Rust....265

Времена жизни в Rust ....265

Сырые и умные указатели....267

Умный указатель Box....267

Умный указатель Rc....269

Умный указатель Arc....270

Умный указатель RefCell....272

Умный указатель Mutex....273

Умный указатель RwLock....276

Атомарные операции....279

Незащищенный Rust....281

Незащищенные функции....281

Незащищенные пакеты....281

Конкретно-прикладные незащищенные абстракции....282

Интерфейс с внешними функциями....283

Рекомендации по написанию незащищенного исходного кода....284

Лучшие образцы практики управления памятью....284

Приоритет выделения памяти в стеке....285

Активное задействование ссылок ....285

Разумное использование умных указателей....285

Использование сопоставления с шаблоном....286

Аннотирование времен жизни....286

Надлежащее управление ресурсами....287

Многопоточность и конкурентность ....287

Осторожное использование незащищенного исходного кода....287

Профилирование и оптимизация....288

Продвинутое управление памятью....289

Конкретно-прикладные выделители памяти....289

Отображение файлов в память....291

Операционная совместимость с другими языками....292

Лучшие образцы практики управления памятью....293

Заключение....294

Глава 7....295

Управление конкурентностью....295

Введение....295

Содержание главы....295

Понимание конкурентного программирования....295

Параллелизм против конкурентности....296

Порождение потоков исполнения и управление ими....297

Коллективное использование данных между потоками исполнения....298

Конкурентные структуры данных....298

Базовое использование контейнера-синхронизатора Mutex....299

Коллективное использование данных между потоками....301

Предотвращение взаимных блокировок....302

Владение сторожами мьютекса....304

Обработка скомпрометированных мьютексов....305

Продвинутое использование мьютекса....306

Условное запирание на замок....306

Реализация защищенной мьютексом очереди ....308

Реализация защищенной мьютексом очереди с приоритетом....309

Обработка взаимных блокировок с помощью мьютекса....311

Мьютекс в многопоточном сценарии производитель–потребитель....312

Обследование контейнера-синхронизатора RwLock....314

Управление коллективными данными с помощью примитива синхронизации RwLock....314

Продвинутые варианты использования контейнера-синхронизатора RwLock в Rust....316

Динамическое количество читателей....316

Запирание на замок по времени....317

Предотвращение взаимных блокировок....319

Реализация объединения ресурсов в пул....320

Обмен данными между потоками исполнения и передача сообщений....322

Использование каналов для обмена данными....322

Передача сообщений с использованием структур....323

Атомарные операции....324

Продвинутый обмен данными между потоками исполнения....325

Координация потоков исполнения с помощью барьеров....326

Локальное для потока хранение данных....327

Библиотека crossbeam....329

Асинхронное программирование....330

Лучшие образцы практики программирования конкурентности....331

Заключение....332

Дополнительные ресурсы....333

Вопросы для самопроверки....334

Ответы....337

Ключевые термины....337

Глава 8....340

Консольные программы....340

Введение....340

Содержание главы....340

Введение в разбор аргументов....340

Преимущества использования библиотеки clap....341

Начало работы с библиотекой clap....342

Обработка нескольких аргументов....344

Обработка аргументов-флагов....346

Обработка продвинутых аргументов....347

Реализация логики поиска и замены текста....350

Обзор функциональности утилиты поиска и замены текста....350

Чтение входного файла....351

Логика поиска и замены....355

Запись измененного содержимого....358

Поиск без учета регистра символов (опционально)....361

Поддержка нескольких входных файлов....365

Заключение....368

Дополнительные ресурсы....369

Вопросы для самопроверки....370

Ответы....372

Ключевые термины....372

Глава 9....374

Работа с вводом-выводом с устройств на Rust....374

Введение....374

Содержание главы....375

Чтение из файлов и запись в файлы....375

Открытие файла....375

Чтение из файла....377

Запись в файл....378

Закрытие файла....381

Выполнение распространенных операций с файловой системой....382

Создание директорий....382

Переименование и перемещение файлов....383

Проверка метаданных из файлов....384

Удаление файлов и директорий....386

Обход директорий....387

Работа с путями к файлам....389

Чтение и запись двоичных данных....391

Обработка ошибок и типы Result....392

Работа с аппаратными устройствами....394

Продвинутые файловые операции ....396

Символические и жесткие ссылки....396

Запирание файлов на замок....398

Отображаемые файлы....402

Лучшие образцы практики файлового ввода-вывода ....403

Драйверы устройств и модули ядра....406

Сетевое программирование и ввод-вывод с устройств....407

Сокеты и протоколы....408

Асинхронное сетевое взаимодействие и ввод-вывод с устройств....411

Библиотеки для сетевого взаимодействия и ввод-вывод с устройств....415

Вопросы защищенности и кибербезопасности....416

Параллелизм, конкурентность и ввод-вывод с устройств....419

Реально-временные системы и ввод-вывод с устройств....421

Заключение....424

Дополнительные ресурсы....425

Вопросы для самопроверки....426

Ответы....428

Ключевые термины....429

Глава 10....431

Итераторы и замыкания....431

Введение....431

Содержание главы....431

Итераторы....431

Анатомия итератора....432

Ключевые общие черты: Iterator и IntoIterator....434

Создание итераторов с помощью функций from_fn и successors....436

Метод drain....439

Другие источники итераций....440

Адаптерные методы итераторов....443

Построение конкретно-прикладных итераторов....445

Ленивые вычисления....447

Продвинутые методы: flat_map, take, skip и peekable....448

Адаптерный метод flat_map....448

Адаптерные методы take и skip....449

Адаптерный метод peekable....450

Адаптерные методы filter_map, fuse и flatten....452

Адаптерный метод filter_map....452

Адаптерный метод fuse....453

Адаптерный метод flatten....455

Волшебство замыканий....456

Синтаксис замыканий....457

Захват переменных в замыканиях....457

Заимствование переменных....458

Перемещение переменных....459

Замыкания и общие черты Fn, FnMut, FnOnce....460

Замыкания Fn....460

Замыкания FnMut....461

Замыкания FnOnce....462

Итераторы для эффективной обработки данных....463

Накопление данных с помощью метода fold....464

Выстраивание итераторов в цепочку с помощью метода chain....465

Применение итераторов и замыканий в практических примерах....466

Вариант использования 1: анализ текста....466

Вариант использования 2: обработка изображений....468

Вариант использования 3: фильтрация и преобразование данных....469

Вариант использования 4: обработка сенсорных данных....471

Вариант использования 5: финансовые расчеты....472

Вариант использования 6: сортировка....474

Заключение....475

Дополнительные ресурсы....476

Вопросы для самопроверки....477

Ответы....480

Ключевые термины....480

Глава 11....482

Модульное тестирование на Rust....482

Введение....482

Содержание главы....482

Модульное тестирование....483

Написание тестовых функций и модулей....483

Написание простейшей тестовой функции....484

Тестовые модули....485

Тесты и результаты тестирования....486

Выполнение тестов....486

Интерпретация результатов тестирования....488

Сверки....490

Конкретно-прикладные сообщения об ошибках....492

Выполнение тестов с опциями....492

Фикстуры и исходный код подготовки....493

Условные тесты....499

Асинхронное тестирование....501

Создание заглушек для зависимостей....503

Тестирование приватных функций....504

Замеры производительности....506

Покрытие исходного кода ....507

Непрерывная интеграция....507

Заключение....508

Дополнительные ресурсы....509

Вопросы для самоконтроля....510

Ответы....513

Ключевые термины....513

Глава 12....516

Сетевое программирование....516

Введение....516

Содержание главы....517

Сетевое программирование....517

Разработка сетевых приложений....517

Протоколы связи: TCP и UDP....521

Протокол управления передачей (TCP)....522

Протокол пользовательских датаграмм (UDP)....525

Асинхронные сетевые операции....527

Асинхронное программирование....528

Асинхронный TCP-сервер....531

Варианты использования из реальной практики: обработка HTTP-запросов....532

Приложение для обмена сообщениями по сети....534

Сервер передачи файлов....537

Сервер дистанционного исполнения команд....539

Одноранговый обмен файлами ....541

Реально-временное коллаборативное редактирование....543

Заключение....547

Дополнительные ресурсы....548

Вопросы для самопроверки....549

Ответы....551

Ключевые термины....552

Глава 13....553

Незащищенное программирование на Rust....553

Введение....553

Содержание главы....553

Незащищенный исходный код....554

Сценарии использования блоков unsafe....555

Вопросы производительности и защищенности....557

Примеры из реальной практики....558

Пример 1: взаимодействие с базой данных через FFI....558

Пример 2: продвинутая обработка изображений....564

Пример 3: конкретно-прикладное управление памятью....567

Лучшие образцы практики использования незащищенного исходного кода....569

Нарушения защищенности памяти....571

Практические примеры....573

Практический пример 1: уязвимость Heartbleed....573

Практический пример 2: авария первого полета ракеты Ариан-5....576

Риски использования незащищенного исходного кода....581

Риск 1: обращение к памяти по пустому указателю....581

Риск 2: переполнение буфера....582

Риск 3: ошибки использования памяти после ее высвобождения....583

Заключение....584

Дополнительные ресурсы....585

Вопросы для самопроверки....586

Ответы....588

Ключевые термины....589

Глава 14....591

Асинхронное программирование....591

Введение....591

Содержание главы....591

Основы синтаксиса asyncawait Rust....592

Обследование динамики синтаксиса asyncawait....594

Использование библиотеки tokio....596

Использование ключевого слова async для повышения отзывчивости....596

Обработка ошибок в асинхронном исходном коде....598

Времена жизни конкурентных заданий....600

Продвинутые шаблоны асинхронного программирования....602

Асинхронные потоки данных....603

Управление ресурсами с помощью асинхронного завершения жизненного цикла....607

Разветвление и сведение в асинхронных потоках данных....609

Обработка отмен заданий и реализации тайм-аутов....612

Управление динамическими заданиями....613

Интеграция асинхронного и синхронного исходных кодов....615

Заключение....617

Дополнительные ресурсы....618

Вопросы для самопроверки....619

Ответы....621

Ключевые термины....621

Глава 15....623

Web Assembly на Rust....623

Введение....623

Содержание главы....623

Преимущества стандарта WebAssembly....624

Ограничения стандарта WebAssembly....624

Ограниченная поддержка веб-браузерами....625

Косвенная манипуляция объектной моделью документа....625

Сложности управления памятью....626

Rust для разработки в сопряжении со стандартом WebAssembly ....627

Установка инструментария Rust и стандарта WebAssembly ....627

Настройка нового проекта на Rust в связке с двоичным форматом инструкций Wasm....627

Сборка и тестирование модулей WebAssembly....628

Написание функций на Rust с привязкой к Wasm....629

Тестирование модуля WebAssembly....630

Примеры применения стандарта WebAssembly из реальной практики....631

Вариант использования 1: обработка изображений....632

Вариант использования 2: криптографические операции....636

Вариант использования 3: обработка сетевых запросов....639

Заключение....642

Дополнительные ресурсы....642

Вопросы для самопроверки....643

Ответы....645

Предметный указатель....646

В динамичной среде системного программирования, где высокие требования встречаются с инновациями, критически важно владеть языком, сочетающим в себе надежность и эффективность. Эта книга представляет собой всеобъемлющее руководство, которое выходит за рамки основ и раскрывает сложности языка лежащего в основе разработки стабильных, защищенных и высокопроизводительных систем. Уникальные функциональные средства языка Rust позволят вам писать чистый и точный исходный код.

Издание будет полезно не только системным программистам, заинтересованным в повышении профессионального уровня, но и всем изучающим программирование на языке Rust.


Похожее:

Список отзывов:

Нет отзывов к книге.