RUSSIAN

Программирование на языке Rust: быстрое и безопасное системное программирование

Book information

Publisher
ДМК Пресс
Year
2018
ISBN
9781491927281, 9785970602362
Language
russian
Format
PDF
Filesize
10 MB (10926324 bytes)
Edition
1
Pages
547\551
Topic
Computers\\Programming: Programming Languages
Time added
2021-04-08 16:31:10

Description

Rust – новый язык системного программирования, сочетающий высокую производительность и низкоуровневый контроль, характерные для С и C++, с безопасной работой с памятью и потоками. В начале книги рассмотрены типы данных и основные конструкции языка – выражения, модули, структуры, перечисления и образцы. Далее описываются характеристики и универсальные типы. В следующих главах приводятся сведения о замыканиях и итераторах. Наконец в последних главах книги вы найдете исчерпывающую информацию о коллекциях, обработке текста, вводе-выводе, конкурентности, макросах и небезопасном коде. Издание предназначено для системных программистов, созревших для поиска альтернативы C++. Содержание Предисловие Для кого написана эта книга Зачем мы написали эту книгу Обзор содержания книги Графические выделения Скачивание исходного кода примеров Отзывы и пожелания Список опечаток Благодарности Глава 1. Почему появился Rust? Типобезопасность Глава 2. Краткий обзор Rust Скачивание и установка Rust Простая функция Написание и выполнение автономных тестов Обработка аргументов командной строки Простой веб-сервер Конкурентность Что такое множество Мандельброта Разбор пары аргументов командной строки Отображение пикселей на комплексные числа Рисование множества Запись файла изображения Конкурентная программа рисования множества Мандельброта Выполнение программы рисования множества Мандельброта Невидимая безопасность Глава 3. Базовые типы Машинные типы Целые типы Типы с плавающей точкой Тип bool Символы Кортежи Указательные типы Ссылки Боксы Простые указатели Массивы, векторы и срезки Массивы Вектор Поэлементное построение векторов Срезки Строковые типы Строковые литералы Байтовые строки Строки в памяти Тип String Использование строк Другие типы, похожие на строки Более сложные типы Глава 4. Владение Владение Передача владения Другие операции с передачей Передача владения и поток управления Передача владения и индексированное содержимое Копируемые типы: исключения из правила передачи владения Rc и Arc: совместное владение Глава 5. Ссылки Ссылки как значения Сравнение ссылок в Rust и в C++ Присваивание ссылкам Ссылки на ссылки Сравнение ссылок Ссылки не бывают нулевыми Заимствование ссылок на произвольные выражения Ссылки на срезки и объекты характеристик Безопасность ссылок Заимствование локальной переменной Получение ссылок в качестве параметров Передача ссылок в качестве аргументов Возврат ссылок Структуры, содержащие ссылки Различные параметрические времена жизни Опускание параметрического времени жизни Разделяемость и изменяемость Оружие против моря объектов Глава 6. Выражения Язык выражений Блоки и точки с запятой Объявления if и match Циклы Выражение return Зачем в Rust цикл loop Вызовы функций и методов Поля и элементы Операторы ссылки Арифметические, поразрядные, логические операторы и операторы сравнения Присваивание Приведение типов Замыкания Приоритеты и ассоциативность Что дальше Глава 7. Обработка ошибок Паника Раскрутка стека Снятие процесса Тип Result Обнаружение ошибок Псевдонимы типа Result Печать информации об ошибках Распространение ошибок Работа с ошибками нескольких типов Ошибки, которых «не может быть» Игнорирование ошибок Обработка ошибок в main() Объявление пользовательского типа ошибки Почему именно тип Result? Глава 8. Крейты и модули Крейты Сборочные профили Модули Модули в отдельных файлах Пути и импорт Стандартная прелюдия Артикулы – строительные блоки в Rust Превращение программы в библиотеку Каталог src/bin Атрибуты Тесты и документация Интеграционные тесты Документация Doc-тесты Задание зависимостей Версии Cargo.lock Публикация крейтов на сайте crates.io Рабочие пространства Прочие вкусности Глава 9. Структуры Структуры с именованными полями Кортежеподобные структуры Безэлементные структуры Размещение структуры в памяти Определение методов с помощью ключевого слова impl Универсальные структуры Структуры с параметрическим временем жизни Выведение стандартных характеристик для структурных типов Внутренняя изменяемость Глава 10. Перечисления и образцы Перечисления Перечисления, содержащие данные Перечисления в памяти Обогащенные структуры данных на основе перечислений Универсальные перечисления Образцы Литералы, переменные и метасимволы в образцах Кортежные и структурные образцы Ссылочные образцы Сопоставление с несколькими возможностями Охранные выражения @-образцы Где еще используются образцы Построение двоичного дерева Общая картина Глава 11. Характеристики и универсальные типы Использование характеристик Объекты характеристик Размещение объекта характеристики в памяти Универсальные функции Что использовать Определение и реализация характеристик Методы по умолчанию Характеристики и сторонние типы Употребление Self в характеристиках Подхарактеристики Статические методы Полностью квалифицированные вызовы методов Характеристики, определяющие связи между типами Ассоциированные типы, или Как работают итераторы Универсальные характеристики, или Как работает перегрузка операторов Парные характеристики, или Как работает rand::random() Обратное конструирование ограничений Заключение Глава 12. Перегрузка операторов Арифметические и поразрядные операторы Унарные операторы Бинарные операторы Составные операторы присваивания Сравнение на равенство Сравнение на больше-меньше Index и IndexMut Прочие операторы Глава 13. Вспомогательные характеристики Характеристика Drop Характеристика Sized Характеристика Clone Характеристика Copy Характеристики Deref и DerefMut Характеристика Default Характеристики AsRef и AsMut Характеристики Borrow и BorrowMut Характеристики From и Into Характеристика ToOwned Borrow и ToOwned за работой: скромное копирование при записи Глава 14. Замыкания Захват переменных Замыкания с заимствованием Замыкания с кражей Типы функций и замыканий Производительность замыканий Замыкания и безопасность Замыкания, которые убивают FnOnce FnMut Обратные вызовы Эффективное использование замыканий Глава 15. Итераторы Характеристики Iterator и IntoIterator Создание итераторов Методы iter и iter_mut Реализации характеристики IntoIterator Метод drain Другие источники итераторов Адаптеры итераторов map и filter filter_map и flat_map scan take и take_while skip и skip_while peekable fuse Обратимые итераторы и rev inspect chain enumerate zip by_ref cloned cycle Потребление итераторов Простое аккумулирование: count, sum, product max, min max_by, min_by max_by_key, min_by_key Сравнение последовательностей any и all position, rposition и ExactSizeIterator fold nth last find Построение коллекций: collect и FromIterator Характеристика Extend partition Реализация собственных итераторов Глава 16. Коллекции Обзор Тип Vec Доступ к элементам Итерирование Увеличение и уменьшение вектора Соединение Расщепление Перестановка элементов Сортировка и поиск Сравнение срезок Случайные элементы В Rust отсутствуют ошибки недействительности Тип VecDeque Тип LinkedList Тип BinaryHeap Типы HashMap и BTreeMap Записи Обход отображения Типы HashSet и BTreeSet Обход множества Когда равные значения различны Операции над множествами как единым целым Хэширование Применение пользовательского алгоритма хэширования За пределами стандартных коллекций Глава 17. Строки и текст Общие сведения о Юникоде ASCII, Latin-1 и Юникод UTF-8 Направление текста Символы (char) Классификация символов Работа с цифрами Преобразование регистра символов Преобразование в целое число и обратно Типы String и str Создание значений типа String Простая инспекция Дописывание и вставка текста Удаление текста Соглашения о поиске и итерировании Образцы для поиска текста Поиск и замена Обход текста Усечение Преобразование регистра Создание значений других типов из строк Преобразование других типов в строки Заимствование в виде других текстообразных типов Доступ к байтам текста в кодировке UTF-8 Порождение текста из данных в кодировке UTF-8 Откладывание выделения памяти Строки как универсальные коллекции Форматирование значений Форматирование текстовых значений Форматирование чисел Форматирование прочих типов Форматирование значений для отладки Форматирование указателей для отладки Ссылка на аргументы по индексу или по имени Динамическая ширина и точность Форматирование пользовательских типов Применение языка форматирования в своем коде Регулярные выражения Основы работы с Regex Ленивое построение значений типа Regex Нормализация Формы нормализации Крейт unicode-normalization Глава 18. Ввод и вывод Читатели и писатели Читатели Буферизованные читатели Чтение строк Собирание строк Писатели Файлы Поиск Другие типы читателей и писателей Двоичные данные, сжатие и сериализация Файлы и каталоги Типы OsStr и Path Методы типов Path и PathBuf Функции доступа к файловой системе Чтение каталогов Платформенно-зависимые средства Срества сетевого программирования Глава 19. Конкурентность Вилочный параллелизм Функции spawn и join Обработка ошибок в потоках Разделение неизменяемых данных между потоками Rayon И снова о множестве Мандельброта Каналы Отправка значений Получение значений Выполнение конвейера Возможности и производительность каналов Потокобезопасность: Send и Sync Отправка объектов почти любого итератора по каналу За пределами конвейеров Разделяемое изменяемое состояние Что такое мьютекс? Мьютексы в Rust mut и Mutex Почему мьютексы не всегда хорошая идея Взаимоблокировка Отравленные мьютексы Каналы с несколькими производителями и мьютексом Блокировки чтения-записи (RwLock) Условные переменные (Condvar) Атомарные типы Глобальные переменные Как выглядит написание конкурентного кода на Rust Глава 20. Макросы Основы макросов Основы макрорасширения Непредвиденные последствия Повторение Встроенные макросы Отладка макросов Макрос json! Типы фрагментов Рекурсия в макросах Использование характеристик совместно с макросами Области видимости и гигиена Импорт и экспорт макросов Предотвращение синтаксических ошибок при сопоставлении За пределами macro_rules! Глава 21. Небезопасный код Небезопасность от чего? Unsafe-блоки Пример: эффективный тип ASCII-строки Unsafe-функции Unsafe-блок или unsafe-функция? Неопределенное поведение Небезопасные характеристики Простые указатели Безопасное разыменование простых указателей Пример: RefWithFlag Нулевые указатели Размеры и выравнивание типов Арифметика указателей Передача в память и из памяти Пример: GapBuffer Безопасность паники в небезопасном коде Иноязычные функции: вызов функций на C и C++ из Rust Поиск общего представления данных Объявление иноязычных функций и переменных Использование библиотечных функций Низкоуровневый интерфейс с libgit2 Безопасный интерфейс к libgit2 Заключение Предметный указатель Об авторах Колофон

Similar books