- Ласкаво просимо в Comprehensive Rust 🦀
- 1. Проведення курсу
❱
- 1.1. Структура курсу
- 1.2. Гарячі клавіші
- 1.3. Переклади
- 2. Використання Cargo
❱
- 2.1. Екосистема Rust
- 2.2. Приклади коду
- 2.3. Локальний запуск Cargo
- День 1: Ранок
- 3. Ласкаво просимо
- 4. Hello World!
❱
- 4.1. Що таке Rust?
- 4.2. Переваги Rust
- 4.3. Ігровий майданчик
- 5. Типи та значення
❱
- 5.1. Hello World!
- 5.2. Змінні
- 5.3. Значення
- 5.4. Арифметика
- 5.5. Виведення типів
- 5.6. Вправа: Фібоначчі
❱
- 5.6.1. Рішення
- 6. Основи потоку керування
❱
- 6.1. Вирази if
- 6.2. Цикли
❱
- 6.2.1. for
- 6.2.2. loop
- 6.3. break та continue
❱
- 6.3.1. Мітки
- 6.4. Блоки та області застосування
❱
- 6.4.1. Області видимості та затінення
- 6.5. Функції
- 6.6. Макроси
- 6.7. Вправа: Послідовність Коллатца
❱
- 6.7.1. Рішення
- День 1: Полудень
- 7. Ласкаво просимо
- 8. Кортежі та масиви
❱
- 8.1. Масиви
- 8.2. Кортежі
- 8.3. Ітерація масиву
- 8.4. Патерни та деструктуризація
- 8.5. Вправа: Вкладені масиви
❱
- 8.5.1. Рішення
- 9. Посилання
❱
- 9.1. Спільні посилання
- 9.2. Ексклюзивні посилання
- 9.3. Зрізи
- 9.4. Рядки
- 9.5. Вправа: Геометрія
❱
- 9.5.1. Рішення
- 10. Типи, які визначаються користувачем
❱
- 10.1. Іменовані структури
- 10.2. Кортежні структури
- 10.3. Перелічувані типи
- 10.4. Константи
- 10.5. Статика
- 10.6. Псевдоніми типу
- 10.7. Вправа: події в ліфті
❱
- 10.7.1. Рішення
- День 2: Ранок
- 11. Ласкаво просимо
- 12. Зіставлення зразків
❱
- 12.1. Співставлення значень
- 12.2. Деструктурування структур
- 12.3. Деструктурування переліків
- 12.4. Потік контролю Let
- 12.5. Вправа: обчислення виразу
❱
- 12.5.1. Рішення
- 13. Методи та Трейти
❱
- 13.1. Методи
- 13.2. Трейти
❱
- 13.2.1. Реалізація трейтів
- 13.2.2. Супертрейти
- 13.2.3. Асоційовані типи
- 13.3. Виведення
- 13.4. Вправа: Загальний логгер
❱
- 13.4.1. Рішення
- День 2: Полудень
- 14. Ласкаво просимо
- 15. Узагальнені типи
❱
- 15.1. Узагальнені функції
- 15.2. Узагальнені типи даних
- 15.3. Узагальнені трейти
- 15.4. Обмеження трейту
- 15.5. impl Trait
- 15.6. dyn Trait
- 15.7. Вправа: узагальнена min
❱
- 15.7.1. Рішення
- 16. Типи стандартної бібліотеки
❱
- 16.1. Стандартна бібліотека
- 16.2. Документація
- 16.3. Option
- 16.4. Result
- 16.5. String
- 16.6. Vec
- 16.7. HashMap
- 16.8. Вправа: Лічильник
❱
- 16.8.1. Рішення
- 17. Трейти стандартної бібліотеки
❱
- 17.1. Порівняння
- 17.2. Оператори
- 17.3. From та Into
- 17.4. Приведення
- 17.5. Read та Write
- 17.6. Default, синтаксис оновлення структури
- 17.7. Закриття
- 17.8. Вправа: ROT13
❱
- 17.8.1. Рішення
- День 3: Ранок
- 18. Ласкаво просимо
- 19. Управління пам'яттю
❱
- 19.1. Огляд пам'яті програми
- 19.2. Підходи до управління пам'яттю
- 19.3. Володіння
- 19.4. Семантика переміщення
- 19.5. Clone
- 19.6. Типи які копіюються
- 19.7. Drop
- 19.8. Вправа: Тип будівельника
❱
- 19.8.1. Рішення
- 20. Розумні вказівники
❱
- 20.1. Box<T>
- 20.2. Rc
- 20.3. Принадлежні об'єкти трейтів
- 20.4. Вправа: Бінарне дерево
❱
- 20.4.1. Рішення
- День 3: Полудень
- 21. Ласкаво просимо
- 22. Запозичення
❱
- 22.1. Запозичення значення
- 22.2. Перевірка запозичення
- 22.3. Помилки запозичення
- 22.4. Внутрішня мутабельність
- 22.5. Вправа: Статистика здоров’я
❱
- 22.5.1. Рішення
- 23. Тривалість життя
❱
- 23.1. Анотації тривалісті життя
- 23.2. Упущення тривалісті життя
- 23.3. Тривалість життя структур
- 23.4. Вправа: Розбір Protobuf
❱
- 23.4.1. Рішення
- День 4: Ранок
- 24. Ласкаво просимо
- 25. Ітератори
❱
- 25.1. Ітератор
- 25.2. IntoIterator
- 25.3. FromIterator
- 25.4. Вправа: ланцюжок методів ітератора
❱
- 25.4.1. Рішення
- 26. Модулі
❱
- 26.1. Модулі
- 26.2. Ієрархія файлової системи
- 26.3. Видимість
- 26.4. use, super, self
- 26.5. Вправа: Модулі для бібліотеки графічного інтерфейсу користувача
❱
- 26.5.1. Рішення
- 27. Тестування
❱
- 27.1. Тестові модулі
- 27.2. Інші типи тестів
- 27.3. Лінти компілятора та Clippy
- 27.4. Вправа: Алгоритм Луна
❱
- 27.4.1. Рішення
- День 4: Полудень
- 28. Ласкаво просимо
- 29. Обробка помилок
❱
- 29.1. Паніки
- 29.2. Result
- 29.3. Оператор спроб
- 29.4. Перетворення спроб
- 29.5. Error трейт
- 29.6. thiserror
- 29.7. anyhow
- 29.8. Вправа: Переписування с Result
❱
- 29.8.1. Рішення
- 30. Небезпечний Rust
❱
- 30.1. Unsafe
- 30.2. Розіменування "сирих" вказівників
- 30.3. Несталі статичні змінні
- 30.4. Об'єднання
- 30.5. Небезпечні функції
- 30.6. Небезпечні трейти
- 30.7. Вправа: обгортка FFI
❱
- 30.7.1. Рішення
- Android
- 31. Ласкаво просимо
- 32. Установка
- 33. Правила побудови
❱
- 33.1. Бінарний файл
- 33.2. Бібліотека
- 34. AIDL
❱
- 34.1. Посібник із сервісу Birthday
❱
- 34.1.1. Інтерфейс
- 34.1.2. API сервісу
- 34.1.3. Сервіс
- 34.1.4. Сервер
- 34.1.5. Розгортка
- 34.1.6. Кліент
- 34.1.7. Зміна API
- 34.1.8. Оновлення реалізацій
- 34.2. AIDL типи
❱
- 34.2.1. Примітивні типи
- 34.2.2. Типи Масивів
- 34.2.3. Надсилання об'єктів
- 34.2.4. Посилкові данні
- 34.2.5. Надсилання файлів
- 35. Тестування
❱
- 35.1. GoogleTest
- 35.2. Mocking
- 36. Журналювання
- 37. Інтероперабельність
❱
- 37.1. З С
❱
- 37.1.1. Виклик С за допомогою Bindgen
- 37.1.2. Виклик Rust з C
- 37.2. З С++
❱
- 37.2.1. Модуль Bridge
- 37.2.2. Rust Bridge
- 37.2.3. Згенерований C++
- 37.2.4. C++ Bridge
- 37.2.5. Спільні типи
- 37.2.6. Спільні переліки
- 37.2.7. Обробка помилок в Rust
- 37.2.8. Обробка помилок в C++
- 37.2.9. Додаткові типи
- 37.2.10. Збірка для Android: C++
- 37.2.11. Збірка для Android: Genrules
- 37.2.12. Збірка для Android: Rust
- 37.3. З Java
- Chromium
- 38. Ласкаво просимо
- 39. Установка
- 40. Порівняння екосистем Chromium і Cargo
- 41. Політика
- 42. Правила побудови
❱
- 42.1. Небезпечний код
- 42.2. Залежнісь Chromium C++ від коду Rust
- 42.3. Visual Studio Code
- 42.4. Вправа
- 43. Тестування
❱
- 43.1. Бібліотека rust_gtest_interop
- 43.2. Правила GN для тестів Rust
- 43.3. Макрос chromium::import!
- 43.4. Вправа
- 44. Взаємодія з C++
❱
- 44.1. Приклади прив'язок
- 44.2. Обмеження CXX
- 44.3. Обробка помилок в CXX
❱
- 44.3.1. Обробка помилок: приклад QR
- 44.3.2. Обробка помилок: приклад PNG
- 44.4. Використання CXX у Chromium
- 44.5. Вправа
- 45. Додавання крейтів третіх сторін
❱
- 45.1. Налаштування Cargo.toml
- 45.2. Налаштування gnrt_config.toml
- 45.3. Завантаження крейтів
- 45.4. Створення правил побудови gn
- 45.5. Вирішення проблем
❱
- 45.5.1. Скрипти збірки, які генерують код
- 45.5.2. Скрипти збірки, які будують C++ або виконують довільні дії
- 45.6. Залежнісь від крейта
- 45.7. Перевірки та аудити
- 45.8. Реєстрація в Chromium Source Code
- 45.9. Підтримання крейтів в актуальному стані
- 45.10. Вправа
- 46. Зібрання усього разом - вправа
- 47. Рішення вправ
- Залізо: Ранок
- 48. Ласкаво просимо
- 49. no_std
❱
- 49.1. Мінімальний приклад
- 49.2. alloc
- 50. Мікроконтролери
❱
- 50.1. Сирий ввід вивід з відображеної пам'яті (MMIO)
- 50.2. Крейти доступу до периферійних пристроїв (PACs)
- 50.3. Крейти абстракції обладнання (HAL)
- 50.4. Крейти підтримки плат
- 50.5. Шаблон стану типу
- 50.6. embedded-hal
- 50.7. probe-rs та cargo-embed
❱
- 50.7.1. Налагодження
- 50.8. Інші проєкти
- 51. Вправи
❱
- 51.1. Компас
- 51.2. Рішення
- Залізо: Полудень
- 52. Прикладні процесори
❱
- 52.1. Підготовка до Rust
- 52.2. Вбудована збірка
- 52.3. Ввід вивід з відображеної пам'яті (MMIO)
- 52.4. Давайте напишемо драйвер UART
❱
- 52.4.1. Більше трейтів
- 52.5. Кращий драйвер UART
❱
- 52.5.1. Бітові прапорці (крейт bitflags)
- 52.5.2. Кілька регістрів
- 52.5.3. Драйвер
- 52.5.4. Використання
- 52.6. Журналювання
❱
- 52.6.1. Використання
- 52.7. Виключення
- 52.8. Інші проєкти
- 53. Корисні крейти
❱
- 53.1. zerocopy
- 53.2. aarch64-paging
- 53.3. buddy_system_allocator
- 53.4. tinyvec
- 53.5. spin
- 54. Залізо на Android
❱
- 54.1. vmbase
- 55. Вправи
❱
- 55.1. Драйвер годинника реального часу (RTC)
- 55.2. Рішення
- Одночасність виконання: Ранок
- 56. Ласкаво просимо
- 57. Потоки
❱
- 57.1. Звичайні потоки
- 57.2. Потоки з областю видимості
- 58. Канали
❱
- 58.1. Відправники та отримувачі
- 58.2. Незав'язані канали
- 58.3. Зав'язані канали
- 59. Send та Sync
❱
- 59.1. Маркерні трейти
- 59.2. Send
- 59.3. Sync
- 59.4. Приклади
- 60. Спільний стан
❱
- 60.1. Arc
- 60.2. Mutex
- 60.3. Приклад
- 61. Вправи
❱
- 61.1. Вечеря філософів
- 61.2. Перевірка багатопоточних посилань
- 61.3. Рішення
- Одночасність виконання: Полудень
- 62. Ласкаво просимо
- 63. Основи асинхронізації
❱
- 63.1. async/await
- 63.2. Futures
- 63.3. Середовища виконання
❱
- 63.3.1. Токіо
- 63.4. Завдання
- 64. Канали та потік управління
❱
- 64.1. Асинхронні канали
- 64.2. Join
- 64.3. Select
- 65. Підводні камені
❱
- 65.1. Блокування Виконавця
- 65.2. Pin
- 65.3. Асинхронні трейти
- 65.4. Скасування
- 66. Вправи
❱
- 66.1. Вечеря філософів
- 66.2. Програма широкомовного чату
- 66.3. Рішення
- Заключні слова
- 67. Дякую!
- 68. Глосарій
- 69. Інші ресурси
- 70. Кредити