Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Web, Concurrency, FP
Search
Oleksii Kachaiev
May 31, 2013
Programming
5
880
Web, Concurrency, FP
Hotcode, 2013
Oleksii Kachaiev
May 31, 2013
Tweet
Share
More Decks by Oleksii Kachaiev
See All by Oleksii Kachaiev
Counting HTTP with QUIC & HTTP/3
kachayev
1
220
Talking SQL to Strangers
kachayev
3
490
Counting HTTP: 0.9...3
kachayev
1
60
Managing Data Chaos in The World of Microservices
kachayev
3
590
Deep HTTP Dive Through Aleph & Netty
kachayev
6
3.6k
Keep Your Data Safe With Refined Types
kachayev
4
1.4k
Clojure at Attendify (2nd ed)
kachayev
5
1.5k
Clojure at Attendify
kachayev
4
310
Finagle & Clojure
kachayev
6
1.3k
Other Decks in Programming
See All in Programming
オートマトン学習しろ / Do automata learning
makenowjust
3
130
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
6
1.6k
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
680
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
380
Jakarta EE meets AI
ivargrimstad
1
550
Patched fetch did not work
quramy
4
410
Modernisation Progressive d’Applications PHP
hhamon
0
110
Hermes: Better Performance with Bytecode Translation (React Universe 2024)
tmikov2023
0
100
あなたのアプリ、ログはでてますか?あるいはログをだしてますか? (Funabashi.dev用 軽量版)
uzulla
2
130
From Idea to IDE: Developing Plugins for Android Studio
thisaay
1
230
事業フェーズの変化に対応する 開発生産性向上のゼロイチ
masaygggg
0
210
Featured
See All Featured
Happy Clients
brianwarren
96
6.6k
Robots, Beer and Maslow
schacon
PRO
157
8.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
28
1.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
103
48k
The Invisible Side of Design
smashingmag
296
50k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A better future with KSS
kneath
235
17k
Code Review Best Practice
trishagee
62
16k
Designing for humans not robots
tammielis
248
25k
Docker and Python
trallard
39
3k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
Transcript
Web, Concurrency, FP the problems that we can’t ignore ...
any more (c) Alexey Kachayev, 2013
About me Alexey Kachayev •CTO at Attendify •Open source activist
(Fn.py) •Functional programming advocate •Erlang, Python, Scala, Clojure, Haskell, Go hacker
Contacts •kachayev <$> twitter •kachayev <$> gmail •kachayev <$> github
Disclaimer #1 It’s hard to tell “is this language functional?”
We will talk about: Erlang, Scala, Clojure, Haskell
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.
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)
Concurrency... Concurrency is the composition of independently executing computations. Concurrency
is a way to structure software, ... (c) Rob Pike “Concurrency is not parallelism”
Concurrency is hard when independent computations depend on each other
WTF??? how independent computations can depend on each other?
Why should I care? I’m just coding Python/Ruby/PHP/ Node.js...
Classical web dev •Many OS processes •Database to store data
•.... •You are welcome in the world of concurrency!
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
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
So what? •Independency is still too expensive •Still hard to
test •Still hard to control •Locks are not so good abstraction
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
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
How to deal with concurrency?
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?
From theory to practice
Concurrency •Erlang •Scala •others •Clojure •Haskell •others Communication Collaboration And
why do FP “features” matter?
Erlang •message-passing concurrency •multi-core support •distributed systems •“super” stable VM
(VM as OS!) •“hard to break” something •interactive development
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
Reactivity or “super- thin” client •Liftweb (Scala) •Nitrogen (Erlang) •N2O
(Erlang)
Clojure •FP, lisp-family •STM concurrency model •modern language •interactive development
•macros •JavaScript compiler •huge web stack
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
IWBYP http://iwbyp.chris-granger.com/
How to start? •do not wait! •do not hesitate! •do
not panic!!! •do something simple •do something interesting •find problem (pain?) and solve it
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/
Questions? * other talks: https://kachayev.github.com/talks ** me: http://twitter.com/kachayev P.S. We
are hiring