Channels & Concurrency: Go, Clojure, Erlang, Haskell

Channels & Concurrency: Go, Clojure, Erlang, Haskell

The idea, benefits, theory and practise.

B9b7a5ffa24e2af6f877a7950461ba0f?s=128

Oleksii Kachaiev

August 03, 2013
Tweet

Transcript

  1. Channels & concurrency 2013 (c) Alexey Kachayev

  2. Channels Idea

  3. Idea •Hoare’s CSP •Erlang / Limbo / etc •Transport level

    •File name / File descriptor •Message Box / Queue
  4. Channels Go(lang)

  5. Go

  6. Go (1)

  7. Go (2)

  8. Go (2) fan-out fan-in timeout

  9. Channels Clojure

  10. Clojure Alexey Kachayev, https://gist.github.com/kachayev/3146759

  11. Clojure

  12. Clojure

  13. Clojure

  14. Clojure Michael Peterson, https://github.com/midpeter444/go-lightly

  15. Clojure

  16. Clojure core.async

  17. Idea •Library (just) •(chan) •Blocking •Buffers •(go) macros •Deadlocks (?!?)

  18. Clojure

  19. Clojure

  20. Channels dig deeper

  21. Why? •Streams •Decoupling •Composability •Patterns

  22. Channels Concurrent ML

  23. CML

  24. Channels Erlang & composability

  25. Channels: Erlang https://gist.github.com/kachayev/5426175

  26. Idea •map •filter •fork •zip, zipwith •take, drop •etc

  27. Erlang

  28. Erlang

  29. Erlang

  30. Erlang futures?

  31. Erlang

  32. Erlang

  33. Channels Scala & Eventsourced

  34. Scala

  35. Scala channel

  36. Channels Cloud Haskell & Types

  37. Haskell

  38. Haskell channel

  39. Contacts twi: @kachayev github: @kachayev work: attendify.com