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

Preview:

Citation preview

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

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

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

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

Александр Гранинgraninas@gmail.com

37

Recommended