开始使用 clojure

StackOverflow 文档

Clojure 是一种带有 Lisp 语法的动态类型的通用编程语言。

它的功能默认支持具有一流函数和不可变值的编程功能样式。在 Clojure 中使用可重新分配的变量并不像许多主流语言那样容易,因为必须像容器对象一样创建和更新变量。这鼓励使用纯粹的值,这些值将保持它们最后一次出现的那一刻。这通常使代码更具可预测性,可测试性和并发性。这也适用于集合,因为 Clojure 的内置数据结构是持久的。

为了提高性能,Clojure 支持类型提示,以尽可能消除不必要的反射。此外,可以对瞬态版本执行对持久集合的更改组,从而减少所涉及的对象数量。这在大多数情况下不是必需的,因为持久集合快速复制,因为它们共享大部分数据。他们的表现保证离他们可变的同行不远。

除了其他功能,Clojure 还具有:

  • 软件事务存储器(STM)
  • 几个不涉及手动锁定的并发原语(atom, agent)
  • 可组合序列变换器(传感器),
  • 功能树操作设施(拉链)

由于其简单的语法和高可扩展性(通过宏,核心接口和反射的实现),一些常见的语言功能可以添加到 Clojure 与库。例如,core.typed 带来了一个静态类型检查器,core.async 带来了简单的基于通道的并发机制,core.logic 带来了逻辑编程。

它设计为托管语言,可与其运行的平台互操作。虽然主要目标是 JVM 和 Java 背后的整个生态系统,但替代实现也可以在其他环境中运行,例如在公共语言运行时运行的 ClojureCLR 或在 JavaScript 运行时(包括 Web 浏览器)上运行的 ClojureScript。虽然替代实现可能缺少 JVM 版本的某些功能,但它们仍被视为一类语言。