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
React & ClojureScript in production at Attendify
Search
Roman Liutikov
February 18, 2017
Programming
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React & ClojureScript in production at Attendify
React Kyiv, Feb 17, 2017
Roman Liutikov
February 18, 2017
More Decks by Roman Liutikov
See All by Roman Liutikov
ClojureScript × Type Inference
roman01la
0
48
React Kyiv – Dec 19, 2017
roman01la
1
230
Web Apps performance & JavaScript compilers
roman01la
3
140
Introduction to React.js
roman01la
0
94
React Native: Native Mobile Development in JavaScript @ LvivJS 2016
roman01la
0
160
React Native: Are we there yet? (Pokémon edition) @ VinnytsiaJS '16
roman01la
0
430
React Native: Native mobile development with JavaScript
roman01la
0
210
ClojureScript, что ты такое?
roman01la
1
230
ClojureScript: what are you?
roman01la
2
140
Other Decks in Programming
See All in Programming
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.9k
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
3
360
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
What We Talk About When We Talk About XP
m_seki
2
390
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
100
スマート反転とウェブアクセシビリティ
camiha
0
150
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
160
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Designing Experiences People Love
moore
143
24k
Scaling GitHub
holman
464
140k
The browser strikes back
jonoalderson
0
1.6k
Making the Leap to Tech Lead
cromwellryan
135
10k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Transcript
React & ClojureScript
How everyone see LISP devs
(defn row-bindings [f ocrs] (concat (:bindings f) (->> (map vector
(:ps f) ocrs) (filter (fn [[p ocr]] (named-wildcard-pattern? p))) (map (fn [[p ocr]] [(:sym p) (leaf-bind-expr ocr)]))))) (defn existential-pattern? [x] (instance? IExistentialPattern x)) (defn wildcard-or-existential? [x] (or (wildcard-pattern? x) (existential-pattern? x)))
(defn row-bindings [f ocrs] (concat (:bindings f) (->> (map vector
(:ps f) ocrs) (filter (fn [[p ocr]] (named-wildcard-pattern? p))) (map (fn [[p ocr]] [(:sym p) (leaf-bind-expr ocr)]))))) (defn existential-pattern? [x] (instance? IExistentialPattern x)) (defn wildcard-or-existential? [x] (or (wildcard-pattern? x) (existential-pattern? x))) What I see
(defn row-bindings [f ocrs] (concat (:bindings f) (->> (map vector
(:ps f) ocrs) (filter (fn [[p ocr]] (named-wildcard-pattern? p))) (map (fn [[p ocr]] [(:sym p) (leaf-bind-expr ocr)]))))) (defn existential-pattern? [x] (instance? IExistentialPattern x)) (defn wildcard-or-existential? [x] (or (wildcard-pattern? x) (existential-pattern? x))) What the non-Lisper sees
How we got there?
2013 Backbone & CoffeeScript
2014 React & CoffeeScript
2014 Q3 React & ClojureScript
2017 ~50,000 LOC of ClojureScript in production
None
None
None
• simple, almost no syntax • functional programming • pragmatic
• everything is immutable • guest language БЕЗ МОНАД ВСЕ ОЧЕНЬ ПРОСТО
LISP LISt Processing КАК ЭТО ЧИТАТЬ?!
A list of 3 items (1 "two" 3.0)
Nested lists (1 (2 3))
Symbolic expression s-expression (+ 1 2) 3
Nested s-expressions (+ 1 (+ 2 3 2)) 1 7
8
ЧТО ЭТО ВООБЩЕ БЫЛО?
REACT
(defc Counter [num] [:div [:button {:on-click increment-counter} "-"] [:span num]
[:button {:on-click decrement-counter} "+"]]) const Counter = (num) => ( <div> <button onClick={incrementCounter}>-</button> <span>{num}</span> <button onClick={decrementCounter}>+</button> </div> );
[:div (case num -1 (Negative) 0 (Empty) 1 (Positive))] <div>{
switch (num) { ... } }</div>
(js/setTimeout #(console.log "HELLO!") 100) setTimeout(() => console.log("HELLO!"), 100)
ES2015 | Babel | JavaScript CLJS | CLJS Compiler |
JavaScript
React + ReactDOM Raw Gzip Webpack 2 139KB 42KB Closure
Compiler 90KB 32KB Optimization
ТЕПЕРЬ О ПЛОХОМ
NOPE ['foo', 'react-kyiv', 'org'].join('.')
Clojure Hacking Day
None