Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web, Concurrency, FP

Web, Concurrency, FP

Hotcode, 2013

Oleksii Kachaiev

May 31, 2013
Tweet

More Decks by Oleksii Kachaiev

Other Decks in Programming

Transcript

  1. About me Alexey Kachayev •CTO at Attendify •Open source activist

    (Fn.py) •Functional programming advocate •Erlang, Python, Scala, Clojure, Haskell, Go hacker
  2. Disclaimer #1 It’s hard to tell “is this language functional?”

    We will talk about: Erlang, Scala, Clojure, Haskell
  3. Disclaimer #2 Web is only one way to communicate. We

    will talk “mostly” about web. I assume that you know what “Web” is. Note, that it changes really fast.
  4. Modern web challenges •real-time notifications •chats and other RT messaging

    systems •real-time activity stream •collaborative documents editing •task board for team •multi-player Bomberman (* or your favorite game)
  5. Concurrency... Concurrency is the composition of independently executing computations. Concurrency

    is a way to structure software, ... (c) Rob Pike “Concurrency is not parallelism”
  6. Classical web dev •Many OS processes •Database to store data

    •.... •You are welcome in the world of concurrency!
  7. So what? •Race condition on your data •Real-time is hard

    (databases are not designed for this) •Leaking abstractions •Independency is expensive •No tests •No control
  8. Java & .NET web dev •Threads instead of processes (VM

    as OS???) •You can use memory for data collaboration •Necessity to control access to shared data leads you to locks/ mutex/semaphores
  9. So what? •Independency is still too expensive •Still hard to

    test •Still hard to control •Locks are not so good abstraction
  10. Event- driven web dev •Single-thread environment •Event-based context switching loop

    •Not so “independent” as we want •Errors are hard to manage •It’s hard to keep code simple to read
  11. Do you need more problems? •request-reply doesn’t work (almost at

    all) •concurrency is hard •fault-tolerance is hard •vertical scaling is hard (as well as horizontal) •everything should have been done yesterday
  12. Story about developers and tasks board •Locks: what is locks

    and why it’s not a good idea? •Message passing: how to communicate and what are the benefits? •STM: how to collaborate efficiently and not lose control?
  13. Erlang •message-passing concurrency •multi-core support •distributed systems •“super” stable VM

    (VM as OS!) •“hard to break” something •interactive development
  14. Scala • JVM based, high performance • (mostly) functional paradigm

    • expressive type system (ADT & TI) • “less code with more results” • message-passing concurrency (prev. Akka) • ... XML is native Scala type
  15. Haskell •FP, “ML-family” •green threads and STM •expressive type system

    •high level of code modularity and composability •compact declarative syntax •compile-time program verification
  16. How to start? •do not wait! •do not hesitate! •do

    not panic!!! •do something simple •do something interesting •find problem (pain?) and solve it
  17. Links • https://github.com/extend/cowboy • http://nitrogenproject.com/ • http://liftweb.net/ • https://github.com/twitter/finagle •

    http://www.scalatra.org/ • https://github.com/ring-clojure/ring • https://github.com/weavejester/ compojure • http://pedestal.io/ • http://himera.herokuapp.com/ synonym.html • http://snapframework.com/