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

Functional programming for web development

Functional programming for web development

Avatar for Oleksii Kachaiev

Oleksii Kachaiev

April 24, 2013
Tweet

More Decks by Oleksii Kachaiev

Other Decks in Programming

Transcript

  1. About me • Alexey Kachayev • CTO at KitApps Inc.

    • Open source activist • Functional programming advocate • Erlang, Python, Scala, Clojure, Haskell, Go • kachayev <$> twitter • kachayev <$> gmail • kachayev <$> github Tuesday, April 23, 13
  2. Disclaimer #1 It’s hard to tell “is this language FP”?

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

    will talk “mostly” about web. Tuesday, April 23, 13
  4. “Popular web” Monolit • PHP: Zend, Symphony • Python: Django

    • Ruby: Rails • Java: Spring, Play • ... Tuesday, April 23, 13
  5. “Popular web” Monolit • Easy to start • HTML-driven development

    • Templates-driven development Tuesday, April 23, 13
  6. Service- oriented Why? • Much more functionality • Much more

    users • Bigger development teams • Many dynamic requests from each user (ajax) • Frequent changes Tuesday, April 23, 13
  7. Service- oriented • High modularity • Pluggable architectures • Independent

    parts • Independent development • API-driven, protocol- driven Tuesday, April 23, 13
  8. Event-driven • Python: Twisted, Tornado, Gevent, Eventlet, Tulip • PHP:

    React, PhpDaemon • Ruby: EventMachine, Celluloid • JS: node.js Tuesday, April 23, 13
  9. Event-driven • layered architectures • 3rd party integrations • requests/response

    sealing • ... but async is hard • ... but “do not block” is hard • ... but error handling is hard (i.e. exceptions are hard) • ... but users still depend on each other Tuesday, April 23, 13
  10. And now? • Much more users (growing fast) • New

    fields (SaaS, PaaS, IaaS) with new problems • Sophisticated dynamic and desktop-like interfaces • Not only HTTP (WS, RTC) • Real-time communication (i.e. chats, games) • Real-time collaboration (i.e. games, trello) • Hyper-text? come on... Tuesday, April 23, 13
  11. What the problem is? • request-reply doesn’t work (almost at

    all) • concurrency is hard • fault-tolerance is hard • p2p scaling is hard • vertical scaling is hard • everything should be done yesterday Tuesday, April 23, 13
  12. What do we need? • easy and transparent concurrency •

    easy way to write async code • composability and maintainability in sophisticated systems • fault-tolerance made right • easy multi-core consuming • easy support for new protocols • etc... Tuesday, April 23, 13
  13. Erlang • message-passing concurrency • multi-core support • distributed systems

    without changes in code • “super” stable VM • “hard to broke” something • interactive development (even on running production) Tuesday, April 23, 13
  14. Erlang is good for... • API servers (i.e. REST, RPC)

    • SaaS/PaaS/IaaS cloud “without downtime” (SLAs etc) • as infrastructure (2-level OS) • streaming servers (i.e. Erlyvideo) • real-time communication (i.e. Cowboy websockets) • “super-light” client-side and shared contexts (i.e. Nitrogen) Tuesday, April 23, 13
  15. Hard to do with other stack(s) • SaaS/PaaS/IaaS cloud “without

    downtime” (SLAs etc) • as infrastructure (2-level OS), load balancers etc • streaming servers • real-time (or near real- time) communication • “super-light” client-side and shared contexts • p2p Tuesday, April 23, 13
  16. Cases • Facebook (Chat, Chef) • Amazon (SimpleDB) • Yahoo!

    (Delicious) • Whatsapp (Messaging) • RabbitMQ (AMQP) • Velti (SMS gateway) • Heroku (Routing) • Github (gh-pages) • Bugsense (data analysis) • Blizzard, Wooga (games) Tuesday, April 23, 13
  17. Scala • JVM based, high performance • (mostly) functional paradigm

    • expressive type system with ATD and type inference • less code with more results • message-passing concurrency (prev. Akka) • ... XML is native Scala type Tuesday, April 23, 13
  18. Scala is good for... • DSLs • easy-to-read async code

    • API servers (i.e. with Scalatra, BlueEyes etc) • service-oriented architecture (i.e. with Finagle) • real-time communication • “super-light” client-side (i.e. with Liftweb) • if you already use Java... Tuesday, April 23, 13
  19. Cases • AOL • Twitter • LinkedIn • Foursquare •

    Meetup • Remember the Milk • Boundary • Quora • StackMob • Simple • Yammer Tuesday, April 23, 13
  20. Clojure • JVM based • functional paradigm, lisp- family •

    STM concurrency model, multi-core support • modern language, active development, fast- growing community • interactive development • macroses • JavaScript compiler (ClojureScript) Tuesday, April 23, 13
  21. Clojure web stack • Netty, Http-kit, Aleph, Mongrel2 • Ring

    • Compojure • Enlive, Laser, Hiccup • ... ClojureScript • ... Javelin, Domina • Build your own framework from parts! • Old: Noir, ClojureScript One Tuesday, April 23, 13
  22. Clojure is good for... • BigData • Real-time collaboration (i.e.

    task boards) • Concurrent documents editing • Multiplayer games • Experiments and rapid prototyping • Client-side reactive programming (sophisticated interfaces) Tuesday, April 23, 13
  23. Cases • Twitter (Backtype, Storm) • Factual • KamaGames •

    Prismatic • Groupon • Disqus • Answers.com • Simple Tuesday, April 23, 13
  24. Haskell, OCaml • functional languages, “ML- family” • expressive type

    system with ATD and type inference • high level of code modularity and composability • compact declarative syntax • green thread • math basement, compile- time program verification Tuesday, April 23, 13
  25. Haskell is good for... • functional reactive programming (i.e. reactive-banana,

    Elm) • data parsing and types validation • compiled HTML (i.e. BlazzedHtml, Hamlet) • fun and cool stuff :) Tuesday, April 23, 13
  26. And more... • Happstack, Snap, Yesod, Scotty (Haskell) • ...

    if you already works with Haskell • ... if you want something really fast but not in C • ... if you want to make cool and fun things Tuesday, April 23, 13
  27. How to start? • do something simple • do something

    interesting • find problem (pain?) and solve it • do not try to rewrite your project line-by-line Tuesday, April 23, 13
  28. 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/ Tuesday, April 23, 13