GSoC/GCI Archive
Google Summer of Code 2012

Clojure/dev

Web Page: http://dev.clojure.org/display/community/

Mailing List: http://groups.google.com/group/clojure

We are the core development team for Clojure and it's contributed libraries.

Projects

  • Lightweight Clojure editor, repl, and documentation browser Currently everyone using Overtone must setup a clojure environment and editor, but it would be great if people who are unfamiliar with software development and/or clojure (e.g. musicians, artists, etc...) could download a single application to easily experiment with pre-existing instruments, sequencers, samplers, fx-racks made for guitars or other external instruments, etc. The app would let someone browse a built-in library of examples, evaluate code, experiment in a repl, open and save text files. The processing.org or SuperCollider applications are examples of this kind of system.
  • Pluggable Backend Infrastructure for ClojureScript, and Development of a Lua backend This projects aims at modularizing ClojureScript compiler backend (code emitter, target specific run-time parts) from the front end (parser and analyzer), and at providing an external interface for people wanting to implement their own backend. It would thus provide a modularized JavaScript backend, using the newly developed API to interface with the core of the ClojureScript compiler. Additionally, this project would deliver a Lua target for the ClojureScript compiler, as a proof of concept of the efficiency of the modularization process.
  • Toolchain for dynamic Clojure development on Android A set of tools that will enable an easy dynamic development on Android using the remote REPL; a build system for Clojure/Android projects that is idiomatic and familiar to Clojure developers; and a helper library to simplify the creation of boilerplate-rich Android-specific classes (like Activities, Views etc.)
  • Typed Clojure (Optional Static Type System) Clojure currently does not have a static type system. By utilizing the results of the Clojure Compiler's analysis phase (via analyze), we can build a static type checker, provided a la carte, as a library. Typed Racket is an example of adding a satisfying type system to an existing dynamically typed language, while preserving programming idioms and supporting interaction with untyped code. We will test the generality of ideas used in Typed Racket, such as Non-Uniform Variable Arity Polymorphism (typing complex variable arity functions like 'map') and occurrence typing (a type inference strategy). There are also other potentially novel problems to be solved/found, some are detailed in this draft research proposal for Typed Clojure. Typed Racket is divided into two main parts: a type system and a system managing interaction across module boundaries (eg. using typed code from untyped). This project will concentrate on adding a static type system to Clojure.