- Язык программирования Rust
- Предисловие
- Введение
- 1. С чего начать
- 1.1. Установка
- 1.2. Привет, Мир!
- 1.3. Hello, Cargo!
- 2. Программирование игры в загадки
- 3. Общие концепции программирования
- 3.1. Переменные и изменяемость
- 3.2. Типы Данных
- 3.3. Функции
- 3.4. Комментарии
- 3.5. Управляющие конструкции
- 4. Понимание владения
- 4.1. Что такое "владение"?
- 4.2. Ссылки и заимствование
- 4.3. Тип среза
- 5. Использование структур для объединения связанных данных
- 5.1. Определение и создание экземпляров структур
- 5.2. Пример программы, использующей структуры
- 5.3. Синтаксис метода
- 6. Перечисления и сопоставление с образцом
- 6.1. Определение Enum
- 6.2. Конструкция потока управления match
- 6.3. Лаконичный поток управления с if let
- 7. Управление растущими проектами с помощью пакетов, крейтов и модулей
- 7.1. Пакеты и крейты
- 7.2. Определение модулей для управления областью действия и конфиденциальностью
- 7.3. Пути для ссылки на элемент в дереве модулей
- 7.4. Введение путей в область видимости с помощью ключевого слова use
- 7.5. Separating Modules into Different Files
- 8. Общие коллекции
- 8.1. Хранение списков значений с векторами
- 8.2. Хранение закодированного текста UTF-8 со строками
- 8.3. Хранение ключей со связанными значениями в HashMap
- 9. Обработка ошибок
- 9.1. Неустранимые ошибки с panic!
- 9.2. Устранимые ошибки с Result
- 9.3. panic! или Не panic!
- 10. Общие типы, трейты (характеристики) и время жизни
- 10.1. Обобщённые типы данных
- 10.2. Трейты (характеристики): определение разделяемого поведения
- 10.3. Валидация ссылок посредством сроков жизни
- 11. Написание автоматических тестов
- 11.1. Как писать тесты
- 11.2. Управление выполнением тестов
- 11.3. Организация тестов
- 12. Проект с вводом-выводом: создание программы командной строки
- 12.1. Получение аргументов командной строки
- 12.2. Чтение файла
- 12.3. Рефакторинг для обеспечения модульности и улучшения обработки ошибок
- 12.4. Разработка функциональности библиотеки с помощью разработки через тестирование
- 12.5. Работа с переменными среды
- 12.6. Запись сообщений об ошибках в stderr вместо stdout
- 13. Функциональные возможности языка: итераторы и замыкания
- 13.1. Замыкания: анонимные функции, которые захватывают своё окружение
- 13.2. Обработка последовательности элементов с помощью итераторов
- 13.3. Улучшение нашего проекта с вводом/выводом
- 13.4. Сравнение производительности: циклы и итераторы
- 14. Подробнее о Cargo и Crates.io
- 14.1. Настройка билдов с помощью профилей выпуска
- 14.2. Публикация крейта на Crates.io
- 14.3. Рабочие области Cargo
- 14.4. Установка бинарных файлов с Crates.io с помощью cargo install
- 14.5. Расширение возможностей Cargo путём добавления пользовательских команд
- 15. Умные указатели
- 15.1. Использование Box<T> для указания на данные в куче
- 15.2. Работа с умными указателями как с обычными ссылками с помощью трейта Deref
- 15.3. Выполнение кода при очистке с помощью трейта Drop
- 15.4. Rc<T>, умный указатель с подсчётом ссылок
- 15.5. RefCell<T> и внутренняя изменяемость
- 15.6. Ссылочные циклы могут привести к утечке памяти
- 16. Безбоязненный параллелизм
- 16.1. Использование потоков для параллельного выполнения кода
- 16.2. Пересылка сообщений для передачи данных между потоками
- 16.3. Параллелизм с общим состоянием
- 16.4. Расширяемый параллелизм с помощью трейтов Sync и Send
- 17. Возможности объектно-ориентированного программирования Rust
- 17.1. Характеристики объектно-ориентированных языков
- 17.2. Использование трейт-объектов, допускающих значения разных типов
- 17.3. Реализация шаблона объектно-ориентированного проектирования
- 18. Шаблоны и сопоставление
- 18.1. Все места, где могут использоваться шаблоны
- 18.2. Опровержимость: может ли шаблон не соответствовать
- 18.3. Синтаксис шаблона
- 19. Расширенные возможности
- 19.1. Небезопасный код в Rust
- 19.2. Продвинутые типажи
- 19.3. Продвинутые типы
- 19.4. Продвинутые функции и замыкания
- 19.5. Макросы
- 20. Финальный проект: создание многопоточного веб-сервера
- 20.1. Создание однопоточного веб-сервера
- 20.2. Превращение нашего однопоточного сервера в многопоточный сервер
- 20.3. Мягкое завершение работы и очистка
- 21. Приложения
- 21.1. А — Ключевые слова
- 21.2. B — Операторы и символы
- 21.3. C — Выводимые трейты
- 21.4. D — Полезные инструменты разработки
- 21.5. E — Редакции
- 21.6. F — Переводы книги
- 21.7. G — Как создаётся Rust и «Nightly Rust»