F# функциональный язык "новой" волны
Upcoming SlideShare
Loading in...5
×
 

F# функциональный язык "новой" волны

on

  • 996 views

 

Statistics

Views

Total Views
996
Views on SlideShare
996
Embed Views
0

Actions

Likes
1
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Автор Scala   Martin Odersky также как и Дон Сайм, работал над генериками, только для Явы

F# функциональный язык "новой" волны F# функциональный язык "новой" волны Presentation Transcript

  • F# функциональный язык «новой» волны Артем Присяжнюк Kiev.Alt NET 2010
  • Представлюсь
    • Артем Присяжнюк
    • Технический директор компании ХостТрекер
    • Опыт работы с ФЯ – 10 лет ( Ocaml, F#)
    • ХостТрекер – распределенная система мониторинга доступности сайтов
    • [email_address]
    • http://host-tracker.com
  • Рожденные в 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 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)
  • Что нужно чтобы научиться есть палочками?
  • Что нужно чтобы научиться есть палочками?
    • Есть палочками
    • Выкинуть вилки/ложки
  • Что нужно чтобы научится программировать функционально ?
  • Что нужно чтобы научится программировать функционально ?
    • Программировать функционально ;
    • Выкинуть из обихода императивные конструкции.
  • Выворачиваем с изнанки Императивный стиль -> 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
  • Спасибо за внимание
    • Вопросы?