clojure开始使用clojure


备注

在此处输入图像描述

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

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

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

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

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

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

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

版本

更改日志发布日期
1.8 最新更改日志 2016年1月19日
1.7 更改日志1.7 二零一五年六月三十零日
1.6 更改日志1.6 2014年3月25日
1.5.1 更改日志1.5.1 2013年3月10日
1.4 更改日志1.4 2012-04-15
1.3 更改日志1.3 2011-09-23
1.2.1 2011-03-25
1.2 2010-08-19
1.1 2010-01-04
1.0 2009-05-04

“你好,世界!”在REPL中

Clojure社区非常重视交互式开发,因此与Clojure的很多交互都发生在REPL(read-eval-print-loop)中 。当您在其中输入表达式时,Clojure 会读取它, 对其进行评估 ,并在循环中 打印评估结果。

您现在应该能够启动Clojure REPL。如果您不知道如何操作,请按照本主题中的“ 安装和设置”部分进行操作。运行后,输入以下内容:

(println "Hello, world!")
 

然后按Enter键 。这应该打印出Hello, world! ,然后是这个表达式的返回值, nil

如果你想立即运行一些clojure,请尝试在线REPL。例如http://www.tryclj.com/

“你好,世界!”使用Boot

注意:在尝试此示例之前,您需要安装Boot。如果尚未安装,请参阅“ 安装和设置”部分。

Boot允许使用shebang (#!)行生成可执行的Clojure文件。将以下文本放入您选择的文件中(此示例假定它位于“当前工作目录”中,并命名为hello.clj )。

#!/usr/bin/env boot

(defn -main [& args]
  (println "Hello, world!"))
 

然后将其标记为可执行文件(如果适用,通常通过运行chmod +x hello.clj )。
...并运行它( ./hello.clj )。

该程序应输出“Hello,world!”并完成。

创建一个新的应用程序

按照上述说明并安装Leiningen后,运行以下命令启动新项目:

lein new <project-name>
 

这将使用<project-name> 文件夹中的默认Leiningen模板设置Clojure项目。 Leiningen有几个模板,它们会影响项目的结构。最常见的是使用的模板“app”,它添加了一个main-function并准备将项目打包到jar文件中(main函数是应用程序的入口点)。这可以通过运行来实现:

lein new app <project-name> 
 

假设您使用app-template创建新应用程序,您可以通过输入创建的目录并使用以下命令运行应用程序来测试所有设置是否正确:

lein run
 

如果你看到Hello, World! 在您的控制台上,您已准备好并准备开始构建应用程序。

您可以使用以下命令将此简单应用程序打包到两个jar文件中:

lein uberjar
 

创建一个新的应用程序(启动)

boot -d seancorfield/boot-new new -t app -n <appname>
 

此命令将告诉boot从https://github.com/seancorfield/boot-new获取任务boot-new 并使用app 模板执行任务(请参阅其他模板的链接)。该任务将创建一个名为<appname> 的新目录,其中包含典型的Clojure应用程序结构。有关更多信息,请参阅生成的自述文件。

要运行应用程序: boot run 。其他命令在build.boot 中指定,并在README中进行了描述。

安装和设置

选项1: 莱宁根

需要JDK 6或更高版本。

开始使用Clojure的最简单方法是下载并安装Leiningen,这是管理Clojure项目的事实标准工具,然后运行lein repl 打开REPL

Linux的

curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein > ~/bin/lein
export PATH=$PATH:~/bin
chmod 755 ~/bin/lein

OS X.

按照上面的Linux步骤或使用macOS包管理器安装。

Homebrew安装

brew install leiningen

使用MacPorts安装

首先安装Clojure

sudo port -R install clojure

安装Leiningen ,Clojure的构建工具

sudo port -R install leiningen
lein self-install

视窗

请参阅官方文档

选项2: 官方分发

需要JRE 6或更高版本。

Clojure版本作为要在JVM上运行的简单JAR文件发布。这通常发生在Clojure构建工具中。

  1. 访问http://clojure.org并下载最新的Clojure存档

  2. 将下载的ZIP文件解压缩到您选择的目录中

  3. 在该目录中运行java -cp clojure-1.8.0.jar clojure.main

    您可能必须将该命令中的clojure-1.8.0.jar 替换为您实际下载的JAR文件的名称。

    为了获得更好的命令行REPL体验(例如,循环使用以前的命令),您可能需要安装rlwrap rlwrap java -cp clojure-1.8.0.jar clojure.main

选项3: 启动

需要JDK 7或更高版本。

Boot是一个多功能的Clojure构建工具。理解它需要一些Clojure的知识,所以它可能不是初学者的最佳选择。有关安装说明,请参阅网站 (单击“开始” )。

一旦安装并在PATH ,您可以在任何地方运行boot repl 以启动Clojure REPL。