Содержание курса
Введение
5 уроков
1.
github-репозиторий рассматриваемых примеров
↗
2.
Разница между процессом, потоком и изолятом
↗
3.
Разница между конкурентным и параллельным выполнением кода
↗
4.
Асинхронное программирование
↗
5.
Event Loop архитектура в Dart
↗
Future API, async и await
12 уроков
1.
Введение
↗
2.
Базовые методы Future API
↗
3.
Механизм async/await
↗
4.
Варианты создания экземпляра Future
↗
5.
Completer – низкоуровневый способ создания Future
↗
6.
«Отмена» выполнения Future средствами Completer
↗
7.
Вспомогательные статические методы для работы с Future
↗
8.
FutureOr – костыль или серебряная пуля?
↗
9.
Состояние гонки за ресурсами (Race Condition)
↗
10.
Резюме по главе и вопросы для самопроверки
↗
11.
Тесты на Future
↗
12.
Задачи на Future
↗
Потоки (Streams)
10 уроков
1.
Кратко, но емко о Stream
↗
2.
Что за зверь такой этот ваш StreamSubscription?
↗
3.
Использование Stream при объявлении генераторных функций
↗
4.
Варианты создания экземпляра Stream
↗
5.
StreamController – «швейцарский нож» в работе с потоками
↗
6.
StreamIterator – инструмент для любителей работать ручками
↗
7.
Вспомогательные методы для работы с экземпляром Stream
↗
8.
StreamTransformer
↗
9.
Реализация паттерна «Наблюдатель» с использованием потоков
↗
10.
Резюме по главе и вопросы для самопроверки
↗
Зоны (Zones)
13 уроков
1.
Введение
↗
2.
Концепция работы механизма Zone
↗
3.
ZoneSpecification. Переопределение функции print
↗
4.
ZoneSpecification. Перехват необработанных исключений
↗
5.
ZoneSpecification. Переопределение поведения таймеров
↗
6.
ZoneSpecification. Перехват регистрации асинхронных функций
↗
7.
ZoneSpecification. Перехват выполняемых асинхронных функций
↗
8.
ZoneSpecification. Перехватываем вызов scheduleMicrotask
↗
9.
Варианты использования: защита от необработанных исключений
↗
10.
Варианты использования: контекстно-ориентированное програм-ие
↗
11.
Варианты использования: логирование
↗
12.
Варианты использования: профилирование и трассировка
↗
13.
Резюме по главе и вопросы для самопроверки
↗
Изоляты и изоляционные группы
15 уроков
1.
Введение
↗
2.
Щелкаем одноразовые задачи с Isolate.run
↗
3.
Isolate.spawn как инструмент для запуска фоновых изолятов
↗
4.
Управление жизненным циклом долгоживущего изолята
↗
5.
Isolate.new и класс Capability, как инструмент ограничений
↗
6.
Создание и использование новой изоляционной группы
↗
7.
[Тонкости] Уникальный идентификатор объекта
↗
8.
[Тонкости] Объявление переменной или имени?
↗
9.
[Тонкости] Жизненный цикл объекта
↗
10.
[Тонкости] Общая память изоляционной группы
↗
11.
[Тонкости] Глубоко неизменяемые экземпляры и типы данных
↗
12.
[Тонкости] Разница в передаче сообщений разных типов
↗
13.
[Тонкости] Создание изолята из другого изолята
↗
14.
Изоляционно-плагинная архитектура приложения
↗
15.
Резюме по главе и вопросы для самопроверки
↗
«Под капотом» изолятов и Garbage Collector Dart VM
8 уроков
1.
Класс ThreadPool и MutatorThreadPool
↗
2.
Класс Worker
↗
3.
Класс Task
↗
4.
Связь между пользовательским изолятом и MutatorThreadPool
↗
5.
Управление жизненным циклом потоков-мутаторов и изолятов
↗
6.
Garbage Collector Dart VM
↗
7.
Флаги конфигурации работы сборщика мусора и потоков-мутаторов
↗
8.
Резюме по главе и вопросы для самопроверки
↗
Проект: шахматная МАС с реактивными агентами (текстовая-версия)
9 уроков
1.
Введение
↗
2.
Архитектура системы, алгоритм работы и структура проекта
↗
3.
Разработка моделей данных
↗
4.
Разработка функционала доски
↗
5.
Разработка функционала агента
↗
6.
Разработка парсера FEN-строки и пакета утилит
↗
7.
Разработка функционала виртуальной среды
↗
8.
Разработка консольного UI
↗
9.
Запуск мультиагентной системы
↗
Проект: шахматная МАС с реактивными агентами (видео-версия)
7 уроков
1.
Архитектура разрабатываемой МАС
↗
2.
Разработка классов данных
↗
3.
Разработка функционала доски и парсера нотации
↗
4.
Разработка функционала агента
↗
5.
Разработка функционала environment
↗
6.
Разработка консольного интерфейса
↗
7.
Добавление классов фигур
↗
Задания на модификацию проекта
3 урока
1.
Легкий уровень
↗
2.
Средний уровень
↗
3.
Для любителей «пожестче»
↗