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

37
Вы не понимаете ФП Александр Гранин 1

Upload: alexander-granin

Post on 16-Mar-2018

34 views

Category:

Engineering


0 download

TRANSCRIPT

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

Вы не понимаете ФП

Александр Гранин

1

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

2

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

О чем доклад?

● ФП не нужно, расходимся

● 3 аксиомы о настоящем ФП

● Мифы и реальность

3

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

ФП не нужно, расходимся

4

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

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

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

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

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

Мутабельность

Циклы

Разрушающее присваивание

Пошаговые инструкции

Состояние

Сторонние эффекты

Иммутабельность

Рекурсия

Декларативность

Функции, лямбды

Функции высших порядков (ФВП)

Чистые функции (вычисления)

7

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

8

3 аксиомы о настоящем ФП

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

Аксиома 1. Элементы функционального программирования

❖ Лямбды

❖ Первоклассные функции

❖ Функции высших порядков

❖ Чистота

❖ Иммутабельность

❖ Алгебраические типы данных

9

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

Аксиома 2. Функциональный стиль программирования

❖ Композиция функций

❖ Комбинаторы

❖ Каррирование

❖ Частичное применение

❖ Декларативность

10

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

11

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

12

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

13

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

Аксиома 3. Функциональный дизайн приложения

❖ Системы типов

❖ Системы эффектов

❖ Встроенные языки (eDSLs)

❖ Функциональные идиомы (функторы, моноиды, монады...)

❖ Функциональные паттерны (Free eDSLs, lenses)

❖ Функциональные подходы (FRP, STM)

14

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

Мифы и реальность

15

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

❖ Целевая аудитория

❖ Механизмы и конструкции в ФП

❖ Применимость парадигмы

❖ Философия парадигмы

Классификация мифов о ФП

16

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

Целевая аудитория

17

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

Целевая аудитория

«ФП — для кандидатов наук и академиков»

18

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

Целевая аудитория

«ФП — для кандидатов наук и академиков»

«ФП — для монахов-аскетов, которым связали руки и ноги»

19

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

Айсберг скрытой сложности

Лямбды, иммутабельность, чистота

Зигоморфизмы, категории, эндофункторы

20

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

Несколько уровней сложности

Лямбды, иммутабельность, чистота

Композиция

Контроль эффектов

Функторы, монады, моноиды

Функциональные подходы и паттерны

21

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

Механизмы и конструкции в ФП

22

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

Механизмы и конструкции в ФП

«Без переменных и циклов нельзя написать реальный код»

23

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

Механизмы и конструкции в ФП

«Без переменных и циклов нельзя написать реальный код»

«В ФП нет состояния»

24

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

Механизмы и конструкции в ФП

«Без переменных и циклов нельзя написать реальный код»

«В ФП нет состояния»

«В ФП нет побочных эффектов»

25

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

Состояние в ФП

Чистое иммутабельное состояние

❖ Argument passing state

❖ Монада State

Нечистое мутабельное состояние

❖ IO Ref

❖ MVar (concurrent variable)

❖ TVar (transactional variable)

f g

f

g

26

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

Применимость парадигмы

27

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

Применимость парадигмы

«ФП в реальном мире не используется»

28

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

Применимость парадигмы

«ФП в реальном мире не используется»

«ФП — это медленно»

29

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

1960

Эпоха исследований (1960 - 2010 - ...)

2000 2010 20202005 2015

Эпоха «ненужности» (2005 - 2015)

Мейнстрим

2017

(2013 - …)

30

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

ФП — это медленно?

31

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

Персистентные структуры данных

32

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

Философия парадигмы

33

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

Философия парадигмы

«ФП — это математика»

34

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

Философия парадигмы

«ФП — это математика»

«ФП не привносит ничего нового»

35

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

Философия парадигмы

«ФП — это математика»

«ФП не привносит ничего нового»

«Все равно все компилируется в машинный код»

36

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

Спасибо за внимание!

Александр Гранин[email protected]

37