- Язык программирования Rust
- Предисловие
- Введение
- 1. Начало
- 1.1. Установка
- 1.2. Hello, World!
- 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. Определение перечисления
- 6.2. Конструкция match
- 6.3. Лаконичное управление потоком с if let и let else
- 7. Упарвление разрастающимися проектами с помощью пакетов, крейтов и модулей
- 7.1. Пакеты и крейты
- 7.2. Использование модулей для управления областью видимости и приватностью
- 7.3. Пути для ссылки на элемент в дереве модулей
- 7.4. Добавление путей в область видимости ключевым словом use
- 7.5. Размещение модулей в разных файлах
- 8. Стандартные коллекции данных
- 8.1. Хранение списка значений с помощью векторов
- 8.2. Хранение текста в кодировке UTF-8 с помощью строк
- 8.3. Хранение пар ключ-значение с помощью хеш-таблиц
- 9. Обработка ошибок
- 9.1. Неисправимые ошибки с panic!
- 9.2. Исправимые ошибки с Result
- 9.3. Когда следует использовать 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. Вывод сообщений об ошибках в стандартный поток ошибок
- 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. Fundamentals of Asynchronous Programming: Async, Await, Futures, and Streams
- 17.1. Futures and the Async Syntax
- 17.2. Applying Concurrency with Async
- 17.3. Working With Any Number of Futures
- 17.4. Streams: Futures in Sequence
- 17.5. A Closer Look at the Traits for Async
- 17.6. Futures, Tasks, and Threads
- 18. Особенности объектно-ориентированного программирования в Rust
- 18.1. Характеристика объектно-ориентированных языков
- 18.2. Использование трейт-объектов, позволяющих использовать значения разных типов
- 18.3. Implementing an Object-Oriented Design Pattern
- 19. Шаблоны и соспоставление с шаблоном
- 19.1. Где применимо соспоставление с шаблоном
- 19.2. Опровержимость: может ли шаблон не сопоставиться
- 19.3. Синтаксис шаблонов
- 20. Продвинутые возможности
- 20.1. Небезопасный Rust
- 20.2. Продвинутые трейты
- 20.3. Продвинутые типы
- 20.4. Продвинутые функции и замыкания
- 20.5. Макросы
- 21. Итоговый проект: создание многопоточного веб-сервера
- 21.1. Создание однопоточного веб-сервера
- 21.2. Превращение нашего однопоточного сервера в многопоточный
- 21.3. Благополучное завершение работы
- 22. Приложения
- 22.1. A — Ключевые слова
- 22.2. B — Операторы и символы
- 22.3. C — Выводимые трейты
- 22.4. D — Полезные инструменты разработки
- 22.5. E — Редакции
- 22.6. F — Переводы
- 22.7. G — Как разрабатывается Rust и "Nightly Rust"