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

Содержание

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

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

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

2010

F# функциональный язык «новой» волны  Артем Присяжнюк 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?
Явный уклон в функциональшину

Рожденные в 2000-х
  F#(2002) Scala (2003) Nemerle (2005) Clojure (2007) C#/VB.NET

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

Это ж-ж-ж неспроста!

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

ввысь
рост в ширь
Количество CPU

Герцы

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

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

«десктопе» теперь по идее можно решать более

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

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

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

идеале, на N CPU система должна:
работать в

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

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

успевает за развитием железа;
Софт не эффективно работает

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

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

«с человеческим лицом» для разработки многопотоковых программ;
Появление

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

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

ОС

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

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

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

- да
Side эффекты – да
Блокировки, синхронизации –

да
Межпотоковое взаимодействие – разделяемые ресурсы
Императивный подход Изменяемые данные - да Разделяемые изменяемые данные - да Side

Слайд 13Mutable shared state

Mutable shared state

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

блокировок
Неправильное использование блокировок
Блокировки в неверном порядке
Следствия
Dead-lock-и
Нарушение целостности

данных
Race condition
Плохая повторяемость (трудность отладки)
Проблемы с блокировками и разделяемыми ресурсами Мало блокировок Много блокировок Неправильное использование

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

– нет
Side эффекты – нет
Блокировки, синхронизации –

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


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

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

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

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

(Excel)
XSLT
SQL

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

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

programming (Erlang)
Async

Axum
LINQ, PLINQ
Rx Framework
Task Parallel library
C#
F#

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

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

типов

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

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

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

Слайд 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

История F# (2002) Haskell 1990 Seq  Workflow (aka Монады) List comprehensions

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

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

Развитие языков Safety  Usefulnes C#, VB.NET, Java LINQ Haskell F# Нирвана

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

-> XML)
Безопасность кода
Перенос рутинных задач на компилятор

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



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

Слайд 23FP, F#, Haskell & друзья как источник

идей
Движение концепций F# -> C#
Generics
Lambda
LINQ (former monads)
Type

inference
Async
List comprehension
?

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

Слайд 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)


F# features Краткость Строгая, статическая типизация Выведение типов Pattern matching Clousers Кортежи

Слайд 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



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

Слайд 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

Тяжелое наследие прошлого  Thread Safety Any public static ( Shared in Visual Basic) members of

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

на message passing style
Использование не мутабельных данных
Async
First

class events

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

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

систем;
Уши растут из I/O Completion Ports, который

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



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

Слайд 33Async-workflow
Идея спрятать, BeginXXX и EndXXX для асинхронных

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

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

Слайд 34Sync code VS Async code

Sync code VS Async code

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

состояния
No sequential bottlenecks
Сообщения для коммуникации между процессами
Немутабельный

состояние - аналогия с системой контроля версий

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

Слайд 36Mailbox processing & Message passing style
У нас

очень много легких агентов которые выполняют некоторую

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

Слайд 37Mailbox processing & Message passing style
Вся работа

происходит асинхронно (Async);
Блокирующих операций нет;
Сотни тысяч агентов

могут жить в десятке потоков из ThreadPool;
Все отлично растягивается по доступным процессорам/ядрам
Mailbox processing & Message passing style Вся работа происходит асинхронно (Async); Блокирующих

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

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

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

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

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

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

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


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

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