Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 13 лет назад пользователемkievaltnet
1 F# функциональный язык «новой» волны Артем Присяжнюк Kiev ALT.NET 2010
2 Представлюсь Артем Присяжнюк Технический директор компании ХостТрекер Опыт работы с ФЯ – 10 лет (Ocaml, F#) ХостТрекер – распределенная система мониторинга доступности сайтов
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 эффекты – да Блокировки, синхронизации – да Межпотоковое взаимодействие – разделяемые ресурсы
13 Mutable shared state
14 Проблемы с блокировками и разделяемыми ресурсами Мало блокировок Много блокировок Неправильное использование блокировок Блокировки в неверном порядке Следствия Dead-lock-и Нарушение целостности данных Race condition Плохая повторяемость (трудность отладки)
15 Функциональный подход Изменяемые данные – нет Разделяемые изменяемые данные – нет Side эффекты – нет Блокировки, синхронизации – нет Межпотоковое взаимодействие – сообщения, Map/Reduce
16 Кто использовал функциональное программирование на практике?
17 Электронные таблицы (Excel) XSLT SQL
18 Носители «Нового» подхода Функциональное программирование Agent & message-passing style programming (Erlang) Async Cω 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) ; Строгая типизация + автоматический вывод типов; Мета программирование Макросы - изменение языка Синтаксис (выразительность, краткость) Потокобезопасность Параллелизм - на уровень языка.
23 FP, F#, Haskell & друзья как источник идей Движение концепций F# -> C# Generics Lambda LINQ (former monads) Type inference Async List comprehension ?
24 F# 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 a)Есть палочками b)Выкинуть вилки/ложки
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. Все равно достаточно сложно. Логика расползается.
33 Async-workflow Идея спрятать, BeginXXX и EndXXX для асинхронных операций. Дать программисту такой же легкий способ выполнять асинхронные операции, как и синхронные.
34 Sync code VS Async code
35 Erlang Message Passing Concurrency Много легких процессов(agents) Нет общего состояния No sequential bottlenecks Сообщения для коммуникации между процессами Немутабельный состояние - аналогия с системой контроля версий
36 Mailbox processing & Message passing style У нас очень много легких агентов которые выполняют некоторую работу; У каждого агента есть Mailbox с очередью, через который он получает сообщения из вне; Агенты могут посылать сообщения как другим агентам, так и себе; У каждого агента есть внутреннее состояние (аналогия с контролем версий)
37 Mailbox processing & Message passing style Вся работа происходит асинхронно (Async); Блокирующих операций нет; Сотни тысяч агентов могут жить в десятке потоков из ThreadPool; Все отлично растягивается по доступным процессорам/ядрам
38 Demo
39 Спасибо за внимание Вопросы?
Еще похожие презентации в нашем архиве:
© 2023 MyShared Inc.
All rights reserved.