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