F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager...
-
Upload
jocelin-charles -
Category
Documents
-
view
215 -
download
2
Transcript of F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager...
![Page 1: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/1.jpg)
F# 3.0: Data, Services, Web, Cloud, at Your FingertipsDustin CampbellSenior Program ManagerMicrosoft Corporation
DEV338
![Page 2: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/2.jpg)
What’s in this Talk?
Intro and brief history of F#
F# primer
F# 3.0 features to address a real-world problem
F# Type Providers Demos!
![Page 3: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/3.jpg)
What is F#?
F# is a practical, functional-first language
that lets you write simple code
to solve complex problems
![Page 4: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/4.jpg)
A Brief History…
Began as a project at Microsoft Research (2002-2006)
Based on the functional language OCaml
Brainchild of Don Syme, key designer of .NET generics
F# 2.0 became a full-fledged product in Visual Studio 2010
Became popular for analytical computing
Is used by industries such as banking, insurance, energy (and more!)
![Page 5: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/5.jpg)
More about F#
100% .NET Language
Full interop with other .NET languagesCan call into .NET libraries and frameworks
Can be called from any other .NET language
Strongly typed, full type inferenceF# 2.0: Units of Measure prevent mixing kilograms and ounces, dollars and euros (or your own custom units)
F# 3.0: Type Providers allow you to introduce new types and members “on the fly”
![Page 6: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/6.jpg)
Simplicity
![Page 7: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/7.jpg)
abstract class RoverCommand { protected Rover Rover { get; private set; } public RoverCommand(Rover rover) { this.Rover = rover; }
abstract void Execute();}
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); }}
type RoverCommand = Command of (Rover -> unit) let BrakeCommand = Command(fun rover -> rover.Accelerate(-1.0<m/s>)) let TurnLeftCommand = Command(fun rover -> rover.Rotate(-5.0<degs>))
F#
C#
SimplicityFunctions as values
![Page 8: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/8.jpg)
let swap (x, y) = (y, x)
let rotations (x, y, z) = seq [ (x, y, z) (z, x, y) (y, z, x) ]
let reduce f (x, y, z) = f x + f y + f z
Tuple<U,T> Swap<T,U>(Tuple<T,U> t){ return Tuple.Create(t.Item2, t.Item1)} IEnumerable<Tuple<T,T,T>> Rotations<T>(Tuple<T,T,T> t) { yield return Tuple.Create(t.Item1, t.Item2, t.Item3); yield return Tuple.Create(t.Item3, t.Item1, t.Item2); yield return Tuple.Create(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); }
F#C#
SimplicityFunctional data
![Page 9: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/9.jpg)
F# is declarative
www.flickr.com/photos/bigbirdz
www.flickr.com/photos/digitalcolony
www.flickr.com/photos/richardaustin
www.flickr.com/photos/bigiain
![Page 10: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/10.jpg)
Demo
Simplicity – an F# Primer
![Page 11: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/11.jpg)
What about real-world tasks?
![Page 12: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/12.jpg)
F# 3.0Information Rich Programming
![Page 13: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/13.jpg)
Two propositions
![Page 14: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/14.jpg)
Proposition 1We live in an information society
![Page 15: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/15.jpg)
Proposition 2Our languages are information sparse
![Page 16: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/16.jpg)
This is a problem
![Page 17: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/17.jpg)
Challenges
Impedance mismatch with statically-typed languagesNeed to manually integrate code-gen tools with build process, source control, etc.No elegant way to handle schema changeLoss of type information due to up-casts to Object, or even have to just parse strings
![Page 18: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/18.jpg)
Plus…
Data sources often have rich schemas and associated data definitionsStatic types should make your experience better, not worse!
![Page 19: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/19.jpg)
Why This MattersProgramming the web
source: blog.programmableweb.com
![Page 20: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/20.jpg)
F# Type Providers:IntelliSense for data
![Page 21: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/21.jpg)
Demo
Freebase
![Page 22: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/22.jpg)
http://wiki.freebase.com/wiki/Main_Page
![Page 23: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/23.jpg)
Demo
Freebase
![Page 24: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/24.jpg)
// Freebase.fsx // Example of reading from freebase.com in F# // by Jomo Fisher #r "System.Runtime.Serialization" #r "System.ServiceModel.Web" #r "System.Web" #r "System.Xml" open System open System.IO open System.Net open System.Text open System.Web open System.Security.Authentication open System.Runtime.Serialization [<DataContract>] type Result<'TResult> = { [<field: DataMember(Name="code") >] Code:string [<field: DataMember(Name="result") >] Result:'TResult [<field: DataMember(Name="message") >] Message:string } [<DataContract>] type ChemicalElement = { [<field: DataMember(Name="name") >] Name:string [<field: DataMember(Name="boiling_point") >] BoilingPoint:string [<field: DataMember(Name="atomic_mass") >] AtomicMass:string }
let Query<'T>(query:string) : 'T = let query = query.Replace("'","\"") let queryUrl = sprintf
"http://api.freebase.com/api/service/mqlread?query=%s" "{\"query\":"+query+"}"
let request : HttpWebRequest = downcast WebRequest.Create(queryUrl) request.Method <- "GET" request.ContentType <- "application/x-www-form-urlencoded" let response = request.GetResponse() let result = try use reader = new StreamReader(response.GetResponseStream()) reader.ReadToEnd(); finally response.Close() let data = Encoding.Unicode.GetBytes(result); let stream = new MemoryStream() stream.Write(data, 0, data.Length); stream.Position <- 0L let ser = Json.DataContractJsonSerializer(typeof<Result<'T>>) let result = ser.ReadObject(stream) :?> Result<'T> if result.Code <> "/api/status/ok" then raise (InvalidOperationException(result.Message)) else result.Result let elements = Query<ChemicalElement array>("[{'type':'/chemistry/chemical_element','name':null,'boiling_point':null,'atomic_mass':null}]") elements |> Array.iter(fun element -> printfn "%A" element)
![Page 25: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/25.jpg)
Freebase Demo Summary
Can program against web-scale schematized data
Code-gen would never work here!
No waiting for code-gen or compilations
With typechecking!Can detect schema change
With great Visual Studio tooling!
![Page 26: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/26.jpg)
Demo
Web service and multiple data sources
![Page 27: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/27.jpg)
![Page 28: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/28.jpg)
Demo
Where should I live?
![Page 29: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/29.jpg)
Demo Summary
Can easily program against multiple data sources using type providers
Access web services, databases, etc., using a uniform interface
F# works well for the program logic
![Page 30: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/30.jpg)
F# 3.0Services, data, web, cloud—at your fingertips
Type providers provide an integrated solution for accessing data sources
Keeps the experience code-focused
Provides a consistent and uniform programming experience
Schema change integrates with IDE and build system
Tools matter!
![Page 31: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/31.jpg)
Try it now!
F# 3.0 is in Visual Studio 2012 RC
New Project Visual F# F# TutorialLearn the language from within Visual Studio!
For more, visit http://fsharp.net
![Page 32: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/32.jpg)
DEV Track Resources
Visual Studio Home Page :: http://www.microsoft.com/visualstudio/en-us
Jason Zander’s Blog :: http://blogs.msdn.com/b/jasonz/
Facebook :: http://www.facebook.com/visualstudio
Twitter :: http://twitter.com/#!/visualstudio
Somasegar’s Blog :: http://blogs.msdn.com/b/somasegar/
![Page 33: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/33.jpg)
Resources
Connect. Share. Discuss.
http://europe.msteched.com
Learning
Microsoft Certification & Training Resources
www.microsoft.com/learning
TechNet
Resources for IT Professionals
http://microsoft.com/technet
Resources for Developers
http://microsoft.com/msdn
![Page 34: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/34.jpg)
Evaluations
http://europe.msteched.com/sessions
Submit your evals online
![Page 35: F# 3.0: Data, Services, Web, Cloud, at Your Fingertips Dustin Campbell Senior Program Manager Microsoft Corporation DEV338.](https://reader035.fdocuments.in/reader035/viewer/2022062802/56649e975503460f94b9a60e/html5/thumbnails/35.jpg)
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to
be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS
PRESENTATION.