A brief overview of Clojure and the features it includes
Resources for getting Clojure up and running
Grand tour of all that Clojure has to offer
Walkthroughs to help you learn along the way
We have a vibrant, flourishing community. Join us on our Google Group, find us on IRC in #clojure, or join our Slack channel.
“Our Clojure system just handled its first Walmart black Friday and came out without a scratch.”
“Clojure is a functional programming language from top to bottom. This means that code written in Clojure is very modular, composable, reusable and easy to reason about.”
“We discussed the existing Clojure community, the maturity of the language itself and the momentum we saw in the industry. Companies are seeing speed to market deliveries ... based on Clojure.”
Clojure has a set of useful features that together form a simple, coherent, and powerful tool.
Clojure is a dynamic environment you can interact with. Almost all of the language constructs are reified, and thus can be examined and changed. You can grow your program, with data loaded, adding features, fixing bugs, testing, in an unbroken stream.
Clojure provides the tools to avoid mutable state, provides functions as first-class objects, and emphasizes recursive iteration instead of side-effect based looping. Clojure is impure, yet stands behind the philosophy that programs that are more functional are more robust.
Clojure is a member of the Lisp family of languages. Many of the features of Lisp have made it into other languages, but Lisp's approach to code-as-data and its macro system still set it apart. Additionally, Clojure’s maps, sets, and vectors are as first class in Clojure as lists are in Lisp.
Systems that utilize runtime polymorphism are easier to change and extend. Clojure offers simple, powerful and flexible mechanisms for runtime polymorphism. Clojure’s protocols and datatypes features add mechanisms for abstraction and data structure definition with no compromises vs the facilities of the host platform.
Clojure simplifies multi-threaded programming in several ways. Because the core data structures are immutable, they can be shared readily between threads. Clojure, being a practical language, allows state to change but provides mechanism to ensure that, when it does so, it remains consistent, while alleviating developers from having to avoid conflicts manually using locks etc.
Clojure is designed to be a hosted language, sharing the JVM type system, GC, threads etc. All functions are compiled to JVM bytecode. Clojure is a great Java library consumer, offering the dot-target-member notation for calls to Java. Clojure supports the dynamic implementation of Java interfaces and classes.
Cognitect is a collection of experienced, thoughtful technologists, passionate about helping organizations deploy technology effectively and humanely to build better futures.
In addition to working directly with companies to deliver innovative solutions, Cognitect offers architectural review, training and talent development services for companies and teams deploying Clojure and ClojureScript.
“We have created some of the sharpest tools in the business. We believe this platform is a better way to develop software, and we want you to have confidence using and deploying these tools. Open source doesn't mean you're on your own any more.” – cognitect.com