Вы не понимаете ФП / you don't understand fp
TRANSCRIPT
Вы не понимаете ФП
Александр Гранин
1
2
О чем доклад?
● ФП не нужно, расходимся
● 3 аксиомы о настоящем ФП
● Мифы и реальность
3
ФП не нужно, расходимся
4
void cost() { vector<pair<char*, int>> devices; devices.push_back({ "Memory 2x8Gb", 10000 }); devices.push_back({ "Graphic Card", 25000 }); devices.push_back({ "CPU", 20000 }); devices.push_back({ "Motherboard", 6000 }); int cost = 0; for (size_t i = 0; i < devices.size(); ++i) { cost += get<1>(devices[i]); } printf("%i", cost); // 61000}
5
int cost() { const vector<pair<char*, int>> devices = { { "Memory 2x8Gb", 10000 } , { "Graphic Card", 25000 } , { "CPU", 20000 } , { "Motherboard", 6000 } };
const int cost = accumulate(devices.begin(), devices.end(), 0, [](int acc, const pair<char*, int>& item) { return get<1>(item) + acc; }); return cost;}
printf("%i", cost()); // 610006
Мутабельность
Циклы
Разрушающее присваивание
Пошаговые инструкции
Состояние
Сторонние эффекты
Иммутабельность
Рекурсия
Декларативность
Функции, лямбды
Функции высших порядков (ФВП)
Чистые функции (вычисления)
7
8
3 аксиомы о настоящем ФП
Аксиома 1. Элементы функционального программирования
❖ Лямбды
❖ Первоклассные функции
❖ Функции высших порядков
❖ Чистота
❖ Иммутабельность
❖ Алгебраические типы данных
9
Аксиома 2. Функциональный стиль программирования
❖ Композиция функций
❖ Комбинаторы
❖ Каррирование
❖ Частичное применение
❖ Декларативность
10
11
12
13
Аксиома 3. Функциональный дизайн приложения
❖ Системы типов
❖ Системы эффектов
❖ Встроенные языки (eDSLs)
❖ Функциональные идиомы (функторы, моноиды, монады...)
❖ Функциональные паттерны (Free eDSLs, lenses)
❖ Функциональные подходы (FRP, STM)
14
Мифы и реальность
15
❖ Целевая аудитория
❖ Механизмы и конструкции в ФП
❖ Применимость парадигмы
❖ Философия парадигмы
Классификация мифов о ФП
16
Целевая аудитория
17
Целевая аудитория
«ФП — для кандидатов наук и академиков»
18
Целевая аудитория
«ФП — для кандидатов наук и академиков»
«ФП — для монахов-аскетов, которым связали руки и ноги»
19
Айсберг скрытой сложности
Лямбды, иммутабельность, чистота
Зигоморфизмы, категории, эндофункторы
20
Несколько уровней сложности
Лямбды, иммутабельность, чистота
Композиция
Контроль эффектов
Функторы, монады, моноиды
Функциональные подходы и паттерны
21
Механизмы и конструкции в ФП
22
Механизмы и конструкции в ФП
«Без переменных и циклов нельзя написать реальный код»
23
Механизмы и конструкции в ФП
«Без переменных и циклов нельзя написать реальный код»
«В ФП нет состояния»
24
Механизмы и конструкции в ФП
«Без переменных и циклов нельзя написать реальный код»
«В ФП нет состояния»
«В ФП нет побочных эффектов»
25
Состояние в ФП
Чистое иммутабельное состояние
❖ Argument passing state
❖ Монада State
Нечистое мутабельное состояние
❖ IO Ref
❖ MVar (concurrent variable)
❖ TVar (transactional variable)
f g
f
g
26
Применимость парадигмы
27
Применимость парадигмы
«ФП в реальном мире не используется»
28
Применимость парадигмы
«ФП в реальном мире не используется»
«ФП — это медленно»
29
1960
Эпоха исследований (1960 - 2010 - ...)
2000 2010 20202005 2015
Эпоха «ненужности» (2005 - 2015)
Мейнстрим
2017
(2013 - …)
30
ФП — это медленно?
31
Персистентные структуры данных
32
Философия парадигмы
33
Философия парадигмы
«ФП — это математика»
34
Философия парадигмы
«ФП — это математика»
«ФП не привносит ничего нового»
35
Философия парадигмы
«ФП — это математика»
«ФП не привносит ничего нового»
«Все равно все компилируется в машинный код»
36