GSoC/GCI Archive
Google Summer of Code 2014

Clojure

License: Eclipse Public License

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, as a GSoC mentoring organization, includes projects from all parts of the Clojure ecosystem, from IDE tooling to logic programming libraries.

Projects

  • Aleph, a BOT browser and introspector for Light Table Light Table leverages the BOT architecture to create a platform designed around extensibility. In BOT, working components are defined by several elements. How these elements are combined, how they interact, and how they affect the application state is a source of complexity that makes BOT opaque. Aleph aims to make BOT accessible by providing a uniform interface for querying and recording state at runtime.
  • Incanter and core.matrix integration Incanter is a statistical computing platform, core.matrix is a language extension with a focus on numerical computing. The project is intended to bridge the gap between them by implementing core.matrix support in Incanter. This will result in a more flexible and transparent usage of Incanter and its customisation to particular needs of the user.
  • Lean Clojure/JVM runtime Develop a modified Clojure runtime for the JVM that is leaner than the original Clojure for JVM (that is, takes less time to load and consumes less memory) and create a compiler toolchain to be able to compile most Clojure libraries to be used with this runtime.
  • Lean Clojure: An agressive compiler for lighter weight Clojure programs The Clojure programming language uses a bootstrapped runtime, for which it trades off startup time and memory to enable REPL development and code injection. Once an application is deployment ready, this dynamic behavior is often not needed and so the dynamism upside no longer offsets the performance costs. I propose to design and implement a Clojure compiler capable of mitigating these dynamism costs for a subset of Clojure.
  • Linear Algebra for Clojure - Adding linear algebra tools to core.matrix For my GsoC project, I want to add linear algebra algorithms to the core.matrix API that are highly efficient. The target is that they have performance comparable to best libraries in Java matrix benchmark.
  • Quil on ClojureScript Make Quil library cross platform between JVM and JavaScript.
  • tools.analyzer extensions: cljs port, documentation This project aims to provide a tools.analyzer implementation for cljs, which will provide along with tools.analyzer.jvm a consistent way for libraries/compiler writers to deal with ASTs for the two languages. It also aims to extend documentation on the tools.* infrastructure with AST specifications, passes documentation and user guides on how to best exploit the general AST walking utilities that tools.analyzer offers.
  • Typed Clojure: Heterogeneous operations & Dotted Polymorphism This project aims to provide a first class type annotation for Typed Clojure, makes it possible to annotate some core library without hard-coding them, and also provide this ability to the user.
  • Typed ClojureScript Library Annotations As far as I can see in typed-clojurescript-play project, few functions which are used frequently from typical clojurescript code got annotations. The project needs somebody who can devote his time to annotating functions in libraries unique to clojurescript and functions in google closure library.