F# 3.0 Information Rich Programming

25
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ

description

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

Transcript of F# 3.0 Information Rich Programming

Page 1: F# 3.0 Information Rich Programming

КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ

Page 2: F# 3.0 Information Rich Programming

F# 3.0 Information Rich Programming

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

Page 3: F# 3.0 Information Rich Programming

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

Page 4: F# 3.0 Information Rich Programming

F# - функциональный язык, ориентированный на решение

проблем реального мира, позволяет решать сложные задачи с помощью простого

кода

Page 5: F# 3.0 Information Rich Programming

Простой код

Page 6: F# 3.0 Information Rich Programming

Простой кодФункции как значения

abstract class Command { public virtual void Execute();}

abstract class RoverCommand : Command { protected Rover Rover { get; private set; }  public RoverCommand(MarsRover rover) { this.Rover = rover; }}

class BrakeCommand : RoverCommand { public BrakeCommand(Rover rover) : base(rover) { }

public override void Execute() { Rover.Accelerate(-1.0); }}

class TurnLeftCommand : RoverCommand { public TurnLeftCommand(Rover rover) : base(rover) { }

public override void Execute() { Rover.Rotate(-5.0); }}

C#

F#type Command = Rover -> unit let BrakeCommand =    fun rover -> rover.Accelerate(-

1.0) let TurnLeftCommand =    fun rover -> rover.Rotate(-

5.0<degs>)

Page 7: F# 3.0 Information Rich Programming

Простой кодРабота с данными

Tuple<U,T> Swap<T,U>(Tuple<T,U> t){ return new 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); }

C#

Page 8: F# 3.0 Information Rich Programming

Простой кодРабота с данными

Tuple<U,T> Swap<T,U>(Tuple<T,U> t){ return new 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); }

C#

F#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 

Page 9: F# 3.0 Information Rich Programming

DEMO

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

Page 10: F# 3.0 Information Rich Programming

F# и немного математики

List.map2 (-) x y |> List.map square |> List.map2 (*) weights |> List.sum |> sqrt

•  

Page 11: F# 3.0 Information Rich Programming

F# 3.0 Information Rich Programming

Page 12: F# 3.0 Information Rich Programming

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

Page 13: F# 3.0 Information Rich Programming

Дилемма• Мы живем в информационно

богатой среде• Но языки не имеют развитой

инфраструктуры для работы с данными

Page 14: F# 3.0 Information Rich Programming

Проблемы• Статическая типизация и

внешние источники данных• Ручная интеграция генерации

кода с процессом сборки, контроля версия и т.д.

• Нет элегантного пути отражать изменения в схеме данных

Page 15: F# 3.0 Information Rich Programming

С другой стороны…• Источники данных часто

предоставляют хорошее описания схем данных

• Статическая типизация должна помогать, а не мешать в работе

Page 16: F# 3.0 Information Rich Programming

Ответ – F# Type Providers

Page 17: F# 3.0 Information Rich Programming

TypeProvidersВстроенные• SqlDataConnection• SqlEntityConnection• ODataService• WsdlService

Сторонние• Regex• FileSystem• Csv• Excel• JSON• XML• Registry• XAML• AppSettings• Дальше больше…

Page 18: F# 3.0 Information Rich Programming

Демо 2

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

Page 19: F# 3.0 Information Rich Programming

Что получается?• Можем работать с

структурированными онлайн источниками данных– Нет кодогенерации!

• Имеем статическую проверку типов!–Можем определить изменения схемы

• Поддержка инструментов Visual Studio и IntelliSense!

Page 20: F# 3.0 Information Rich Programming

Демо 3 F# + Type Providers + WPFType Providers – не только данные!

Page 21: F# 3.0 Information Rich Programming

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

Page 22: F# 3.0 Information Rich Programming

Итого• Можем безопасно работать с

несколькими источниками данных используя Type Providers

• Доступ к разнородным источникам данных с помощью унифицированного интерфейса

• F# отлично работает для программной логики

Page 23: F# 3.0 Information Rich Programming

Переносимые библиотеки• Одна библиотека – любая

платформа. Silverlight, Metro.

Page 24: F# 3.0 Information Rich Programming

Что дальше?• Облака, облака, облака• Azure• С помощью Computation expressions

можно расширять язык:– async { … }, query { … }, seq { … } – это не

фича языка. Это библиотеки которые расширяют язык с помощью Computation expressions

– ждем cloud { … }

Page 25: F# 3.0 Information Rich Programming

Спасибо

Вопросы[email protected]