Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

43 views

Published on

Небольшой доклад о мифах в функциональном программировании для DevDay@2GIS.

Slides for my talk to DevDay@2GIS about functional programming: See the talk here (Rus):
https://youtu.be/jSkYvNqQWqs

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Вы не понимаете ФП Александр Гранин 1
  2. 2. 2
  3. 3. О чем доклад? ● ФП не нужно, расходимся ● 3 аксиомы о настоящем ФП ● Мифы и реальность 3
  4. 4. ФП не нужно, расходимся 4
  5. 5. 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
  6. 6. 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. 7. Мутабельность Циклы Разрушающее присваивание Пошаговые инструкции Состояние Сторонние эффекты Иммутабельность Рекурсия Декларативность Функции, лямбды Функции высших порядков (ФВП) Чистые функции (вычисления) 7
  8. 8. 8 3 аксиомы о настоящем ФП
  9. 9. Аксиома 1. Элементы функционального программирования ❖ Лямбды ❖ Первоклассные функции ❖ Функции высших порядков ❖ Чистота ❖ Иммутабельность ❖ Алгебраические типы данных 9
  10. 10. Аксиома 2. Функциональный стиль программирования ❖ Композиция функций ❖ Комбинаторы ❖ Каррирование ❖ Частичное применение ❖ Декларативность 10
  11. 11. 11
  12. 12. 12
  13. 13. 13
  14. 14. Аксиома 3. Функциональный дизайн приложения ❖ Системы типов ❖ Системы эффектов ❖ Встроенные языки (eDSLs) ❖ Функциональные идиомы (функторы, моноиды, монады...) ❖ Функциональные паттерны (Free eDSLs, lenses) ❖ Функциональные подходы (FRP, STM) 14
  15. 15. Мифы и реальность 15
  16. 16. ❖ Целевая аудитория ❖ Механизмы и конструкции в ФП ❖ Применимость парадигмы ❖ Философия парадигмы Классификация мифов о ФП 16
  17. 17. Целевая аудитория 17
  18. 18. Целевая аудитория «ФП — для кандидатов наук и академиков» 18
  19. 19. Целевая аудитория «ФП — для кандидатов наук и академиков» «ФП — для монахов-аскетов, которым связали руки и ноги» 19
  20. 20. Айсберг скрытой сложности Лямбды, иммутабельность, чистота Зигоморфизмы, категории, эндофункторы 20
  21. 21. Несколько уровней сложности Лямбды, иммутабельность, чистота Композиция Контроль эффектов Функторы, монады, моноиды Функциональные подходы и паттерны 21
  22. 22. Механизмы и конструкции в ФП 22
  23. 23. Механизмы и конструкции в ФП «Без переменных и циклов нельзя написать реальный код» 23
  24. 24. Механизмы и конструкции в ФП «Без переменных и циклов нельзя написать реальный код» «В ФП нет состояния» 24
  25. 25. Механизмы и конструкции в ФП «Без переменных и циклов нельзя написать реальный код» «В ФП нет состояния» «В ФП нет побочных эффектов» 25
  26. 26. Состояние в ФП Чистое иммутабельное состояние ❖ Argument passing state ❖ Монада State Нечистое мутабельное состояние ❖ IO Ref ❖ MVar (concurrent variable) ❖ TVar (transactional variable) f g f g 26
  27. 27. Применимость парадигмы 27
  28. 28. Применимость парадигмы «ФП в реальном мире не используется» 28
  29. 29. Применимость парадигмы «ФП в реальном мире не используется» «ФП — это медленно» 29
  30. 30. 1960 Эпоха исследований (1960 - 2010 - ...) 2000 2010 20202005 2015 Эпоха «ненужности» (2005 - 2015) Мейнстрим 2017 (2013 - …) 30
  31. 31. ФП — это медленно? 31
  32. 32. Персистентные структуры данных 32
  33. 33. Философия парадигмы 33
  34. 34. Философия парадигмы «ФП — это математика» 34
  35. 35. Философия парадигмы «ФП — это математика» «ФП не привносит ничего нового» 35
  36. 36. Философия парадигмы «ФП — это математика» «ФП не привносит ничего нового» «Все равно все компилируется в машинный код» 36
  37. 37. Спасибо за внимание! Александр Гранин graninas@gmail.com 37

×