F# функциональный язык новой волны презентация

Содержание

Представлюсь Артем Присяжнюк Технический директор компании ХостТрекер Опыт работы с ФЯ – 10 лет (Ocaml, F#) ХостТрекер – распределенная система мониторинга доступности сайтов a.p@host-tracker.com http://host-tracker.com

Слайд 1F# функциональный язык «новой» волны

Артем Присяжнюк
Kiev ALT.NET 2010


Слайд 2Представлюсь
Артем Присяжнюк
Технический директор компании ХостТрекер
Опыт работы с ФЯ – 10 лет

(Ocaml, F#)

ХостТрекер – распределенная система мониторинга доступности сайтов
a.p@host-tracker.com
http://host-tracker.com

Слайд 3Рожденные в 2000-х
F#(2002)
Scala (2003)
Nemerle (2005)
Clojure (2007)
C#/VB.NET LINQ/PLINQ, lambda
ФЯ от Intel. 2011?
Явный

уклон в функциональшину


Слайд 4
Это ж-ж-ж неспроста!


Слайд 5Текущий тренд в железе – мультиядерность
Вместо роста ввысь
рост в ширь
Количество

CPU


Герцы



Слайд 6Две основные тенденции
Приход MultyCPU-систем в широкие массы На «десктопе» теперь по идее

можно решать более «тяжелые» задачи;
Приход масс в интернет Нужны высоконагруженные, высокопроизводительные системы.


Слайд 7Нужны «эффективные» программы «заточенные» под мультиядерность.
В идеале, на N CPU

система должна:
работать в N раз быстрее;
обслуживать в N раз больше пользователей;
выполнять в N раз больше транзакций.

Слайд 8Старые подходы не оправдали себя
Развития софта не успевает за развитием железа;
Софт

не эффективно работает на новом железе;
Плохо масштабируется;
С ростом сложности систем, сложность программ растет экспоненциально.

Слайд 10Параллельное программирование вышло в массы
Нужны языки/платформы/инструменты «с человеческим лицом» для

разработки многопотоковых программ;
Появление новых ФЯ программирования, дает надежду на появление новых таковых.

Слайд 11Поддержка параллелизма
«Старый» подход
Уровень примитивов сторонних библиотек, ядра ОС

«Новый» подход
Уровень парадигмы самого

языка


Слайд 12Императивный подход
Изменяемые данные - да
Разделяемые изменяемые данные - да
Side эффекты –

да
Блокировки, синхронизации – да
Межпотоковое взаимодействие – разделяемые ресурсы

Слайд 13Mutable shared state


Слайд 14Проблемы с блокировками и разделяемыми ресурсами
Мало блокировок
Много блокировок
Неправильное использование блокировок
Блокировки в

неверном порядке
Следствия
Dead-lock-и
Нарушение целостности данных
Race condition
Плохая повторяемость (трудность отладки)

Слайд 15Функциональный подход
Изменяемые данные – нет
Разделяемые изменяемые данные – нет
Side эффекты –

нет
Блокировки, синхронизации – нет
Межпотоковое взаимодействие – сообщения, Map/Reduce



Слайд 16Кто использовал функциональное программирование на практике?


Слайд 17Кто использовал функциональное программирование на практике?
Электронные таблицы (Excel)
XSLT
SQL


Слайд 18Носители «Нового» подхода
Функциональное программирование
Agent & message-passing style programming (Erlang)
Async

Axum
LINQ, PLINQ
Rx Framework
Task

Parallel library
C#
F#


Слайд 19История F# (2002)
Лямбда-счисление 1936
Lisp/Schema 1958
ML 1970
Hindley–Milner Система типов

Ocaml 1996
Синтаксис
Система типов
Код
Генерики

(Don Syme Привет c# 2.0)
Дон Сайм портировал Ocaml на .NET (2002)


Слайд 20История F# (2002)
Haskell 1990
Seq
Workflow (aka Монады)
List comprehensions
Python 1990
List comprehensions
Whitespace indentation

Erlang

1987
Message passing style
Parallel processing
C#/.NET
OO system
Framework


Слайд 21Развитие языков
Safety

Usefulnes
C#, VB.NET, Java
LINQ
Haskell
F#
Нирвана


Слайд 22Основные направления развития языков
Упрощение технологий (Пример SGML -> XML)
Безопасность кода
Перенос рутинных

задач на компилятор /рантайм (GC, Type inference) ;
Строгая типизация + автоматический вывод типов;
Мета программирование
Макросы - изменение языка
Синтаксис (выразительность, краткость)
Потокобезопасность
Параллелизм - на уровень языка.




Слайд 23FP, F#, Haskell & друзья как источник идей
Движение концепций F# ->

C#
Generics
Lambda
LINQ (former monads)
Type inference
Async
List comprehension
?


Слайд 24F# features
Краткость
Строгая, статическая типизация
Выведение типов
Pattern matching
Clousers
Кортежи (Tuples)
Currying
High-order function
Workflows (aka Монады)
Async-framework
Quatations
Lazy-evalutions
Multy

paradigm
Good integration with .NET library/family
Multy Platform (Thanks Mono.NET)



Слайд 25Что нужно чтобы научиться есть палочками?


Слайд 26Что нужно чтобы научиться есть палочками?
Есть палочками
Выкинуть вилки/ложки


Слайд 27Что нужно чтобы научится программировать функционально?


Слайд 28Что нужно чтобы научится программировать функционально?
Программировать функционально;
Выкинуть из обихода императивные конструкции.


Слайд 29Выворачиваем с изнанки Императивный стиль -> FP
X = x + 1

-> let x = x + 1
For/while -> let rec (tail recursion)
If/switch -> pattern matching
In/out параметры -> tuples
Enum -> variant types
Array -> List
FP style OO
Null -> option type




Слайд 30Тяжелое наследие прошлого

Thread Safety
Any public static ( Shared in Visual Basic) members of this type

are thread safe. Any instance members are not guaranteed to be thread safe.
Microsoft Help Library 2010


Слайд 31Выворачиваем с изнанки Паралельное программирование
Миграция с lock style на message passing style
Использование

не мутабельных данных
Async
First class events


Слайд 32Асинхронная обработка
Ключ к построению производительных, хорошо масштабируемых систем;
Уши растут из I/O

Completion Ports, который очень сложен в использовании;
.NET – асинхронность через BeginXXX, EndXXX. Все равно достаточно сложно. Логика расползается.




Слайд 33Async-workflow
Идея спрятать, BeginXXX и EndXXX для асинхронных операций.
Дать программисту такой же

легкий способ выполнять асинхронные операции, как и синхронные.

Слайд 34Sync code VS Async code


Слайд 35Erlang Message Passing Concurrency
Много легких процессов(agents)
Нет общего состояния
No sequential bottlenecks
Сообщения для

коммуникации между процессами
Немутабельный состояние - аналогия с системой контроля версий


Слайд 36Mailbox processing & Message passing style
У нас очень много легких агентов

которые выполняют некоторую работу;
У каждого агента есть Mailbox с очередью, через который он получает сообщения из вне;
Агенты могут посылать сообщения как другим агентам, так и себе;
У каждого агента есть внутреннее состояние (аналогия с контролем версий)

Слайд 37Mailbox processing & Message passing style
Вся работа происходит асинхронно (Async);
Блокирующих операций

нет;
Сотни тысяч агентов могут жить в десятке потоков из ThreadPool;
Все отлично растягивается по доступным процессорам/ядрам

Слайд 39Спасибо за внимание
Вопросы?


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика