Clojurescript

Coffeescript++

Benjamin Dreux
@Benjamin Dreux
     

Objectifs

  • ♥ syntaxe lisp (très simple)
  • Meilleur langage (meilleur que JS)

Objectifs

  • Plateforme JS / Language Js

Histoire 101

  • 1958: Lisp (John McCarthy)
  • .... C Erlang C++ Java
  • 2007: Clojure (Rich Hickey)
  • 2011: Clojurescript (Rich Hickey)
clojurescript n.m. gre. Parenthos Scriptis Langage de programmation fonctionnel à typage dynamique fort, membre de la famille des LISP. Conçu pour être compilé vers le bytecode des navigateurs internet.

Cibles

  • Navigateur
  • Nashorn (Oracle)
  • Rhino (Mozilla)
  • JavaScriptCore (Apple)
  • Iojs/Node

Google cloSure

  • Librairie
  • Compilateur

Langage

Syntaxe *

* Peut contenir des traces de parenthèses

Symbol abc
String "abc"
keyword :abc
List () (accès par la tête)
Vector [] (accès par index)
Map {:key "value"} (key = struct)
Set #{"pomme"}
Absence de valeur nil
booleen true/false
Appel de fonction (inc 10)

Règles de précédence

 

Expression/Statment

Exemple du if

Langage Type Valeur
Js statment ø
cljs/coffee expression Valeur du corps
(branche true/false)

Persistant Immutable Data Structure

  • Immuable et Efficace
  • Plus lent qu' Object et Array
  • Différence négligeable (v8 & ionMonkey)
Évaluation paresseuse
Example de Code

(map inc [1 2 3 4]) 
;; => (2 3 4 5)
          

Simple, non ?

Trop, simple ?

MACRO

Namespace

Js Interop

JS namespace
js/*
creation d'objet
(js/Date)
appel de fonction
(js/alert "some text")
output direct
(js* "myFunky-weirdMethod(a b c)")
Reader litteral
#js {:key "value"}
Conversion des types natifs
(js->cljs regular-js-array)
(cljs->js peristant-vector)

Documentation

  • ~ Clojure
  • + Interop
  • cljs.info

Build tool

Style Clojure Node
Configuration Leiningen Grunt
Code boot Gulp

React & cljs

  • Om
  • Reageant
  • Quiescent
  • Rum

React & cljs

  • undo/redo
  • hot swap
  • Transmettre l'état de l'app

Transfert de données

EDN

  • Format indépendant
  • Proche de clojure
  • Extensibilité a la XML
  • Human readable
  • LENT

Transit

  • Idem EDN
  • Human NOT readable
  • Aussi rapide que JSON.parse/JSON.stringify

cljs.test/core.test

Test unitaire
clojurescript/clojure

test.check

Test de propriété
clojure/clojurescript

core.logic

Programmation logique (~Prolog)
clojure/cljs

core.async

CSP
clojure/cljs

core.match

Pattern matching
clojure/cljs

core.typed

typage graduel
clojure

Futur ?

  • Clojurescript en clojurescript ?
  • clojure-in-clojure
  • Meilleur doc (cljs.info)

Questions?

Crédits photos

Simon "Bourguiboeuf"Tout ne vas pas plus vite
Lionel RoyerVercingétorix jette ses armes aux pieds de César
Quinn DombrowskiSpare parentheses
KelpWiring After
FmpgohVenus de Milo
Road FunLazy Sunday
Casey FlorigWalking Dead
JamiecatZombie Day Toulouse 2014
marcovdzCompressed Car
Andrew BecraftCrate full of BrickArms ordnance
Owen Massey McKnightDictionary pigeonholes