Sign up for weekly Clojure tips, software design, and a Clojure coding challenge.
Issue 1.36 — April 07, 2013
Clojure/West was a lot of fun. I met tons of people, caught up with an old friend, and watched some great talks. I thought it would be fun to highlight some of the cool things happening. I didn't get to go to every talk, so this can't possibly be all of the cool stuff, so don't think that this is comprehensive.
By far the most anticipated talk was about a new web framework from Relevance. In fact, Tim Ewald gave two consecutive one-hour slots dedicated to it.
Pedestal has two parts, the server side and the client side. The server side is simply a way to decouple request handling from response handling so that the server can send asynchronous messages to the client (using Server Side Events).
The client side is more interesting and harder to explain. It consists of a few key abstractions which build a logical tree of state and ways of defining functions that are triggered when a certain part of that tree changes. I haven't played with it so I don't quite grok it yet.
But I hope to play with it soon, because it looks like it could transform the big hairy mess that is client-side state management/dom manipulation and turn it into a nice organized mess with some dom manipulation as an easy side effect. As I've said before, Clojure tends to clean up messy abstractions.
Brandon Bloom gave an interesting talk about experimenting with concatenative languages (like Forth) inside of Clojure. Because a concatenative operator can be thought of as a pure function from one stack to another, it is natural to represent the language in Clojure. What he came up with is a quite powerful mix which he calls Factjor. The stack operations are Clojure functions and can be created like any Clojure function. It was surprisingly striking how powerful the blending can be. And concatenative programs have at least one distinct advantage over non-concatenative languages: they can be run as they are read. Slides are here.
Matthew Flatt explained how Racket models different "times" (compile-time, runt-time, documentation-time, test-time) for great effect. It is an interesting counter-point to Clojure's notion of time (or lack thereof).
Design, Composition, and Performance
Rich Hickey gave another philosophical talk about programming and software design. He asked us to look to music and musical practice, performance, and mastery for guidance into how we can better develop our software. I wish there was something to link to, but I couldn't find anything. The video will be out eventually.
Timothy Baldridge has developed an internal DSL (called mjolnir) for generating native code using LLVM, then connecting to it through the Java Native Interface and calling it. He gave a most impressive demonstration of compiling code to be run on the GPU and running it from within a REPL.
The DSL looks pretty good from what you can see in the slides. It tries to mimic regular Clojure forms.
Nathan Sorenson presented his fork of the ClojureScript compiler to Gambit Scheme. Gambit Scheme can compile to efficient C and is quite similar semantically to Clojure. This gives Clojure an easy route to native compilation, and Sorenson has his eyes on the iPhone.