SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Вы не понимаете ФП
Александр Гранин
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

Contenu connexe

Plus de Alexander Granin

Plus de Alexander Granin (20)

Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stm
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fp
 
Final tagless vs free monad
Final tagless vs free monadFinal tagless vs free monad
Final tagless vs free monad
 
Monadic parsers in C++
Monadic parsers in C++Monadic parsers in C++
Monadic parsers in C++
 
The present and the future of functional programming in c++
The present and the future of functional programming in c++The present and the future of functional programming in c++
The present and the future of functional programming in c++
 
О разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop developmentО разработке десктопных приложений / About desktop development
О разработке десктопных приложений / About desktop development
 
Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...Принципы и практики разработки ПО 2 / Principles and practices of software de...
Принципы и практики разработки ПО 2 / Principles and practices of software de...
 
Принципы и практики разработки ПО / Principles and practices of software deve...
Принципы и практики разработки ПО / Principles and practices of software deve...Принципы и практики разработки ПО / Principles and practices of software deve...
Принципы и практики разработки ПО / Principles and practices of software deve...
 
Закон Деметры / Demetra's law
Закон Деметры / Demetra's lawЗакон Деметры / Demetra's law
Закон Деметры / Demetra's law
 
Design of big applications in FP
Design of big applications in FPDesign of big applications in FP
Design of big applications in FP
 
GitHub - зеркало разработчика
GitHub - зеркало разработчикаGitHub - зеркало разработчика
GitHub - зеркало разработчика
 
The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++The Present and The Future of Functional Programming in C++
The Present and The Future of Functional Programming in C++
 
Functional programming in C++ LambdaNsk
Functional programming in C++ LambdaNskFunctional programming in C++ LambdaNsk
Functional programming in C++ LambdaNsk
 
Transition graph using free monads and existentials
Transition graph using free monads and existentialsTransition graph using free monads and existentials
Transition graph using free monads and existentials
 
Software transactional memory. pure functional approach
Software transactional memory. pure functional approachSoftware transactional memory. pure functional approach
Software transactional memory. pure functional approach
 
Functional "Life": parallel cellular automata and comonads
Functional "Life": parallel cellular automata and comonadsFunctional "Life": parallel cellular automata and comonads
Functional "Life": parallel cellular automata and comonads
 
Functional microscope - Lenses in C++
Functional microscope - Lenses in C++Functional microscope - Lenses in C++
Functional microscope - Lenses in C++
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Линзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция даннымиЛинзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция данными
 
Линзы - комбинаторная манипуляция данными (Dev2Dev)
Линзы - комбинаторная манипуляция данными (Dev2Dev)Линзы - комбинаторная манипуляция данными (Dev2Dev)
Линзы - комбинаторная манипуляция данными (Dev2Dev)
 

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