Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории




НазваниеРазработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории
Дата конвертации06.04.2013
Размер445 b.
ТипПрезентации


Разработка приложений на языке F#

Андрей Терехов Microsoft Украина

Немного истории



Подробнее про F#





Глобальные проблемы программирования

  • СЛОЖНОСТЬ

    • Сложность окружающего мира влияет на сложность программных систем
    • Параллелизм – необходимость писать параллельный код резко увеличивает сложность
    • Сложная система => большее количество ошибок, резко возрастает стоимость качественного кода
    • Сложность удается частично скрыть с помощью инструментов разработки (пример: языки высокого уровня)
    • Software Factories, Domain-Specific Languages
  • Актуальность этих проблем быстро растет со временем



Как бороться со сложностью?



Подходы к параллельным вычислениям



«Классическое программирование»

  • Императивное – мы говорим компьютеру, как решать задачу (что делать)

  • Основной акцент – манипулирование ячейками памяти

    • Оператор присваивания
  • Функции как способ декомпозиции задачи на более простые



Функциональное программирование

  • Парадигма программирования, которая рассматривает выполнение программы как вычисление математических функций (выражений)

    • Неизменяемые данные, нет состояния среды
    • Функции – first-class citizen
  • Стиль программирования, позволяющий писать программы, свободные от ошибок

  • Языки программирования (F#, LISP, ML, Haskell, …)



Особенности ФП

  • Отсутствие операторов присваивания и побочных эффектов

  • Функции-как-данные – между функциями и данными не делается явного различия, в чистом ФП «все есть функция»

  • Декларативное программирование

  • Высокая функциональная абстракция

  • Более короткий и выразительный код

    • За счет автоматического вывода типов
    • За счет отсутствия операторов присваивания
  • Прозрачная семантика, близость к математическому понятию функции

    • Возможность рассуждать о программах, доказывать их свойства


Особенности ФП

  • Функциональное программирование имеет очень четкую математическую основу

    • Рассуждение о программах: доказательство корректности, …
  • Определение последовательности действий – рекурсивно

    • При умелом программировании не ведет к падению эффективности (компилятор сводит к итерации)
  • Встроенные структуры данных (tuples, списки, discriminated unions) с компактным синтаксисом

  • Отсутствует оператор присваивания

    • let имеет другую семантику – связывание имен
    • Будучи один раз связанным, имя не может менять свое значение (в рамках области видимости)
    • А это значит – нет побочных эффектов!
    • Раз в императивной программе 90% - это операторы присваивания, то функциональные программы на 90% короче!


Демо

  • Синтаксис

  • Связывание имен

  • Типизация

  • Применение функций

  • Реализация циклов в функциональном стиле



Пример: вычисление числа π



Вычисление π на F#



Декомпозиция

  • Какие способы комбинирования функций доступны в традиционном программировании?



Функциональная декомпозиция



Декомпозиция и абстракция в функциональном стиле

  • Более богатые возможности композиции за счет рассмотрения «функций-как-данных»

  • iter – функциональная абстракция, лежащая в основе вычисления myexp, pow, fact и др.

  • iter – может быть получено как частный случай абстракции

let iter f a b i = fold_left f i [a..b];;

Функциональная декомпозиция

  • При этом:

    • Технология мемоизации и ленивых вычислений могут увеличить эффективность вычисления факториала и степени до линейной, за счет запоминания предыдущих результатов вычислений
    • Функционально-декомпозированный (более простой для человека) алгоритм будет обладать такой же эффективностью, что и более сложный алгоритм вычисления суммы в одном цикле (домножение предыдущего слагаемого на фактор)


Простота vs. эффективность

  • Сравните:



Плюсы/минусы

  • Императивный подход

    • На первый взгляд – большая эффективность по памяти (не создаются списки), по времени (один проход)
    • Нет декомпозиции задачи, невозможно повторно использовать код
  • Функциональный подход

    • Высокий уровень абстракции -> решение для других фигур получается заменой функции
    • Проще для математика? Для программиста?
    • Пусть компилятор заботится об эффективности!
    • Большая эффективность при параллельных вычислениях (возможность распараллеливания, поскольку списковые функции не имеют зависимостей по данным)
    • При использовании ленивых вычислений / LINQ – получаем однопроходный алгоритм, эквивалентный императивному!


Другой пример: сортировка Хоара



Особенности функционального подхода

  • Множество способов комбинирования дает дополнительное преимущество в борьбе со сложностью

    • Можно эксплуатировать как декомпозицию, так и функциональную абстракцию
  • Отсутствие побочных эффектов резко снижает затраты на тестирование и отладку

  • Декларативный стиль перекладывает существенную часть решения на компилятор (пример: суммирование четных элементов списка)

  • Функциональный код явно описывает зависимости по данным, позволяя более эффективно распараллеливать код

  • Функциональный подход приводит к более компактному коду, но требует больших размышлений и специальных навыков



Множество Мандельброта



Определение

  • zn+1(c)= zn2(c)+c, z0(c)=0; zC

  • M = { c  C | lim zn(c)<∞}

  • M’= { c  C | |z20(0)|<1 }



Реализация на F#



WinForms



Результат



Вычисления «по требованию»

  • По умолчанию – энергичная стратегия вычислений

  • Lazy / Force

  • Вычисления по необходимости



F# - это:



C# 3.0 – императивно-функциональный язык!



LINQ

  • Технология Language Integrated Query представляет собой трансляцию SQL-подобного синтаксиса в выражение в функциональном стиле

  • Выражение представляет собой отложенное вычисление / преобразование функциональных вызовов к синтаксису источника данных

  • Идеи из ФП: ленивые вычисления, мета-программирование



Функциональное программирование и параллельные вычисления





Основные проблемы асинхронных и параллельных вычислений



Общая память



Asynchronous Workflows



Инверсия управления



Обработка изображений



Asynchronous Workflows



Параллелизм ввода-вывода



Масштабирование



Recap: Some Concurrency Challenges



Перспективы применения Фп



Где сейчас используется ФП?

  • Mainstream языки программирования:

    • F#
    • C# 3.0, следующий стандарт C++
    • Java.next (Clojure, Groovy, JRuby, Scala)
    • LINQ
    • XSLT
  • Excel Spreadsheets



ФП в реальных проектах

  • emacs (диалект LISP’а)

  • HeVeA – LaTeX to HTML конвертер (Objective Caml)

  • Genome Assembly Viewer (F#, 500 строк)

  • ПО для телефонных станций Ericsson (Erlang)

  • Проекты в рамках Microsoft и MSR

    • F# Compiler
    • Driver code verification
    • AdCenter Challenge


The adCenter Challenge

  • Наиболее прибыльная часть поиска

  • Продажа «веб-пространства» на www.live.com и www.msn.com.

  • “Оплаченные ссылки” (цены выставляются по аукциону)

  • Внутреннее соревнование с упором на оплаченные ссылки



Внутреннее соревнование

  • 4 месяца на программирование

  • 1 месяц на обучение

  • Задача:

    • На основе обучающих данных за несколько недель (просмотры страниц) предсказывать вероятность перехода по ссылке
  • Ресурсы:

    • 4 (2 x 2) 64-bit CPU machine
    • 16 Гб ОП
    • 200 Гб НЖМД


Масштаб проблемы

  • Объем входных данных

7,000,000,000 записей, 6 терабайт
  • Время ЦП на обучение:

2 недели × 7 дней × 86,400 сек/день =

1,209,600 секунд
  • Требования к алгоритму обучения:

    • 5,787 записей / сек
    • 172.8 μs на одну запись


Решение

  • 4 недели кодирования, 4 эксперта в области Machine Learning

  • 100 миллионов вероятностных переменных

  • Обработано 6 терабайт обучающих данных

  • Обработка в реальном времени!



Наблюдения



Какие задачи хорошо решаются на функциональных языках?

  • Обработка данных

    • Синтаксический разбор
    • Компиляторы, преобразования программ
    • Data Mining
    • Биоинформатика
  • Вычислительные задачи

  • Параллельные задачи

  • Традиционное мнение: сложно строить UI

    • Смотрим пример!


Источники



Источники

  • Филд А., Харрисон П. Функциональное программирование, М.: Мир, 1993

  • J.Ullman, Elements of ML Programming, 2nd edition, Prentice Hall, 1998

  • Thompson S. Haskell: The Craft of Functional Programming, 2nd edition, Addison-Wesley, 1999

  • R.Pickering, Foundations of F#, A-Press, 2008

  • D.Syme, A.Granicz, A.Cisternio. Expert F#. A-Press, 2008

  • J.Harrop, F# for Scientists, Wiley, 2008

  • Д.В. Сошников «Функциональное программирование», видеокурс: http://www.intuit.ru/department/pl/funcprog

  • http://www.codeplex.com/fsharpsamples





Похожие:

Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconИнициативы Microsoft в академической среде Андрей Терехов
...
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconОбзор практики разработки защищенных приложений Андрей Иванов, rto microsoft Цепочка поставок по
Подразумевает распределение ролей и включает активности для архитекторов, Program/Project Managers, разработчиков и тестеров
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconЛекция 10 Разработка приложений для Windows Azure
Архитектура, возможности и методы использования платформы облачных вычислений Microsoft Windows Azure
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconCustomer Attrition Analysis in fsi анализ вероятности ухода клиентов в финансовом секторе На платформе Microsoft sql server 2008 R2 Enterprise Edition
Максим Гончаров Microsoft Специалист по платформе приложений maxgon@microsoft com +7 (903) 116-86-03
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconУкраина – естественное место для презентации Отчета на русском языке: Украина – естественное место для презентации Отчета на русском языке
Коллектив, задействованный в национальном исследовании, провел масштабную работу по превращению его в глубокое и серьезное исследование,...
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconПрезентация на тему: По географии ученицы 11Б класса Корнейчук Лианы Учитель: Сапронкина Л. А немного из истории Немного из истории Атмосферный воздух
Играет роль наиболее подвижного, химически агрессивного и взаимодействия вблизи поверхности биосферы, гидросферы и литосферы
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconДобро пожаловать на конференцию Microsoft BizSpark Camp! Щеглова Юлия juliash@microsoft com Стартапы о Windows Phone
Авторам семи самых популярных приложений, опубликованных в Windows Phone Marketplace в период с 1 февраля до 30 апреля
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconНемного истории Немного истории
До XIX века были известны в основном только конечные множества, которыми тогда и владели математики. Конечными множествами называются...
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории iconПрофессия «Архитектор» в этой презентации, я немного расскажу вам о такой профессии как «Архитектор» Немного Истории
На врятли кто то может вспомнить кто был первым архитектором но есть истории и легенды например про Александра Македонского и многих...
Разработка приложений на языке F# Андрей Терехов Microsoft Украина Немного истории icon1. Немного истории …(историческая справка о развитии Афганистана). Немного истории …(историческая справка о развитии Афганистана)
За это время погибли, умерли от ран, несчастных случаев, исчезло бесследно, не возвратились из плена
Разместите кнопку на своём сайте:
dok.opredelim.com


База данных защищена авторским правом ©dok.opredelim.com 2015
обратиться к администрации
dok.opredelim.com
Главная страница