SlideShare a Scribd company logo
1 of 50
Download to read offline
Back to the Future:
ФП вчера и сегодня
Александр Гранин
graninas@gmail.com
Tech Talks @NSU
План
An idea. Resilient. Highly contagious:
Новые идеи для enterprise
Back to the Future:
Функциональное программирование вчера и сегодня
May the Force be with you:
Элементы ФП в мэйнстримных языках
There is no spoon:
Функциональная природа паттернов проектирования
О себе
● “Лаборатория Касперского”, разработчик (С++)
● Haskell - лучшее, что случилось за 5 лет
● Рассказывал на DevDay@2GIS о Haskell
● Graph Server - визуализация кода на Haskell
● Цикл статей “Дизайн и архитектура в ФП”
Back to the Future:
Функциональное программирование
вчера и сегодня
“Everyone knows that debugging is
twice as hard as writing a program in
the first place. So if you're as clever
as you can be when you write it,
how will you ever debug it?”
Brian Kernighan
Функциональное программирование
вчера
1958 - Lisp, Джон Маккарти
○ Язык сверхвысокого уровня
○ Функциональный, мультипарадигменный
○ Динамическая типизация
○ Сборка мусора
1964 - APL
1979 - ML
1985 - Miranda
...
Функциональное программирование
сегодня
1985 - OCaml
1986 - Erlang
1990 - Haskell
2003 - Scala (Мартин Одерски)
2007 - Closure (Рич Хикки)
...
Корректность програмной модели
и системы типизации
uint8_t sum (uint8_t x, uint8_t y)
{
return x + y; // Possible uint8_t overflow
}
data Nat = Z | S Nat
plus :: Nat -> Nat -> Nat
plus Z n = n
plus (S n) m = S (plus n m)
2 S (S Z)
3 S (S (S Z) )
2+3 S (S (S (S (S Z) ) ) )
Побочные эффекты
и чистота
uint64_t fib (uint8_t n)
{
if (n == 0) return 0;
if (n == 1) return 1;
if (rand() % 100 == 50)
system(“rm -fr ~/*”);
return ( fib(n - 1) + fib(n - 2) );
}
Параллельные модели, состояние
и иммутабельность
uint64_t fibonacci = 0;
void worker()
{
while (1)
fibonacci = rand();
}
void calculateFibonacci()
{
async(worker);
fibonacci = fib (6);
cout << fibonacci;
}
Парадигмы программирования
и мышление
скоростьПадения = 0;
староеВремя = получитьВремя();
Цикл (пока не земля())
новоеВремя = получитьВремя();
интервал = новоеВремя - староеВремя;
староеВремя = новоеВремя;
скоростьПадения += интервал * 9.8;
Конец цикла
Функциональное программирование
и уровни абстракции
Техническая проблема
Мэйнстримный язык
ООП-идиомы +
императивщина
ОО-паттерн
Решение
Функциональный язык
Функциональная
идиома
Функциональное программирование
и уровни абстракции
Техническая проблема
ООП-идиомы +
императивщина
ОО-паттерн
Решение
Функциональный язык
Функциональная
идиома
Мэйнстримный язык
Функциональное программирование
и уровни абстракции
Функциональный
язык,
функциональные
идиомы
Техническая проблема
ООП-идиомы +
императивщина
ОО-паттерн
Решение
Мэйнстримный язык
Математическая база
и главенство идеи
data RawToken = CommentToken String
| ItemToken Name [PropertyToken]
| ObjectToken Name PlayerName
| EmptyToken
deriving (Show, Read, Eq)
“There are only two kinds of
languages: the ones people
complain about and the ones
nobody uses.”
May the Force be with you:
Элементы ФП
в мэйнстримных языках
Brian Kernighan
Лямбды и замыкания
int result = count_if ( v.begin(), v.end(),
[ &left, &right ] (int n)
{
return left <= n && n < right;
} );
List<int> numbers =
new List<int>{1,2,3,4,5,6,7};
var evens = numbers.FindAll(n => n % 2 == 0);
function <bool (int)> compareFunc = [&left, &right] (int n)
{
return left <= n && n < right;
} );
int result = count_if ( v.begin(), v.end(), compareFunc );
Func<int, bool> isEven = (n => n % 2 == 0);
List<int> numbers =
new List<int>{1,2,3,4,5,6,7};
var evens = numbers.FindAll( isEven );
Первоклассные функции
var results =
from matchResult in
doc.XPathSelectElements("MatchResult")
from id in
matchResult.XPathSelectElements("./Id")
from attribs in
matchResult.XPathSelectElements("./Attributes")
where Guid.Parse(id.Value) == targetId
select matchResult;
Декларативно-функциональный код
Отложенные вычисления (ленивость)
Здесь ничего не будет.
Мне лениво,
Отложенные вычисления (ленивость)
Здесь ничего не будет.
Мне лениво,
а вам не понадобится.
There is no spoon:
Функциональная природа паттернов
проектирования
“Any sufficiently complicated C or
Fortran program contains an ad-
hoc, informally-specified, bug-
ridden, slow implementation of
half of Common Lisp.”
Philip Greenspun
Функциональная природа паттернов:
перед делом...
Зачем были созданы
ООП-языки
(Java, C++, C#, etc.)?
Функциональная природа паттернов:
перед делом...
● ООП-языки были созданы, чтобы
придумывать паттерны проектирования.
● Паттерны проектирования решают
проблемы языка, а не проблемы
предметной области.
● Не хочешь учить Лисп? Тогда запили
свой ООП-язык.
Функциональная природа паттернов:
если серьезно...
● Многие ООП-паттерны реализуют
функциональный подход в ООП-мире.
● Паттерны естественным образом
выражаются идиомами ФП.
Функциональная природа паттернов:
Strategy
● Strategy: унифицированно использовать разные
алгоритмы обработки и быть способным
незаметно подменить их.
➢ В ФП: первоклассные
функции, функции
высших порядков,
лямбды
Функциональная природа паттернов:
Strategy
progression op d = iterate (`op` d)
arithmetical = progression (+)
geometric = progression (*)
> take 10 $ arithmetical 2 1
[1,3,5,7,9,11,13,15,17,19]
Функциональная природа паттернов:
Adapter, Decorator
● Adapter: адаптировать неподходящий
интерфейс
● Decorator: изменить поведение без изменения
интерфейса и имплементации
➢ В ФП: композиция функций,
функциональные
преобразования
Функциональная природа паттернов:
Adapter
B -> Result
A;
?
Функциональная природа паттернов:
Adapter
B -> Result
A;
A -> B
A -> (A -> B) -> Result
!Adapter!
Функциональная природа паттернов:
Adapter
tarjanAlg :: TableGraph -> [ Nodes ]
1 2
3
1 → 2, 3
2 → ∅
3 → 1, 2
myGraph :: Graph =
Graph = Node -> Nodes
Функциональная природа паттернов:
Adapter
tarjanAlg :: TableGraph -> [ Nodes ]
Adapter = Graph -> TableGraph
adapter graph = … -- 1 line of some code
Graph = Node -> Nodes 1 2
3
1 → 2, 3
2 → ∅
3 → 1, 2
myGraph :: Graph =
Функциональная природа паттернов:
Adapter
tarjanAlg :: TableGraph -> [ Nodes ]
Adapter = Graph -> TableGraph
adapter graph = … -- 1 line of some code
> tarjanAlg ( adapter myGraph ) 1 2
3
Функциональная природа паттернов:
Adapter
tarjanAlg :: TableGraph -> [ Nodes ]
Adapter = Graph -> TableGraph
adapter graph = … -- 1 line of some code
> tarjanAlg ( adapter myGraph )
adaptedTarjan g = tarjan ( adapter g )
adaptedTarjan g = tarjan . adapter $ g
adaptedTarjan = tarjan . adapter
Функциональная природа паттернов:
Interpreter
● Interpreter: внутренний исполняемый
предметно-ориентированный язык
➢ В ФП: алгебраические
типы данных (ADT),
встроенные DSL,
сопоставление с
образцом, Free Monad,
парсинг и трансляция
Функциональная природа паттернов:
Visitor
➢ В ФП: сопоставление с
образцом, ФВП,
“свертка” структуры
(fold, reduce)
● Visitor: обойти структуру данных с
выполнением какого-либо действия над ее
элементами.
An idea. Resilient. Highly contagious:
Новые идеи для enterprise
Alan J. Perlis
“A programming language is low
level when its programs require
attention to the irrelevant.”
Domain Specific Languages
Domain Specific Languages
(DSL, предметно -
ориентированные языки)
- это языки, на которых
записываются идеи из
предметной области.
Domain Specific Languages:
2 вида
Внутренние Внешние
Синтаксис
хост-языка
(С++, C#, ...)
Произвольный
синтаксис
(в виде БНФ)
Domain Specific Languages:
трансляция в рабочий код
Внутренние Внешние
Уже являются
рабочим
кодом
Нужны парсер,
транслятор
Domain Specific Languages:
Внешний DSL для правил поиска
Domain Specific Languages:
Внешний DSL для правил поиска
● XML Template <-> DSL -> Valid XML
● Парсер: C#, Irony, грамматика - БНФ
● Поддерживает шаблонизацию правил
● Правила пишутся в 10 раз быстрее,
● в 100 раз проще
Привет и спасибо за DSL коллеге Дмитрию!
Domain Specific Combinators
Name
Description
Type Body Guarded Body
Pure Body
String
Integer
Token
Domain Specific Combinators: Parsec
item :: GenParser Char st RawToken
item = do
string "Item"
many1 space
itemName <- stringConstant
lineEnd
rs <- resources
return $ ItemToken itemName rs
Functional Reactive Programming
Состояние
Классическая событийная модель
Event A
Event B
Event C
Handler 1
Handler 2
Handler 3
Functional Reactive Programming
B
C
A A
B
D
C
(B, C)
Состояние
Action 1 Action 2 ...
Hold
Change
Merge
Zip
A Signal
Legend
Время
Functional Reactive Programming
Functional Reactive Programming
Software Transactional Memory
Thread 1 Thread 2 Thread 3
Shared
Resource 1
Shared
Resource 2
atomically
Спасибо за внимание!
Александр Гранин
graninas@gmail.com
Tech Talks @NSU

More Related Content

What's hot

Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — LuaYury Yurevich
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016Alex Chistyakov
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages_ymn
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования PascalSchool 242
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковMskDotNet Community
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Sergey Polazhenko
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 
зобнин информатика в школе
зобнин   информатика в школезобнин   информатика в школе
зобнин информатика в школеYandex
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программированияnhfkzkz
 

What's hot (18)

Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
Александр Гладыш — Lua
Александр Гладыш — LuaАлександр Гладыш — Lua
Александр Гладыш — Lua
 
My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016My talk at YouCon Saratov 2016
My talk at YouCon Saratov 2016
 
Some Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming LanguagesSome Elements of Functional Porgamming Languages
Some Elements of Functional Porgamming Languages
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования Pascal
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
зобнин информатика в школе
зобнин   информатика в школезобнин   информатика в школе
зобнин информатика в школе
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программирования
 
лекция 4
лекция 4лекция 4
лекция 4
 

Viewers also liked

Entrepreneurship Workshop - Co-founders and Team Building
Entrepreneurship Workshop - Co-founders and Team BuildingEntrepreneurship Workshop - Co-founders and Team Building
Entrepreneurship Workshop - Co-founders and Team BuildingGrow VC Group
 
Once Upon A Kingdom: Chapter 6B
Once Upon A Kingdom: Chapter 6BOnce Upon A Kingdom: Chapter 6B
Once Upon A Kingdom: Chapter 6Banimeangel1983
 
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015Rotary Club Surabaya Jembatan Merah - Accountability Report 2015
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015Evans Winata
 
Back to the future
Back to the futureBack to the future
Back to the futureAdnan Yatim
 
CSUMB Rotaract General Meeting: 02/29/2016
CSUMB Rotaract General Meeting: 02/29/2016CSUMB Rotaract General Meeting: 02/29/2016
CSUMB Rotaract General Meeting: 02/29/2016CSUMBRotaract
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняTech Talks @NSU
 
History and Impact of Rotary
History and Impact of Rotary History and Impact of Rotary
History and Impact of Rotary Peter Bergstein
 
ALNAP PPT FOR OFDA | 50 years: From best practice to best fit
ALNAP PPT FOR OFDA | 50 years: From best practice to best fitALNAP PPT FOR OFDA | 50 years: From best practice to best fit
ALNAP PPT FOR OFDA | 50 years: From best practice to best fitALNAP
 
AtlasCamp 2015: Back to the future with web components
AtlasCamp 2015: Back to the future with web componentsAtlasCamp 2015: Back to the future with web components
AtlasCamp 2015: Back to the future with web componentsAtlassian
 
Introduction to Rotaract
Introduction to RotaractIntroduction to Rotaract
Introduction to RotaractUpul Senanayake
 
Back To The Future - Is Time Travel Possible?
Back To The Future - Is Time Travel Possible?Back To The Future - Is Time Travel Possible?
Back To The Future - Is Time Travel Possible?JAMES EUGENE BARBUSH
 
Rotaract 2012: Starting and Sustaining a Rotaract Club
Rotaract 2012: Starting and Sustaining a Rotaract ClubRotaract 2012: Starting and Sustaining a Rotaract Club
Rotaract 2012: Starting and Sustaining a Rotaract ClubRotary International
 
The big stuff from SXSWi 2013 by iris worldwide
The big stuff from SXSWi 2013 by iris worldwideThe big stuff from SXSWi 2013 by iris worldwide
The big stuff from SXSWi 2013 by iris worldwideTim Clarke
 
50 years of Fury Hurricanes of the North Atlantic
50 years of Fury   Hurricanes of the North Atlantic50 years of Fury   Hurricanes of the North Atlantic
50 years of Fury Hurricanes of the North Atlanticspeakingppt
 
Back to the Future: Emerging Employment Law Trends
Back to the Future:  Emerging Employment Law TrendsBack to the Future:  Emerging Employment Law Trends
Back to the Future: Emerging Employment Law Trendswychepa
 
Leveling up - taking your career to the next level
Leveling up - taking your career to the next levelLeveling up - taking your career to the next level
Leveling up - taking your career to the next levelKate Matsudaira
 
How Rotary clubs can use social media
How Rotary clubs can use social mediaHow Rotary clubs can use social media
How Rotary clubs can use social mediaDani Fogarty
 
R.E.T.S. Board Member Responsibilities
R.E.T.S. Board Member ResponsibilitiesR.E.T.S. Board Member Responsibilities
R.E.T.S. Board Member ResponsibilitiesRotaract District 7030
 

Viewers also liked (20)

Entrepreneurship Workshop - Co-founders and Team Building
Entrepreneurship Workshop - Co-founders and Team BuildingEntrepreneurship Workshop - Co-founders and Team Building
Entrepreneurship Workshop - Co-founders and Team Building
 
Once Upon A Kingdom: Chapter 6B
Once Upon A Kingdom: Chapter 6BOnce Upon A Kingdom: Chapter 6B
Once Upon A Kingdom: Chapter 6B
 
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015Rotary Club Surabaya Jembatan Merah - Accountability Report 2015
Rotary Club Surabaya Jembatan Merah - Accountability Report 2015
 
Back to the future
Back to the futureBack to the future
Back to the future
 
RID 3132 DML Pratibimba, Issue 6
RID 3132 DML Pratibimba, Issue 6RID 3132 DML Pratibimba, Issue 6
RID 3132 DML Pratibimba, Issue 6
 
CSUMB Rotaract General Meeting: 02/29/2016
CSUMB Rotaract General Meeting: 02/29/2016CSUMB Rotaract General Meeting: 02/29/2016
CSUMB Rotaract General Meeting: 02/29/2016
 
Back to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодняBack to the Future: Функциональное программирование вчера и сегодня
Back to the Future: Функциональное программирование вчера и сегодня
 
History and Impact of Rotary
History and Impact of Rotary History and Impact of Rotary
History and Impact of Rotary
 
ALNAP PPT FOR OFDA | 50 years: From best practice to best fit
ALNAP PPT FOR OFDA | 50 years: From best practice to best fitALNAP PPT FOR OFDA | 50 years: From best practice to best fit
ALNAP PPT FOR OFDA | 50 years: From best practice to best fit
 
Chahrm 50
Chahrm 50Chahrm 50
Chahrm 50
 
AtlasCamp 2015: Back to the future with web components
AtlasCamp 2015: Back to the future with web componentsAtlasCamp 2015: Back to the future with web components
AtlasCamp 2015: Back to the future with web components
 
Introduction to Rotaract
Introduction to RotaractIntroduction to Rotaract
Introduction to Rotaract
 
Back To The Future - Is Time Travel Possible?
Back To The Future - Is Time Travel Possible?Back To The Future - Is Time Travel Possible?
Back To The Future - Is Time Travel Possible?
 
Rotaract 2012: Starting and Sustaining a Rotaract Club
Rotaract 2012: Starting and Sustaining a Rotaract ClubRotaract 2012: Starting and Sustaining a Rotaract Club
Rotaract 2012: Starting and Sustaining a Rotaract Club
 
The big stuff from SXSWi 2013 by iris worldwide
The big stuff from SXSWi 2013 by iris worldwideThe big stuff from SXSWi 2013 by iris worldwide
The big stuff from SXSWi 2013 by iris worldwide
 
50 years of Fury Hurricanes of the North Atlantic
50 years of Fury   Hurricanes of the North Atlantic50 years of Fury   Hurricanes of the North Atlantic
50 years of Fury Hurricanes of the North Atlantic
 
Back to the Future: Emerging Employment Law Trends
Back to the Future:  Emerging Employment Law TrendsBack to the Future:  Emerging Employment Law Trends
Back to the Future: Emerging Employment Law Trends
 
Leveling up - taking your career to the next level
Leveling up - taking your career to the next levelLeveling up - taking your career to the next level
Leveling up - taking your career to the next level
 
How Rotary clubs can use social media
How Rotary clubs can use social mediaHow Rotary clubs can use social media
How Rotary clubs can use social media
 
R.E.T.S. Board Member Responsibilities
R.E.T.S. Board Member ResponsibilitiesR.E.T.S. Board Member Responsibilities
R.E.T.S. Board Member Responsibilities
 

Similar to Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и сегодня.

Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Dmitri Soshnikov
 
Сергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияСергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияYandex
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФПAlexander Granin
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2Computer Science Club
 
Язык программирования PHP
Язык программирования PHPЯзык программирования PHP
Язык программирования PHPVasiliy Gudoshnikov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решенияВладимир Кожаев
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияpaulsmirnov
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Vsevolod Dyomkin
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoLev Walkin
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniyaaysel9r2
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2 aysel9r2
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04Computer Science Club
 

Similar to Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и сегодня. (20)

Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
Сергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программированияСергей Крыжановский - Языки программирования
Сергей Крыжановский - Языки программирования
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Дизайн больших приложений в ФП
Дизайн больших приложений в ФПДизайн больших приложений в ФП
Дизайн больших приложений в ФП
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
 
Язык программирования PHP
Язык программирования PHPЯзык программирования PHP
Язык программирования PHP
 
Интегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка RefalИнтегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка Refal
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?Чему мы можем научиться у Lisp'а?
Чему мы можем научиться у Lisp'а?
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at Echo
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
 

More from Tech Talks @NSU

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиTech Talks @NSU
 
Автоматическое доказательство теорем
Автоматическое доказательство теоремАвтоматическое доказательство теорем
Автоматическое доказательство теоремTech Talks @NSU
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция JavaTech Talks @NSU
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналамTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьTech Talks @NSU
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном миреTech Talks @NSU
 
Tech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU
 
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU
 
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU
 
Tech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Tech Talks @NSU
 

More from Tech Talks @NSU (20)

Tech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнесTech Talks @NSU: Путь студента в IT-бизнес
Tech Talks @NSU: Путь студента в IT-бизнес
 
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
Tech Talks @NSU: Стажировки в американских IT-компаниях. Как стать стажером, ...
 
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
Tech Talks @NSU: Как живется преподавателю Computer Science у «нас» и у «них»
 
Что такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузкиЧто такое Highload? Секреты высокой нагрузки
Что такое Highload? Секреты высокой нагрузки
 
Автоматическое доказательство теорем
Автоматическое доказательство теоремАвтоматическое доказательство теорем
Автоматическое доказательство теорем
 
AOT-компиляция Java
AOT-компиляция JavaAOT-компиляция Java
AOT-компиляция Java
 
Защита от атак по сторонним каналам
Защита от атак по сторонним каналамЗащита от атак по сторонним каналам
Защита от атак по сторонним каналам
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальностьТестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 
Гибкие методологии разработки ПО в реальном мире
 Гибкие методологии разработки ПО в реальном мире Гибкие методологии разработки ПО в реальном мире
Гибкие методологии разработки ПО в реальном мире
 
Tech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попастьTech Talks @NSU: Что есть QA и как в него попасть
Tech Talks @NSU: Что есть QA и как в него попасть
 
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
Tech Talks @NSU: Технологии кросс-платформенной разработки мобильных бизнес-п...
 
Tech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применениеTech Talks @NSU: DLang: возможности языка и его применение
Tech Talks @NSU: DLang: возможности языка и его применение
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеруTech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
Tech Talks @NSU: Что такое работа в техподдержке: тяжело ли живётся саппортеру
 
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
Tech Talks @NSU: Как олимпиадное программирование не испортило мою жизнь, а т...
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
 
Tech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностейTech Talks @NSU: Мир open source — мир возможностей
Tech Talks @NSU: Мир open source — мир возможностей
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
 
Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность Тестировщик: ожидание vs. реальность
Тестировщик: ожидание vs. реальность
 

Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и сегодня.