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
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
760
Google Apps Script で Ruby を動かす
kawahara
0
130
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
140
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.4k
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
Foundation Models frameworkで画像分析
ryodeveloper
1
600
その節約、円になってますか?
isamumumu
1
700
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
200
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
410
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Crafting Experiences
bethany
1
240
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Into the Great Unknown - MozCon
thekraken
41
2.7k
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