54
Functional Programming & Concurrency Patterns Tim Kellogg (@kellogh) September 2, 2014

Functional Programming and Concurrency Patterns in Scala

  • Upload
    kellogh

  • View
    330

  • Download
    3

Embed Size (px)

DESCRIPTION

An introduction to Scala, Functional Programming, and concurrency patterns that I gave to a class of students at Houghton College on November 2, 2014

Citation preview

Page 1: Functional Programming and Concurrency Patterns in Scala

Functional Programming & Concurrency Patterns

Tim Kellogg (@kellogh)September 2, 2014

Page 2: Functional Programming and Concurrency Patterns in Scala

Agenda• Introduce 2lemetry & IoT technologies• Introduce Scala• Functional Programming• Concurrency patterns

Page 3: Functional Programming and Concurrency Patterns in Scala

About Me• 39.9747597,-105.0881511• Class of 2007

Page 4: Functional Programming and Concurrency Patterns in Scala

Internet of Things• Moving• Storing• Analyzing• Reacting

Page 5: Functional Programming and Concurrency Patterns in Scala

MQTT• Message Queue Telemetry Transport• Pub/Sub binary protocol• Open standard• Persistent connections

Page 6: Functional Programming and Concurrency Patterns in Scala

IoT-SQLSELECT LAST(*) FROM mqtt(‘co.t/temp/+’) AS tempJOIN storage(‘metadata’) AS md ON temp.deviceId = md.idWHERE temp.outside.value > 90 AND temp.inside.value < 70GROUP BY 1 HOUR

Page 7: Functional Programming and Concurrency Patterns in Scala

We need…• To move quickly, be agile, adapt to changes• Performant code• To leverage concurrency • To rent server space in the cloud

Page 8: Functional Programming and Concurrency Patterns in Scala

• Functional + Object Oriented• Strongly typed– Safe– Not like Java types

• JVM

Page 9: Functional Programming and Concurrency Patterns in Scala

• First-class functions• Traits• Type inference• Record types (case classes)• Pattern Matching (and structural typing)

Page 10: Functional Programming and Concurrency Patterns in Scala

Record Types

Page 11: Functional Programming and Concurrency Patterns in Scala

Pattern Matching

Page 12: Functional Programming and Concurrency Patterns in Scala

First class functions

Page 13: Functional Programming and Concurrency Patterns in Scala

First Class Functions

Page 14: Functional Programming and Concurrency Patterns in Scala

Example:Count all goals from young players

Page 15: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 16: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 17: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 18: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 19: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 20: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 21: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 22: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 23: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 24: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 25: Functional Programming and Concurrency Patterns in Scala

Example: Count Goals

Page 26: Functional Programming and Concurrency Patterns in Scala

FP Mainstream References• SQL• LINQ (C#)• jQuery• Hadoop (map / reduce)– Spark

Page 27: Functional Programming and Concurrency Patterns in Scala

Monads

Page 28: Functional Programming and Concurrency Patterns in Scala
Page 29: Functional Programming and Concurrency Patterns in Scala

Common Monads• List[T]• Set[T]• Option[T] No more nulls• Future[T]• Try[T]

Page 30: Functional Programming and Concurrency Patterns in Scala

Monads• Container• “bind” operation– “flatMap” in Scala– T => M[U]

Page 31: Functional Programming and Concurrency Patterns in Scala

List[T] As A Monad

Page 32: Functional Programming and Concurrency Patterns in Scala

Option[T] As A Monad

Page 33: Functional Programming and Concurrency Patterns in Scala

Option[T] As Monad

Page 34: Functional Programming and Concurrency Patterns in Scala

List[T] As A Monad

Page 35: Functional Programming and Concurrency Patterns in Scala

List[T] As A Monad

Page 36: Functional Programming and Concurrency Patterns in Scala

Concurrency

Page 37: Functional Programming and Concurrency Patterns in Scala

Concurrency Basics• If it’s immutable, it’s thread-safe• Locks are hard to reason about• Badly placed locks defeat concurrency

Page 38: Functional Programming and Concurrency Patterns in Scala

Multi-threading vs Concurrent• Concurrent– An architecture– Not necessarily multi-threaded

Page 39: Functional Programming and Concurrency Patterns in Scala

Immutability: What You Can’t Do• Change a variable• Write to a file• Write to a TCP socket

Page 40: Functional Programming and Concurrency Patterns in Scala

Haskell Is Useless

Simon Peyton Joneshttps://www.youtube.com/watch?v=iSmkqocn0oQ

Page 41: Functional Programming and Concurrency Patterns in Scala

Side Note: Reference Immutability• https://homes.cs.washington.edu/~csgordon/

papers/oopsla12.pdf

• M#• Rust

Page 42: Functional Programming and Concurrency Patterns in Scala

Immutability: What You Can Do• State Monad• IO Monad• Future Monad• Forget about concurrency details

Page 43: Functional Programming and Concurrency Patterns in Scala

Role of Monads• Represent state as a value• Declarative programming– Describe the problem– Let the compiler solve it for you

Page 44: Functional Programming and Concurrency Patterns in Scala

Future[T]• Represents a value• Handles failure as a value• Computation might happen on another thread• Supervisors

Page 45: Functional Programming and Concurrency Patterns in Scala

Future[T]• map / filter• flatMap (bind)• successful (pure)

Page 46: Functional Programming and Concurrency Patterns in Scala

Future[T]

Page 47: Functional Programming and Concurrency Patterns in Scala

Future[T] - Dispatchers• Thread pooling• Configuration

Page 48: Functional Programming and Concurrency Patterns in Scala

Actors

Page 49: Functional Programming and Concurrency Patterns in Scala

Actors• Akka (Scala)• OTP (Erlang)• http://arxiv.org/pdf/1008.1459.pdf • “Sandboxing” mutability & side effects

Page 50: Functional Programming and Concurrency Patterns in Scala

Actor Model of Computation

Page 51: Functional Programming and Concurrency Patterns in Scala

Actor Mailbox

Page 52: Functional Programming and Concurrency Patterns in Scala

Akka

Page 53: Functional Programming and Concurrency Patterns in Scala

Akka Specialization• Actors Computation• Dispatchers Thread pooling• Supervisors Reliability• Routers Concurrency

Page 54: Functional Programming and Concurrency Patterns in Scala