ݺߣ

ݺߣShare a Scribd company logo
Вы не понимаете ФП
Александр Гранин
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()); // 61000
6
Мутабельность
Циклы
Разрушающее присваивание
Пошаговые инструкции
Состояние
Сторонние эффекты
Иммутабельность
Рекурсия
Декларативность
Функции, лямбды
Функции высших порядков (ФВП)
Чистые функции (вычисления)
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
Спасибо за внимание!
Александр Гранин
graninas@gmail.com
37

More Related Content

Вы не понимаете ФП / You don't understand FP