# clojure/clojure

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/clojure-clojure).**

11,006 stars · 1,462 forks · Java

## Links

- GitHub: https://github.com/clojure/clojure
- Homepage: https://clojure.org
- awesome-repositories: https://awesome-repositories.com/repository/clojure-clojure.md

## Description

Clojure is a general-purpose, functional programming language hosted on the Java Virtual Machine. It is a homoiconic S-expression language that represents programs as nested data structures, allowing code to be manipulated and evaluated as data.

The project provides a framework for JVM interoperability, enabling the invocation of Java methods and integration with other JVM-based languages. It distinguishes itself through a persistent data structure library that uses bitmapped vector tries to manage immutable collections and a programmatic REPL for interactive software development and real-time library loading.

The system includes capabilities for parallel data processing using a fork-join model and data transformation via transducers. It also covers protocol-based polymorphism, metadata-driven dispatch, and a compilation process that transforms high-level expressions into Java bytecode.

The runtime supports remote access to interactive environments via socket server initialization.

## Tags

### Programming Languages & Runtimes

- [Homoiconic Languages](https://awesome-repositories.com/f/programming-languages-runtimes/homoiconic-languages.md) — Represents programs as nested data structures, allowing code to be manipulated and evaluated as data.
- [Homoiconic Syntax](https://awesome-repositories.com/f/programming-languages-runtimes/homoiconic-syntax.md) — Represents programs as nested data structures, allowing code to be manipulated and evaluated as data.
- [Source-to-Bytecode Compilers](https://awesome-repositories.com/f/programming-languages-runtimes/bytecode-compiled-languages/source-to-bytecode-compilers.md) — Provides a compiler that transforms high-level functional expressions into optimized Java bytecode for the JVM.
- [Functional Programming Frameworks](https://awesome-repositories.com/f/programming-languages-runtimes/functional-programming-frameworks.md) — Provides a high-level framework for application development based on functional paradigms and immutable data structures.
- [Java Method Invocations](https://awesome-repositories.com/f/programming-languages-runtimes/java-method-invocations.md) — Provides seamless invocation of qualified Java methods and constructors as functions through generated wrapping logic. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [JVM Interoperability Frameworks](https://awesome-repositories.com/f/programming-languages-runtimes/jvm-interoperability-frameworks.md) — Provides a seamless bridge interface for invoking Java methods and integrating other JVM-based languages.
- [Persistent Data Structures](https://awesome-repositories.com/f/programming-languages-runtimes/persistent-data-structures.md) — Ships highly efficient immutable collections based on bitmapped vector tries to ensure stability and scalability.
- [JVM Ecosystem](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/jvm-languages.md) — Integrates seamlessly with the JVM ecosystem to invoke Java methods and leverage existing libraries.
- [Lisp Dialects](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/language-specific-resources/functional-programming-ecosystems/lisp-dialects.md) — Implements a functional Lisp dialect hosted on the JVM with a strong emphasis on immutable data and REPL-driven development.
- [Purely Functional Languages](https://awesome-repositories.com/f/programming-languages-runtimes/purely-functional-languages.md) — Provides a general-purpose language centered on pure functions and immutable data structures.
- [JVM Bytecode Compilers](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-bytecode-compilation/jvm-bytecode-compilers.md) — Transforms high-level functional expressions into Java bytecode for execution on the Java Virtual Machine.
- [Java Virtual Machine Runtimes](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/language-runtimes/java-virtual-machine-runtimes.md) — Provides a functional programming runtime hosted on the Java Virtual Machine with direct access to Java libraries.
- [Homoiconicity](https://awesome-repositories.com/f/programming-languages-runtimes/s-expression-data-formats/homoiconicity.md) — Represents code as nested data structures allowing the language to treat programs as manipulatable data.
- [S-Expression Languages](https://awesome-repositories.com/f/programming-languages-runtimes/s-expression-languages.md) — Represents programs as nested S-expressions, allowing the language to treat code as manipulatable data.
- [Direct Method Call Generation](https://awesome-repositories.com/f/programming-languages-runtimes/direct-method-call-generation.md) — Optimizes performance by generating direct calls to static methods, bypassing variable and object lookup overhead. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Metadata-Driven Dispatch](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/runtimes/type-definition-systems/runtime-type-dispatching/universal-function-dispatchers/metadata-driven-dispatch.md) — Uses attached metadata on data atoms to determine how functions or protocols behave at runtime.

### Part of an Awesome List

- [Transducers and Streams](https://awesome-repositories.com/f/awesome-lists/devtools/transducers-and-streams.md) — Provides transducers to create reusable transformation recipes that operate across different data collection types. ([source](https://github.com/clojure/clojure/blob/master/changes.md))

### Data & Databases

- [Collection Reductions](https://awesome-repositories.com/f/data-databases/collection-iterators/collection-iteration/collection-reductions.md) — Implements functional patterns for collapsing associative collections into single values using accumulator functions. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Persistent Collection Implementations](https://awesome-repositories.com/f/data-databases/immutable-collection-sorting/persistent-collection-implementations.md) — Implements immutable collections using structural sharing and bitmapped vector tries for efficient memory and performance.
- [Language Stream APIs](https://awesome-repositories.com/f/data-databases/data-processing-pipelines/stream-processing-systems/stream-processing/language-stream-apis.md) — Implements functional-style operations to process Java data streams using sequence, reduce, and transduce operations. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Stable Hashing](https://awesome-repositories.com/f/data-databases/hash-tables/custom-hashing-implementations/stable-hashing.md) — Creates consistent hashes for primitives and collections to increase the speed of hashed data lookups. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Parallel Processing](https://awesome-repositories.com/f/data-databases/parallel-processing.md) — Implements parallel data processing by splitting large tasks across available CPU cores using a fork-join model.
- [Transducers](https://awesome-repositories.com/f/data-databases/transducers.md) — Decouples data transformation logic from input sources to process collections without creating intermediate data structures.

### Development Tools & Productivity

- [Interactive REPLs](https://awesome-repositories.com/f/development-tools-productivity/interactive-repls.md) — Ships a programmatic REPL for real-time expression evaluation and library loading without environment restarts.
- [Programmatic REPLs](https://awesome-repositories.com/f/development-tools-productivity/interactive-repls/process-and-repl-lifecycle-tools/programmatic-repls.md) — Evaluates expressions and returns structured data maps containing return values and output streams. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Data Transformation Pipelines](https://awesome-repositories.com/f/development-tools-productivity/data-transformation-pipelines.md) — Implements reusable data transformation pipelines using transducers to process collections without intermediate structures.
- [Parallel Reductions](https://awesome-repositories.com/f/development-tools-productivity/parallel-execution/parallel-reductions.md) — Executes fold and reduce operations across multiple CPU cores using a fork-join model to increase processing speed. ([source](https://github.com/clojure/clojure/blob/master/changes.md))

### Operating Systems & Systems Programming

- [Dynamic Library Loading](https://awesome-repositories.com/f/operating-systems-systems-programming/dynamic-library-loading.md) — Downloads and loads libraries into the active session without restarting the execution environment. ([source](https://github.com/clojure/clojure/blob/master/changes.md))

### Security & Cryptography

- [Safe Data Reading](https://awesome-repositories.com/f/security-cryptography/safe-data-reading.md) — Implements a restricted reader for untrusted sources that prevents arbitrary code evaluation during data parsing. ([source](https://github.com/clojure/clojure/blob/master/changes.md))

### Software Engineering & Architecture

- [Metadata-Based Protocol Implementation](https://awesome-repositories.com/f/software-engineering-architecture/extensibility-patterns/protocol-extensions/metadata-based-protocol-implementation.md) — Implements protocol functions by defining them directly within the metadata of a value. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
- [Protocol-Based Polymorphism](https://awesome-repositories.com/f/software-engineering-architecture/interface-based-polymorphism/protocol-based-polymorphism.md) — Decouples interface definition from implementation by allowing any data type to implement a set of required functions.

### Web Development

- [Persistent Collection Partitioning](https://awesome-repositories.com/f/web-development/api-management-tools/content-static-site-generation/content-collection-managers/collection-manipulation-utilities/collection-partitioning-grouping/persistent-collection-partitioning.md) — Optimizes the partitioning of persistent and algorithmic collections to avoid slow sequential traversal. ([source](https://github.com/clojure/clojure/blob/master/changes.md))
