F# функциональный язык «новой» волны Артем Присяжнюк Kiev ALT.NET 2010.

Презентация:



Advertisements
Похожие презентации
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ.
Advertisements

Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Msdevcon.ru#msdevcon. Работа с асинхронными операциями в Win RT Иван Бодягин ABBYY.
Языки программирования Дмитрий Сошников
C# 5.0 Взгляд в будущее Язык формирует наш способ мышления и определяет то, о чем мы можем мыслить. Б. Л. Ворф Специально для TulaDev.NET.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Функциональное программирование Доклад на семинаре по специальности Студент гр.4057/2 Олег Хабаров
PARALLELISM В.NET 4.0 И VISUAL STUDIO 2010 Калита Роман TaskManagementSoft.
Эффективная разработка отчётов на платформе.NET Александр Федяшов Fast Reports Inc.
8/13/2012dotSITE - XP and MSF development in.NET1 Проектирование и создание приложений на базе Visual Studio.NET Andrew Filev Team leader dotSITE Ltd.Co.
Функциональное программирование Язык программирования F#.NET.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Инструменты Visual Studio для контроля качества и безопасности кода MSSD-3 Александр Яковлев, Microsoft.
Парадигмы программирования Денис С. Мигинский. Понятие парадигмы Парадигма (философия науки) – устоявшаяся система научных взглядов, в рамках которой.
Куратор: Ямпольская Л.И., директор УЦ ТПУ&Softline, тел.раб.(3822) Томск Национальный исследовательский Томский политехнический.
М.О. Бахтерев, П.А. Васёв ИММ УрО РАН, Екатеринбург XII Международный семинар «Супервычисления и математическое моделирование» РФЯЦ-ВНИИЭФ, Саров 2010.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Язык функционального программирования Haskell Выполнила: Шатохина Е.В. ПИБ-41.
DevCon12 // msdevcon.ru #msdevcon мая, 2012 г. Microsoft.
Новая технология программирования с применением процедур с повторным входом. Разработанa alfa-версия транслятора C++, реализующего технологию Продукт Традиционное.
Транксрипт:

F# функциональный язык «новой» волны Артем Присяжнюк Kiev ALT.NET 2010

Представлюсь Артем Присяжнюк Технический директор компании ХостТрекер Опыт работы с ФЯ – 10 лет (Ocaml, F#) ХостТрекер – распределенная система мониторинга доступности сайтов

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

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

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

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

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

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

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

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

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

Mutable shared state

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

Функциональный подход Изменяемые данные – нет Разделяемые изменяемые данные – нет Side эффекты – нет Блокировки, синхронизации – нет Межпотоковое взаимодействие – сообщения, Map/Reduce

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

Электронные таблицы (Excel) XSLT SQL

Носители «Нового» подхода Функциональное программирование Agent & message-passing style programming (Erlang) Async Cω Axum LINQ, PLINQ Rx Framework Task Parallel library C# F#

История F# (2002) Лямбда-счисление 1936 Lisp/Schema 1958 ML 1970 Hindley–Milner Система типов Ocaml 1996 – Синтаксис – Система типов – Код – Генерики (Don Syme Привет c# 2.0) Дон Сайм портировал Ocaml на.NET (2002)

История 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

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

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

FP, F#, Haskell & друзья как источник идей Движение концепций F# -> C# Generics Lambda LINQ (former monads) Type inference Async List comprehension ?

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)

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

a)Есть палочками b)Выкинуть вилки/ложки

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

Программировать функционально; Выкинуть из обихода императивные конструкции.

Выворачиваем с изнанки Императивный стиль -> 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

Тяжелое наследие прошлого 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

Выворачиваем с изнанки Паралельное программирование Миграция с lock style на message passing style Использование не мутабельных данных Async First class events

Асинхронная обработка Ключ к построению производительных, хорошо масштабируемых систем; Уши растут из I/O Completion Ports, который очень сложен в использовании;.NET – асинхронность через BeginXXX, EndXXX. Все равно достаточно сложно. Логика расползается.

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

Sync code VS Async code

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

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

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

Demo

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