Upgrade to Pro — share decks privately, control downloads, hide ads and more …

O Último Transpiler Que Você Irá Precisar

O Último Transpiler Que Você Irá Precisar

A era dos transpilers renovou toda a comunidade JavaScript. A modernização da linguagem instigou a criação de ferramentas de desenvolvimento. Floresceu novas abstrações para assíncrona e imutabilidade. Mas infelizmente também criou uma bagunça. E se pudéssemos unir tudo isso numa linguagem expressiva aliada ao Estado da Arte de minificadores e otimizadores de JavaScript? Apresento-lhes ClojureScript.

Andrew Rosa

June 18, 2016
Tweet

More Decks by Andrew Rosa

Other Decks in Programming

Transcript

  1. https://en.wiktionary.org/wiki/transcompiler trans- + compiler ! A translating compiler that takes

    the source code of a programming language as its input and outputs the source code into another programming language.
  2. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  3. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  4. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  5. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  6. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  7. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  8. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  9. {:name "Andrew Rosa" :events [{:name "RuPy Campinas" :year 2016 :tags

    #{:ruby, :python, :js} :location "FEEC - Unicamp"}]}
  10. • Retornar todos resultados de um termo de busca •

    Acumular resultados de páginas, imagens e vídeos • Buscar em múltiplos servidores, retornar resultado do mais rápido • Manter um timeout de toda operação, protegendo de servidores lentos
  11. c := make(chan Result) go func() { c <- First(query,

    Web1, Web2) } () go func() { c <- First(query, Image1, Image2) } () go func() { c <- First(query, Video1, Video2) } () timeout := time.After(80 * time.Millisecond) for i := 0; i < 3; i++ { select { case result := <-c: results = append(results, result) case <-timeout: fmt.Println("timed out") return } } return
  12. (defn google [query] (let [c (chan) t (timeout 80)] (go

    (>! c (<! (fastest query web1 web2)))) (go (>! c (<! (fastest query image1 image2)))) (go (>! c (<! (fastest query video1 video2)))) (go (loop [i 0 ret []] (if (= i 3) ret (recur (inc i) (conj ret (alt! [c t] ([v] v))))))))) ! (let [el (by-id "ex4-out") c (listen (by-id "search") :click)] (go (while true (<! c) (set-html! el (pr-str (<! (google "clojure")))))))
  13. ! (let [v [1, 2]] (println v) (println (conj v

    3)) (println v)) ! ;; => [1, 2] ;; => [1, 2, 3] ;; => [1, 2]
  14. ! (let [v [1, 2]] (println v) (println (conj v

    3)) (println v)) ! ;; => [1, 2] ;; => [1, 2, 3] ;; => [1, 2]
  15. ! (let [v [1, 2]] (println v) (println (conj v

    3)) (println v)) ! ;; => [1, 2] ;; => [1, 2, 3] ;; => [1, 2]
  16. ! (let [v [1, 2]] (println v) (println (conj v

    3)) (println v)) ! ;; => [1, 2] ;; => [1, 2, 3] ;; => [1, 2]
  17. ! (let [v [1, 2]] (println v) (println (conj v

    3)) (println v)) ! ;; => [1, 2] ;; => [1, 2, 3] ;; => [1, 2]
  18. Aprender mais? • http://clojurescriptkoans.com • http://www.braveclojure.com • Clojure Brasil (Facebook)

    • clj-br (YouTube) • #clojure-brasil (Slack: http://clojurians.net)
  19. ?