Clojure is a dynamic, general-purpose programming language. It combines the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming and the performance gains of compiling and running on the JVM. It is a lisp dialect that runs on the JVM, enabling the use of Java code side by side with Clojure.
Elevate your Clojure skills through 114 curated exercises across 13 core concepts. Master problem-solving with a structured learning path designed for modern developers.
Clojure is a dynamic programming language that targets the Java Virtual Machine (JVM). Designed as a general purpose language, Clojure combines the approachability of a scripting language with a robust infrastructure for multithreaded programming.
Clojure is predominantly a functional programming language, and features a rich set of immutable, persistent data structures.
Clojure is open source, and information about contributing to the language can be found here.
Rich Hickey, the creator of Clojure, wanted a modern Lisp for functional programming, symbiotic with the established Java platform, and designed for concurrency; thus, Clojure was born.
Here are a couple quotes that exemplify the goals of Clojure:
Lisp
Extends Lisp's code-as-data system to vectors and maps, and has a powerful macro system.
Dynamic
Clojure's primary programming interface is the Read-Eval-Print-Loop (REPL).
Functional
Allows avoiding mutable state, provides functions as first-class objects, and emphasizes recursion.
Practical
Doesn’t force programs to be referentially transparent, and doesn’t strive for 'provable' programs.
Concurrent
Supports sharing changing state between threads in a synchronous and coordinated manner.
JVM Hosted
Shares the JVM type system, GC, threads etc. Compiles all functions to JVM bytecode.
Lisp
Extends Lisp's code-as-data system to vectors and maps, and has a powerful macro system.
Dynamic
Clojure's primary programming interface is the Read-Eval-Print-Loop (REPL).
Functional
Allows avoiding mutable state, provides functions as first-class objects, and emphasizes recursion.
Practical
Doesn’t force programs to be referentially transparent, and doesn’t strive for 'provable' programs.
Concurrent
Supports sharing changing state between threads in a synchronous and coordinated manner.
JVM Hosted
Shares the JVM type system, GC, threads etc. Compiles all functions to JVM bytecode.