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
420
React Native: Native mobile development with JavaScript
roman01la
0
200
ClojureScript, что ты такое?
roman01la
1
220
ClojureScript: what are you?
roman01la
2
140
Other Decks in Programming
See All in Programming
Android CLI
fornewid
0
210
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
210
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
メールのエイリアス機能を履き違えない
isshinfunada
0
220
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
110
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
470
Foundation Models frameworkで画像分析
ryodeveloper
1
600
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
A Modern Web Designer's Workflow
chriscoyier
698
190k
We Are The Robots
honzajavorek
0
290
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
440
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Exploring anti-patterns in Rails
aemeredith
3
460
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
670
Embracing the Ebb and Flow
colly
88
5.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
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