Содержание курса
Lua 5.5: язык, рантайм и место в системе
9 уроков
1.
Что мы строим: sift
↗
2.
Модель исполнения: значения, состояние, один поток
↗
3.
Установка Lua 5.5.1 и сборка из исходников
↗
4.
Чанк: единица компиляции и загрузки
↗
5.
Интерпретатор: аргументы, стандартные потоки, коды возврата
↗
6.
Объявления global: главное изменение 5.5
↗
7.
Локальность как инструмент: производительность и читаемость
↗
8.
Инструментарий: стиль, статический анализ, сборка
↗
9.
Практика — каркас sift и команда version
↗
Значения, типы и выражения
9 уроков
1.
Восемь типов и семантика значений
↗
2.
Числа: два подтипа, одна арифметика
↗
3.
Строки: неизменяемость, байты, интернирование
↗
4.
nil, false и истинность
↗
5.
Сравнение, приведение и порядок
↗
6.
Битовые операции
↗
7.
Локальные переменные и атрибуты const и close
↗
8.
Управляющие конструкции
↗
9.
Практика — типизированный разбор полей события
↗
Функции, множественные значения, замыкания
9 уроков
1.
Функция как значение
↗
2.
Множественные возвращаемые значения
↗
3.
Вариадические функции и именованный ...args
↗
4.
Замыкания и upvalue
↗
5.
Хвостовые вызовы
↗
6.
Функции высшего порядка
↗
7.
Рекурсия, мемоизация и локальные объявления
↗
8.
Идиомы сигнатур
↗
9.
Практика — конвейер преобразований событий
↗
Таблицы: единственная структура данных
9 уроков
1.
Устройство таблицы: массивная и хеш-часть
↗
2.
Последовательности, # и дыры
↗
3.
Обход таблицы: pairs, ipairs, next
↗
4.
Стандартная библиотека table
↗
5.
Итераторы
↗
6.
Таблицы как множества, мультимапы и очереди
↗
7.
Вложенные структуры и работа с ними
↗
8.
Память и производительность таблиц
↗
9.
Практика — агрегаты sift
↗
Метатаблицы и объектная модель
9 уроков
1.
Метатаблица как механизм
↗
2.
__index и __newindex
↗
3.
Арифметика, сравнение и конкатенация
↗
4.
__call, __tostring, __len, __close, __gc
↗
5.
Классы на таблицах
↗
6.
Наследование и композиция
↗
7.
Инкапсуляция и приватность
↗
8.
Практические паттерны на метатаблицах
↗
9.
Практика — типизированные записи и гистограмма
↗
Модули, окружения и организация кода
9 уроков
1.
require и package
↗
2.
Анатомия модуля
↗
3.
Загрузчики и package.searchers
↗
4.
_ENV: окружение как переменная
↗
5.
Песочницы
↗
6.
Дисциплина глобалов в 5.5
↗
7.
Конфигурация как код на Lua
↗
8.
Раскладка проекта и зависимости
↗
9.
Практика — плагины и песочница конфигурации
↗
Строки, паттерны и бинарные данные
9 уроков
1.
Библиотека string и метатаблица строк
↗
2.
Паттерны Lua: не регулярные выражения
↗
3.
find, match, gmatch, gsub
↗
4.
Захваты и специальные конструкции
↗
5.
string.format и безопасный вывод
↗
6.
Эффективная сборка строк
↗
7.
Бинарные данные: string.pack и string.unpack
↗
8.
UTF-8
↗
9.
Практика — разбор NDJSON
↗
Ошибки, ресурсы и надёжность
9 уроков
1.
Модель ошибок
↗
2.
pcall и xpcall
↗
3.
Ошибки как значения: проектирование
↗
4.
Трассировки и диагностика
↗
5.
assert и контракты
↗
6.
Ресурсы и to-be-closed переменные
↗
7.
Ошибки в неожиданных местах
↗
8.
Диагностика: warn и логирование
↗
9.
Практика — устойчивый читатель логов
↗
Корутины и асинхронные конвейеры
9 уроков
1.
Что такое корутина
↗
2.
API корутин
↗
3.
Генераторы и итераторы
↗
4.
Конвейеры producer/consumer
↗
5.
Кооперативный планировщик
↗
6.
Значения и ошибки через границу корутины
↗
7.
Корутины и ресурсы
↗
8.
Пределы — yield через границу C
↗
9.
Практика — потоковый источник sift
↗
Память, сборка мусора и производительность
9 уроков
1.
Модель памяти
↗
2.
Сборщик мусора: режимы и параметры
↗
3.
Финализаторы __gc
↗
4.
Слабые таблицы
↗
5.
Что в Lua действительно стоит дорого
↗
6.
Измерение
↗
7.
Оптимизация горячего пути
↗
8.
Альтернативные реализации и их границы
↗
9.
Практика — профилирование и ускорение агрегации
↗
Тестирование, отладка и инструментальность
9 уроков
1.
Тесты без фреймворка
↗
2.
Утверждения
↗
3.
Организация тестов
↗
4.
Подмена зависимостей
↗
5.
Свойства и генерация данных
↗
6.
Библиотека debug
↗
7.
Отладка и трассировка
↗
8.
Покрытие кода
↗
9.
Практика — тестовый набор sift
↗
Встраивание, C API и поставка
9 уроков
1.
Зачем встраивают Lua
↗
2.
Стек Lua и базовые операции
↗
3.
Первый C-модуль
↗
4.
Передача данных через границу
↗
5.
Ошибки через границу C и Lua
↗
6.
Встраивание Lua в приложение
↗
7.
LuaRocks и rockspec
↗
8.
Поставка инструмента
↗
9.
Практика — сборка и релиз sift
↗