GSoC/GCI Archive
Google Summer of Code 2013

Clojure

Web Page: http://dev.clojure.org/display/community/Project+Ideas

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

Clojure is a dynamic programming language that targets the Java Virtual Machine (JVM), JavaScript, and Microsoft's .Net framework.  It is designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming.  Clojure is a dialect of Lisp, and shares with Lisp the code-as-data philosophy and a powerful macro system. Clojure is predominantly a functional programming language, and features a rich set of immutable, persistent data structures. When mutable state is needed, Clojure offers a software transactional memory system and reactive Agent system that ensure clean, correct, multithreaded designs.

Clojure/dev, as a GSoC mentoring organization, includes projects from all parts of the Clojure ecosystem, from IDE tooling to logic programming libraries.

Projects

  • Algebraic Expressions The goal is to implement a library for manipulating and analyzing algebraic expressions. This would allow several advanced features like solving a system of equations in regard to a variable X, or optimizing an expression for executing via core.matrix. The library should also be extensible, to build a foundation for symbolic manipulation of expressions, on which other, more sophisticated transformations can be based.
  • Clojure Compiler port to clojure (CinC) CinC is a compiler written in clojure that can currently analyze and compile a subset of clojure. It is based on the clojurescript compiler but it is not complete and it needs more work in order to be a viable alternative to Compiler.java. With this project I'd intend to complete the CinC implementation in order to make it at least as powerful as Compiler.java is, and explore using multiple micro-passes in the analyzer, instead of keeping it a monolythic single-pass one, as the clojurescript one and Compiler.java are, in order to ease debugging and allow selective enabiling/disabling of analysys phases. Extensive documentation will also be written for every part of the compiler.
  • ClojureScript optimization and source maps support Full source maps support in ClojureScript; a web-based benchmarking app capable of comparing performance across revisions of a project, with good UX (GitHub links for all revisions / revisions causing regressions etc.); automated browser REPL tests; performance tuning of the core codebase, including a thorough review of code generated under advanced compilation to discover inefficiencies (e.g. spots where the structure of the ClojureScript code defeats Closure compiler's optimization effors).
  • core.typed: Extensions and Documentation core.typed is an optional type system for Clojure which can type check idiomatic Clojure code. It is based on Typed Racket, and has the same basic features. It is clear that several extensions are required to type check some common Clojure idioms. Developing these require careful research and design work. Implemented solutions to these problems will be a primary deliverable for this project. User documentation will also be extended, and a user guide will be completed.
  • Enhance Neko for Android Extend the existing Neko library to cover all necessary UI widgets and Android 4.0+ concepts. Implement a way to work with UI elements like with Clojure data using destructuring and pattern-matching. Provide Clojure/Android runtime with the ability to auto-complete symbols and jump to symbol definition.
  • Implementation of core.matrix-compatible multidimensional array in Clojure core.matrix is an actively growing library that provides general interface for different matrix libraries. For the sake of reference, as well as better "out-of-the-box" experience, plain Clojure implementation of the interface is needed. This project aims to provide one.