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
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
160
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
3
1k
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
210
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
Hono + Inertia + React で LP を構築した話
oukayuka
2
210
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
210
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
990
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
630
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Bash Introduction
62gerente
615
220k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
How to build a perfect <img>
jonoalderson
1
6k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
810
The SEO identity crisis: Don't let AI make you average
varn
0
550
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
260
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
A designer walks into a library…
pauljervisheath
211
25k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
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