Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
39 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
540.35 kB
Просмотров:
39
Скачиваний:
0
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![F функциональный язык новой](/documents/1816c4c2cb8d7e6135e6f537398f996f/img0.jpg)
Содержание слайда: F# функциональный язык «новой» волны
Артем Присяжнюк
Kiev ALT.NET 2010
№2 слайд![Представлюсь Артем Присяжнюк](/documents/1816c4c2cb8d7e6135e6f537398f996f/img1.jpg)
Содержание слайда: Представлюсь
Артем Присяжнюк
Технический директор компании ХостТрекер
Опыт работы с ФЯ – 10 лет (Ocaml, F#)
ХостТрекер – распределенная система мониторинга доступности сайтов
a.p@host-tracker.com
http://host-tracker.com
№3 слайд![Рожденные в -х F Scala](/documents/1816c4c2cb8d7e6135e6f537398f996f/img2.jpg)
Содержание слайда: Рожденные в 2000-х
F#(2002)
Scala (2003)
Nemerle (2005)
Clojure (2007)
C#/VB.NET LINQ/PLINQ, lambda
ФЯ от Intel. 2011?
Явный уклон в функциональшину
№4 слайд![](/documents/1816c4c2cb8d7e6135e6f537398f996f/img3.jpg)
№5 слайд![Текущий тренд в железе](/documents/1816c4c2cb8d7e6135e6f537398f996f/img4.jpg)
Содержание слайда: Текущий тренд в железе – мультиядерность
Вместо роста ввысь
рост в ширь
№6 слайд![Две основные тенденции Приход](/documents/1816c4c2cb8d7e6135e6f537398f996f/img5.jpg)
Содержание слайда: Две основные тенденции
Приход MultyCPU-систем в широкие массы
На «десктопе» теперь по идее можно решать более «тяжелые» задачи;
Приход масс в интернет
Нужны высоконагруженные, высокопроизводительные системы.
№7 слайд![Нужны эффективные программы](/documents/1816c4c2cb8d7e6135e6f537398f996f/img6.jpg)
Содержание слайда: Нужны «эффективные» программы «заточенные» под мультиядерность.
Нужны «эффективные» программы «заточенные» под мультиядерность.
В идеале, на N CPU система должна:
работать в N раз быстрее;
обслуживать в N раз больше пользователей;
выполнять в N раз больше транзакций.
№8 слайд![Старые подходы не оправдали](/documents/1816c4c2cb8d7e6135e6f537398f996f/img7.jpg)
Содержание слайда: Старые подходы не оправдали себя
Развития софта не успевает за развитием железа;
Софт не эффективно работает на новом железе;
Плохо масштабируется;
С ростом сложности систем, сложность программ растет экспоненциально.
№9 слайд![](/documents/1816c4c2cb8d7e6135e6f537398f996f/img8.jpg)
№10 слайд![Параллельное программирование](/documents/1816c4c2cb8d7e6135e6f537398f996f/img9.jpg)
Содержание слайда: Параллельное программирование вышло в массы
Нужны языки/платформы/инструменты «с человеческим лицом» для разработки многопотоковых программ;
Появление новых ФЯ программирования, дает надежду на появление новых таковых.
№11 слайд![Поддержка параллелизма Старый](/documents/1816c4c2cb8d7e6135e6f537398f996f/img10.jpg)
Содержание слайда: Поддержка параллелизма
«Старый» подход
№12 слайд![Императивный подход](/documents/1816c4c2cb8d7e6135e6f537398f996f/img11.jpg)
Содержание слайда: Императивный подход
Изменяемые данные - да
Разделяемые изменяемые данные - да
Side эффекты – да
Блокировки, синхронизации – да
Межпотоковое взаимодействие – разделяемые ресурсы
№13 слайд![Mutable shared state](/documents/1816c4c2cb8d7e6135e6f537398f996f/img12.jpg)
Содержание слайда: Mutable shared state
№14 слайд![Проблемы с блокировками и](/documents/1816c4c2cb8d7e6135e6f537398f996f/img13.jpg)
Содержание слайда: Проблемы с блокировками и разделяемыми ресурсами
Мало блокировок
Много блокировок
Неправильное использование блокировок
Блокировки в неверном порядке
Следствия
Dead-lock-и
Нарушение целостности данных
Race condition
Плохая повторяемость (трудность отладки)
№15 слайд![Функциональный подход](/documents/1816c4c2cb8d7e6135e6f537398f996f/img14.jpg)
Содержание слайда: Функциональный подход
Изменяемые данные – нет
Разделяемые изменяемые данные – нет
Side эффекты – нет
Блокировки, синхронизации – нет
Межпотоковое взаимодействие – сообщения, Map/Reduce
№16 слайд![Кто использовал](/documents/1816c4c2cb8d7e6135e6f537398f996f/img15.jpg)
Содержание слайда: Кто использовал функциональное программирование на практике?
№17 слайд![Кто использовал](/documents/1816c4c2cb8d7e6135e6f537398f996f/img16.jpg)
Содержание слайда: Кто использовал функциональное программирование на практике?
Электронные таблицы (Excel)
XSLT
SQL
№18 слайд![Носители Нового подхода](/documents/1816c4c2cb8d7e6135e6f537398f996f/img17.jpg)
Содержание слайда: Носители «Нового» подхода
Функциональное программирование
Agent & message-passing style programming (Erlang)
Async
Cω
Axum
LINQ, PLINQ
Rx Framework
Task Parallel library
C#
F#
№19 слайд![История F Лямбда-счисление](/documents/1816c4c2cb8d7e6135e6f537398f996f/img18.jpg)
Содержание слайда: История F# (2002)
Лямбда-счисление 1936
Lisp/Schema 1958
ML 1970
Hindley–Milner Система типов
№20 слайд![История F Haskell Seq](/documents/1816c4c2cb8d7e6135e6f537398f996f/img19.jpg)
Содержание слайда: История F# (2002)
Haskell 1990
Seq
Workflow (aka Монады)
List comprehensions
Python 1990
List comprehensions
Whitespace indentation
№21 слайд![Развитие языков](/documents/1816c4c2cb8d7e6135e6f537398f996f/img20.jpg)
Содержание слайда: Развитие языков
№22 слайд![Основные направления развития](/documents/1816c4c2cb8d7e6135e6f537398f996f/img21.jpg)
Содержание слайда: Основные направления развития языков
Упрощение технологий (Пример SGML -> XML)
Безопасность кода
Перенос рутинных задач на компилятор /рантайм (GC, Type inference) ;
Строгая типизация + автоматический вывод типов;
Мета программирование
Макросы - изменение языка
Синтаксис (выразительность, краткость)
Потокобезопасность
Параллелизм - на уровень языка.
№23 слайд![FP, F , Haskell amp друзья](/documents/1816c4c2cb8d7e6135e6f537398f996f/img22.jpg)
Содержание слайда: FP, F#, Haskell & друзья как источник идей
Движение концепций F# -> C#
Generics
Lambda
LINQ (former monads)
Type inference
Async
List comprehension
?
№24 слайд![F features Краткость Строгая,](/documents/1816c4c2cb8d7e6135e6f537398f996f/img23.jpg)
Содержание слайда: F# features
Краткость
Строгая, статическая типизация
Выведение типов
Pattern matching
Clousers
Кортежи (Tuples)
Currying
High-order function
№25 слайд![Что нужно чтобы научиться](/documents/1816c4c2cb8d7e6135e6f537398f996f/img24.jpg)
Содержание слайда: Что нужно чтобы научиться есть палочками?
№26 слайд![Что нужно чтобы научиться](/documents/1816c4c2cb8d7e6135e6f537398f996f/img25.jpg)
Содержание слайда: Что нужно чтобы научиться есть палочками?
Есть палочками
Выкинуть вилки/ложки
№27 слайд![Что нужно чтобы научится](/documents/1816c4c2cb8d7e6135e6f537398f996f/img26.jpg)
Содержание слайда: Что нужно чтобы научится программировать функционально?
№28 слайд![Что нужно чтобы научится](/documents/1816c4c2cb8d7e6135e6f537398f996f/img27.jpg)
Содержание слайда: Что нужно чтобы научится программировать функционально?
Программировать функционально;
Выкинуть из обихода императивные конструкции.
№29 слайд![Выворачиваем с изнанки](/documents/1816c4c2cb8d7e6135e6f537398f996f/img28.jpg)
Содержание слайда: Выворачиваем с изнанки
Императивный стиль -> 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 слайд![Тяжелое наследие прошлого](/documents/1816c4c2cb8d7e6135e6f537398f996f/img29.jpg)
Содержание слайда: Тяжелое наследие прошлого
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 слайд![Выворачиваем с изнанки](/documents/1816c4c2cb8d7e6135e6f537398f996f/img30.jpg)
Содержание слайда: Выворачиваем с изнанки
Паралельное программирование
Миграция с lock style на message passing style
Использование не мутабельных данных
Async
First class events
№32 слайд![Асинхронная обработка Ключ к](/documents/1816c4c2cb8d7e6135e6f537398f996f/img31.jpg)
Содержание слайда: Асинхронная обработка
Ключ к построению производительных, хорошо масштабируемых систем;
Уши растут из I/O Completion Ports, который очень сложен в использовании;
.NET – асинхронность через BeginXXX, EndXXX. Все равно достаточно сложно. Логика расползается.
№33 слайд![Async-workflow Идея спрятать,](/documents/1816c4c2cb8d7e6135e6f537398f996f/img32.jpg)
Содержание слайда: Async-workflow
Идея спрятать, BeginXXX и EndXXX для асинхронных операций.
Дать программисту такой же легкий способ выполнять асинхронные операции, как и синхронные.
№34 слайд![Sync code VS Async code](/documents/1816c4c2cb8d7e6135e6f537398f996f/img33.jpg)
Содержание слайда: Sync code VS Async code
№35 слайд![Erlang Message Passing](/documents/1816c4c2cb8d7e6135e6f537398f996f/img34.jpg)
Содержание слайда: Erlang Message Passing Concurrency
Много легких процессов(agents)
Нет общего состояния
No sequential bottlenecks
Сообщения для коммуникации между процессами
Немутабельный состояние - аналогия с системой контроля версий
№36 слайд![Mailbox processing amp](/documents/1816c4c2cb8d7e6135e6f537398f996f/img35.jpg)
Содержание слайда: Mailbox processing & Message passing style
У нас очень много легких агентов которые выполняют некоторую работу;
У каждого агента есть Mailbox с очередью, через который он получает сообщения из вне;
Агенты могут посылать сообщения как другим агентам, так и себе;
У каждого агента есть внутреннее состояние (аналогия с контролем версий)
№37 слайд![Mailbox processing amp](/documents/1816c4c2cb8d7e6135e6f537398f996f/img36.jpg)
Содержание слайда: Mailbox processing & Message passing style
Вся работа происходит асинхронно (Async);
Блокирующих операций нет;
Сотни тысяч агентов могут жить в десятке потоков из ThreadPool;
Все отлично растягивается по доступным процессорам/ядрам
№38 слайд![Demo](/documents/1816c4c2cb8d7e6135e6f537398f996f/img37.jpg)
№39 слайд![Спасибо за внимание Вопросы?](/documents/1816c4c2cb8d7e6135e6f537398f996f/img38.jpg)
Содержание слайда: Спасибо за внимание
Вопросы?