* Title ** Clojure *** Rocks ** Javascript *** Reaches ** Announcing Clojure on Javascript *** ClojureScript * Problem statement ** Javascript is the only programmable technology in key target environments *** i.e. the browser *** nothing will change that for years to come ** and has the greatest reach in other key environments *** i.e. mobile ** Javascript (the language) is not very robust *** Fewer good parts than bad parts *** Much convention and discipline required to avoid headaches *** Conventions differ between shops, libs ** Ever increasing pressure to create richer applications in these environments *** requiring more, and larger, libraries **** ordinary minification doesn't scale up *** increasing requirements complexity **** can't add language or environment complexity on top * Rationale ** Clojure is arguably simpler, more powerful and more robust than JS ** JS VMs getting faster and more sophisticated ** Putting Clojure on JS empowers developers * Strategy ** Compile (a substantial subset of) Clojure to Javascript source ** Leverage best-of-breed JS approaches ** Look beyond the browser ** Non-objectives *** Complete Clojure *** Portable large applications *** Browser REPL demos etc ** Target is production applications * Tactics ** Clojure[Script] in Clojure *** Written in Clojure and itself ** Clojure on Closure *** Google's JS toolkit ** Clojure[Script] in Clojure ** Google Closure ** some subset of my gclosure lightning talk * Where we are at ** What's there? *** Compiler *** REPL *** All the primitives (that make sense) *** Arity overloading *** Macros *** Seqs, maps, vectors, sets **** and supporting library **** callable maps, vectors, sets *** Symbols and keywords *** deftypes and protocols *** all the core abstractions as protocols *** destructuring *** 2500 lines of core libs! *** clojure.string and .set .walk .zip *** regex *** reader? *** Full participation with Google Closure library **** ns mechanism maps to provide/require *** compile-file and compile-project ** What's not (yet)? *** Full collection persistence *** defrecord *** Multimethods *** Hierarchy *** Rich numerics *** Testing framework *** Misc core lib ** What won't be? *** things related to threads *** eval and runtime compilation *** structs, proxy, Java type stuff *** Runtime reification of: **** Vars **** Namespaces **** Protocols **** etc ** TBD *** optimizations **** chunks, transients *** agents (on webworkers?) *** unchecked ** What's different *** no runtime Vars *** some in-function subsetting **** e.g. satisfies? is a macro, can't be mapped/applied ** It's alpha * Where we are going ** This is Clojure's client story ** This is Clojure's mobile story ** This is Clojure's CLI scripting story * The Team thus far - Clojure/core and friends ** Aaron Bedra ** Alan Dipert ** Alex Redington ** Bobby Calderwood ** Brenton Ashworth ** Chris Houser ** Devin Walters ** Eric Thorsen ** Frank Failla ** Michael Fogus ** Jonathan Clagett ** Jess Martin ** Luke VanderHart ** Chris Redinger ** Stuart Halloway ** Stuart Sierra ** Tom Hickey * Participating ** This is a Clojure dev project *** all with Clojure CAs welcome to participate ** The Friday invite ** The Conj * Demo ** REPL ** Compilation ** Web app ** CLI app? * Q & A