1 / 25

F# 3.0 Information Rich Programming

Артем Присяжнюк http://www.host-tracker.com Технический директор. F# 3.0 Information Rich Programming. О чем мы будем говорить?. Введение в F# Язык для решения повседневных проблем F# TypeProviders Будущее развитие.

marcel
Télécharger la présentation

F# 3.0 Information Rich Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Артем Присяжнюк http://www.host-tracker.com Технический директор F# 3.0Information Rich Programming

  2. О чем мы будем говорить? Введение в F# Язык для решения повседневных проблем F# TypeProviders Будущее развитие

  3. F# - функциональный язык, ориентированный на решение проблем реального мира, позволяет решать сложные задачи с помощью простого кода

  4. Простой код

  5. Простой кодФункции как значения C# abstractclassCommand{ publicvirtualvoid Execute(); } abstractclassRoverCommand: Command { protected Rover Rover { get; privateset; } publicRoverCommand(MarsRover rover){ this.Rover = rover; } } classBrakeCommand: RoverCommand{ publicBrakeCommand(Rover rover): base(rover) { } publicoverridevoid Execute(){ Rover.Accelerate(-1.0); } } classTurnLeftCommand: RoverCommand{ publicTurnLeftCommand(Rover rover): base(rover) {} publicoverridevoid Execute(){ Rover.Rotate(-5.0); } } type Command = Rover -> unit letBrakeCommand =  fun rover ->rover.Accelerate(-1.0) letTurnLeftCommand = fun rover ->rover.Rotate(-5.0<degs>) F#

  6. Простой кодРабота с данными C# Tuple<U,T> Swap<T,U>(Tuple<T,U> t) { returnnewTuple<U,T>(t.Item2, t.Item1) } ReadOnlyCollection<Tuple<T,T,T>> Rotations<T> (Tuple<T,T,T> t) { newReadOnlyCollection<int> (newTuple<T,T,T>[] { newTuple<T,T,T>(t.Item1,t.Item2,t.Item3); newTuple<T,T,T>(t.Item3,t.Item1,t.Item2); newTuple<T,T,T>(t.Item2,t.Item3,t.Item1); }); } int Reduce<T>(Func<T,int> f,Tuple<T,T,T> t) { return f(t.Item1) + f(t.Item2) + f (t.Item3); }

  7. Простой кодРабота с данными C# Tuple<U,T> Swap<T,U>(Tuple<T,U> t) { returnnew Tuple<U,T>(t.Item2, t.Item1) } ReadOnlyCollection<Tuple<T,T,T>> Rotations<T> (Tuple<T,T,T> t) { new ReadOnlyCollection<int> (new Tuple<T,T,T>[] { new Tuple<T,T,T>(t.Item1,t.Item2,t.Item3); new Tuple<T,T,T>(t.Item3,t.Item1,t.Item2); new Tuple<T,T,T>(t.Item2,t.Item3,t.Item1); }); } int Reduce<T>(Func<T,int> f,Tuple<T,T,T> t) { return f(t.Item1) + f(t.Item2) + f (t.Item3); } let swap (x, y) = (y, x) let rotations (x, y, z) = [ (x, y, z); (z, x, y); (y, z, x) ] let reduce f (x, y, z) = f x + f y + f z F#

  8. DEMO Работа с последовательностями

  9. F# и немного математики List.map2 (-) x y |> List.map square |> List.map2 (*) weights |> List.sum |> sqrt

  10. F# 3.0 Information Rich Programming

  11. Почему важно?Программирование в сети

  12. Дилемма • Мы живем в информационно богатой среде • Но языки не имеют развитой инфраструктуры для работы с данными

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

  14. С другой стороны… • Источники данных часто предоставляют хорошее описания схем данных • Статическая типизация должна помогать, а не мешать в работе

  15. Ответ – F# Type Providers

  16. TypeProviders Встроенные Сторонние Regex FileSystem Csv Excel JSON XML Registry XAML AppSettings Дальше больше… • SqlDataConnection • SqlEntityConnection • ODataService • WsdlService

  17. Демо 2 TypeProvidersи работа с внешними источниками данных

  18. Что получается? • Можем работать с структурированными онлайн источниками данных • Нет кодогенерации! • Имеем статическую проверку типов! • Можем определить изменения схемы • Поддержка инструментов Visual Studio и IntelliSense!

  19. Демо 3 F# + TypeProviders + WPF TypeProviders – не только данные!

  20. Полное дерево XAML

  21. Итого • Можем безопасно работать с несколькими источниками данных используя Type Providers • Доступ к разнородным источникам данных с помощью унифицированного интерфейса • F# отлично работает для программной логики

  22. Переносимые библиотеки • Одна библиотека – любая платформа. Silverlight, Metro.

  23. Что дальше? • Облака, облака, облака • Azure • С помощью Computation expressions можно расширять язык: • async{ … },query { … }, seq { … } – это не фича языка. Это библиотеки которые расширяют язык с помощью Computation expressions • ждем cloud { … }

  24. Спасибо Вопросы? a.p@host-tracker.com

More Related