let the |> fun begin

21
Let the |> fun begin An introduction to F# (part 2) Bogdan Brinzarea-Iamandi Banca Romaneasca 25 February 2010

Upload: moriah

Post on 24-Feb-2016

28 views

Category:

Documents


0 download

DESCRIPTION

An introduction to F# (part 2). Let the |> fun begin. Bogdan Brinzarea-Iamandi Banca Romaneasca. 25 February 2010. Agenda. Asynchronous and parallel programming. Why should these matter to me?. Why should these matter to me?. Working with threads is difficult - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Let  the  |> fun  begin

Let the |> fun beginAn introduction to F# (part 2)

Bogdan Brinzarea-IamandiBanca Romaneasca

25 February 2010

Page 2: Let  the  |> fun  begin

AgendaTopic Covered

TodayHistory 22 february

2010From imperative to functional 22 february

2010Fundamentals 22 february

2010Data structures 22 february

2010Pattern Matching 22 february

2010Immutability vs. Mutability 22 february

2010Object Oriented Programming 22 february

2010Async and Parallel Programming

Unit testing

Page 3: Let  the  |> fun  begin

Asynchronous and parallel programming

Page 4: Let  the  |> fun  begin

Why should these matter to me?Problem SolutionI/O bound application Asynchronous processingCPU bound application Parallel and distributed

processingFreezing UI Asynchronous processingSharing state Immutability

Page 5: Let  the  |> fun  begin

Why should these matter to me? Working with threads is difficult Synchronizing and sharing state are

difficult Introducing bugs is easy The code is complicated

Page 6: Let  the  |> fun  begin

Parallel and reactive language Multiple active evaluations (threads

computing results) Multiple pending reactions (callbacks

and agents waiting for events and messages)

Page 7: Let  the  |> fun  begin

Background worker pattern Not useful for asynchronous

operations Imperative programming Sharing mutable data between

threads Cancellations Raising events in the right thread

Page 8: Let  the  |> fun  begin

Immutability

Optimization opportunities Easily transferable between threads Reliability

Page 9: Let  the  |> fun  begin

Async advantages

Ease of change Cancellation checking Simple resource management Exception propagation

Page 10: Let  the  |> fun  begin

async {…}

Creates async objects These tasks can be run

In the current thread In a background thread In parallel using fork/join mechanism As continuations

Page 11: Let  the  |> fun  begin

Async.Parallel

Takes async objects and creates async tasks

Uses QueueUserWorkItem Fork/join patternDoes not report progress

seq<Async<'T>> -> Async<'T Array>

Page 12: Let  the  |> fun  begin

Async.RunSynchronously Runs synchronous computation Waits for the result Batch processing jobs Matrix multiplication

Page 13: Let  the  |> fun  begin

Async.StartWithContinuations Starts and ends in the same thread Useful for UI updating Continuations for:

Complete Exception Cancellation

Page 14: Let  the  |> fun  begin

! = async

let! for async method calls The thread is suspended until the

result in available The rest of the code runs as a

continuation use! resource disposing equivalent

of let!

Page 15: Let  the  |> fun  begin

Parallel programming

Leverage parallel hardware capabilities

Data parallel programming with PLinq Easy to implement Abstracts away complexity Transparent partition and merge

operations Works on seq<a> and IEnumerable<T>

Task parallel programming using the new Task Parallel Library in .NET 4.0

Page 16: Let  the  |> fun  begin

Agent model concurrency Erlang message passing style “An actor is a computational entity that, in

response to a message it receives, can concurrently:▪ send a finite number of messages to

other actors;▪ create a finite number of new actors;▪ designate the behavior to be used for

the next message it receives.”

Page 17: Let  the  |> fun  begin

Agent model concurrency Asynchronous message passing Can have even 1000 agents Agents are lightweight Based on async programming State isolation between agents No concurrency and data races

Page 18: Let  the  |> fun  begin

Unit testing

Page 19: Let  the  |> fun  begin

Object oriented approach NUnit xUnit.net

Page 20: Let  the  |> fun  begin

Functional approach

FsUnit based on NUnit FsCheck inspired from Haskell’s

QuickCheck FsTest based on xUnit.net NaturalSpec based on NUnit FsSpec readable DSL

Page 21: Let  the  |> fun  begin

Resources Expert F# by Don Syme Programming F# by Chris Smith CTO Corner - http://ctocorner.com/fsharp/book/ HubFS

http://cs.hubfs.net/ Matthew Podwysocki

http://weblogs.asp.net/podwysocki/ Don Syme

http://blogs.msdn.com/dsyme Chris Smith

http://blogs.msdn.com/chrsmith/