编辑“︁
Clojure
”︁(章节)
跳转到导航
跳转到搜索
Template:Editnotice load/content
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
==语言概述== {| class="wikitable" ! 版本 ! 发布日期 ! 主要功能/改进 |- | |2007年10月16日<ref>{{cite web |url=https://clojure.blogspot.com/2009/10/clojure-is-two.html |website=BlogSpot.com |title=Clojure is Two! |last=Hickey |first=Rich |date=2007-10-16 |accessdate=2018-11-04 |archive-date=2018-11-04 |archive-url=https://web.archive.org/web/20181104125833/https://clojure.blogspot.com/2009/10/clojure-is-two.html |dead-url=yes }}</ref> |首次公开发布 |- | 1.0 |2009年5月4日<ref>{{cite web |url=https://clojure.blogspot.com/2009/05/clojure-10.html |website=BlogSpot.com |title=Clojure 1.0 |last=Hickey |first=Rich |date=2009-05-04 |accessdate=2018-11-04 |archive-date=2018-11-04 |archive-url=https://web.archive.org/web/20181104125831/https://clojure.blogspot.com/2009/05/clojure-10.html |dead-url=yes }}</ref> |首个稳定版 |- | 1.1 |2009年12月31日<ref>{{cite web |url=https://clojure.blogspot.com/2009/12/clojure-11-release.html |website=BlogSpot.com |title=Clojure 1.1 Release |last=Hickey |first=Rich |date=2009-12-31 |accessdate=2018-11-04 |archive-date=2018-11-04 |archive-url=https://web.archive.org/web/20181104085532/https://clojure.blogspot.com/2009/12/clojure-11-release.html |dead-url=yes }}</ref> |[[future与promise|将来]] |- | 1.2 |2010年8月19日<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/tXll-vxyJpc |website=Google.com |title=Clojure 1.2 Release |last=Hickey |first=Rich |date=2010-08-19 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/tXll-vxyJpc |dead-url=no }}</ref> |协议 |- | 1.3 |2011年9月23日<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/w5Nmx5rPaQs |website=Google.com |title=[ANN] Clojure 1.3 Released |last=Redinger |first=Christopher |date=2011-09-23 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/w5Nmx5rPaQs |dead-url=no }}</ref> |增强对原始类型的支持 |- | 1.4 |2012年4月15日<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/H4f2nbB6gWI |website=Google.com |title=[ANN] Clojure 1.4 Released |last=Dipert |first=Alan |date=2012-04-17 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/H4f2nbB6gWI |dead-url=no }}</ref> |读取器字面量 |- | 1.5 |2013年3月1日<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/kzF5O0Yfdhc |website=Google.com |title=ANN: Clojure 1.5 |last=Halloway |first=Stuart |date=2013-03-01 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/kzF5O0Yfdhc |dead-url=no }}</ref> |归纳器 |- | 1.5.1 |2013年3月10日<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/PDENUpc44lY |website=Google.com |title=Clojure 1.5.1 |last=Halloway |first=Stuart |date=2013-03-10 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/PDENUpc44lY |dead-url=no }}</ref> | 修复内存泄漏 |- | 1.6 |2014年3月25<ref>{{cite web |url=https://groups.google.com/forum/#!topic/clojure/pArFVr0fJ0w |website=Google.com |title=[ANN] Clojure 1.6 |last=Miller |first=Alex |date=2014-03-25 |accessdate=2018-11-03 |archive-date=2011-01-22 |archive-url=http://arquivo.pt/wayback/20110122130054/https://groups.google.com/forum/#!topic/clojure/pArFVr0fJ0w |dead-url=no }}</ref> |Java API、经过改进的哈希算法 |- | 1.7 |2015年6月30日<ref name="release/clojure-17">{{cite web |url=https://clojure.org/news/2015/06/30/clojure-17 |website=Clojure.org |title=Clojure 1.7 is now available |last=Miller |first=Alex |date=2015-06-30 |accessdate=2019-07-08 |archive-date=2019-07-05 |archive-url=https://web.archive.org/web/20190705174148/https://www.clojure.org/news/2015/06/30/clojure-17 |dead-url=yes }}</ref> |变换归纳器、读取器条件表达式 |- | 1.8 |2016年1月19日<ref>{{cite web |url=https://clojure.org/news/2016/01/19/clojure18 |website=Clojure.org |title=Clojure 1.8 is now available |last=Miller |first=Alex |date=2016-01-19 |accessdate=2019-07-08 |archive-date=2019-07-05 |archive-url=https://web.archive.org/web/20190705174156/https://www.clojure.org/news/2016/01/19/clojure18 |dead-url=yes }}</ref> |附加的字符串函数、直接连接、套接字服务器 |- | 1.9 | 2017年12月8日<ref>{{cite web |url=https://clojure.org/news/2017/12/08/clojure19 |website=Clojure.org |title=Clojure 1.9 is now available |last=Miller |first=Alex |date=2017-12-08 |accessdate=2019-07-08 |archive-date=2019-07-05 |archive-url=https://web.archive.org/web/20190705174205/https://www.clojure.org/news/2017/12/08/clojure19 |dead-url=yes }}</ref> |集成spec、命令行工具 |- | 1.10 | 2018年12月17日<ref>{{cite web |url=https://clojure.org/news/2018/12/17/clojure110 |website=Clojure.org |title=Clojure 1.10 release |last=Miller |first=Alex |date=2018-12-17 |accessdate=2018-12-17 |archive-date=2018-12-17 |archive-url=https://web.archive.org/web/20181217174817/https://clojure.org/news/2018/12/17/clojure110 |dead-url=yes }}</ref> |经过改进的错误报告、Java兼容性 |- | 1.10.1 | 2019年6月6日<ref name="release/clojure1-10-1">{{cite web |url=https://clojure.org/news/2019/06/06/clojure1-10-1 |website=Clojure.org |title=Clojure 1.10.1 release |last=Miller |first=Alex |date=2019-06-06 |accessdate=2019-06-08 |archive-date=2019-06-07 |archive-url=https://web.archive.org/web/20190607041919/https://clojure.org/news/2019/06/06/clojure1-10-1 |dead-url=yes }}</ref> |解决Java性能回归问题并改进clojure.main的错误报告 |- | 1.10.2 | {{start date|2021|01|26}}<ref name="release/clojure1-10-2">{{cite web |url=https://clojure.org/news/2021/01/26/clojure1-10-2 |website=Clojure.org |title=Clojure 1.10.2 release |last=Miller |first=Alex |date=2021-01-26 |access-date=2022-01-08 |archive-date=2022-05-07 |archive-url=https://web.archive.org/web/20220507055027/https://clojure.org/news/2021/01/26/clojure1-10-2 }}</ref> | Java互操作性/兼容性改进和其他重要语言修订 |- | 1.10.3 | {{start date|2021|03|04}}<ref name="release/clojure1-10-3">{{cite web |url=https://clojure.org/news/2021/03/04/clojure1-10-3 |website=Clojure.org |title=Clojure 1.10.3 release |last=Miller |first=Alex |date=2021-03-04 |access-date=2022-01-08 |archive-date=2022-04-18 |archive-url=https://web.archive.org/web/20220418025226/https://clojure.org/news/2021/03/04/clojure1-10-3 }}</ref> | prepl支持读者条件 |- | 1.11.0 | {{start date|2022|03|22}}<ref name="release/clojure1-11-0">{{cite web |url=https://clojure.org/news/2022/03/22/clojure-1-11-0 |website=Clojure.org |title=Clojure 1.11.0 release |last=Miller |first=Alex |date=2022-03-22 |access-date=2022-08-27 |archive-date=2022-08-27 |archive-url=https://web.archive.org/web/20220827015901/https://clojure.org/news/2022/03/22/clojure-1-11-0 |dead-url=no }}</ref> | 新的关键字参数调用语法,新的<code>clojure.math</code>名字空间,名字空间别名不用加载,并向<code>clojure.core</code>增加新的帮助函数 |- | {{Version |c |1.11.1}} | {{start date|2022|04|05}}<ref name="release/clojure1-11-1">{{cite web |url=https://clojure.org/news/2022/04/05/clojure-1-11-1 |website=Clojure.org |title=Clojure 1.11.1 release |last=Miller |first=Alex |date=2022-04-05 |access-date=2022-08-27 |archive-date=2022-04-25 |archive-url=https://web.archive.org/web/20220425220239/https://clojure.org/news/2022/04/05/clojure-1-11-1 |dead-url=no }}</ref> | 在类型<code>clojure.lang.Keyword</code>和<code>clojure.lang.ArraySeq</code>的对象的二进制序列化中回滚意外的变更。 |- | colspan=3 | {{Version|l|show=000100}} |} Clojure执行于[[Java平臺|Java平台]]之上,因此,与Java紧密集成并完全支持从Clojure调用[[Java]]代码。<ref name="about/jvm_hosted">{{cite web |url=https://clojure.org/about/jvm_hosted |website=Clojure.org |title=Hosted on the JVM |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200222/https://clojure.org/about/jvm_hosted |dead-url=no }}</ref><ref name="interview/a-z" /> 与此同时,也可以从Java调用Clojure代码。<ref>{{cite web |url=https://clojure.org/reference/java_interop#_calling_clojure_from_java |title=Java Interop |website=Clojure.org |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200629/https://clojure.org/reference/java_interop#_calling_clojure_from_java |dead-url=no }}</ref> Leiningen是社区中普遍使用的项目自动化工具。Leiningen为[[Apache_Maven|Maven]]集成提供支持,处理项目包管理和依赖项。Leiningen的配置使用的则是Clojure语法。<ref>{{cite web |url=https://leiningen.org/ |website=Leiningen.org |title=Leiningen |last=Hagelberg |first=Phil |author2=contributors |access-date=2019-07-07 |archive-date=2019-07-16 |archive-url=https://web.archive.org/web/20190716051300/https://leiningen.org/ |dead-url=no }}</ref> 与其他大多数[[Lisp]]一样,Clojure的语法建立在[[S-表达式]]之上。S-表达式在被编译之前先由读取器解析为数据结构。<ref name="reference/reader">{{cite web |url=https://clojure.org/reference/reader |website=Clojure.org |title=The Reader |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702191942/https://clojure.org/reference/reader |dead-url=no }}</ref><ref name="interview/a-z" /> 除了列表之外,Clojure的读取器还支持[[哈希表|映射]]、集合及[[数组|向量]]等的字面量语法。这些字面量随后会被直接编译成上述数据结构。<ref name="reference/reader" /> Clojure是[[Common_Lisp#函数名字空间|Lisp-1]]且有一套与其它Lisp不兼容的数据结构,因此,Clojure不支持与Lisp的其它方言之间的代码级兼容性。<ref name="reference/lisps" /> 作为一门Lisp方言,[[子程序#函數|函数]]在Clojure中是[[頭等物件|一等公民]]。此外,Clojure还支持[[读取﹣求值﹣输出循环]]以及一套宏系统。<ref name="reference/macros" /> Clojure的[[巨集|Lisp宏]]系统与[[Common Lisp]]的系统极为相似。唯一不同的是,Clojure的[[重音符#編程用途|重音符]](称为语法引用)用[[命名空间|名字空间]]来限定符号。这有助于防止意外的名字捕获,因为Clojure禁止绑定到用名字空间限定的名字(namespace-qualified name)上。如果需要强制捕获宏扩展(capturing macro expansion,)那么就需要显示地完成该过程。Clojure不支持用户定义的读取器宏(reader macro,)但Clojure的读取器支持更具约束力的语法扩展形式。<ref>{{cite web |url=https://github.com/edn-format/edn |website=GitHub.com |title=edn |last=Hickey |first=Rich |access-date=2019-07-07 |archive-date=2019-03-02 |archive-url=https://web.archive.org/web/20190302223145/https://github.com/edn-format/edn/ |dead-url=no }}</ref> Clojure支持[[多分派|多方法]](multimethods。)<ref>{{cite web |url=https://clojure.org/reference/multimethods |website=Clojure.org |title=Multimethods and Hierarchies |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200617/https://clojure.org/reference/multimethods |dead-url=no }}</ref> 对于类似[[介面_(資訊科技)|接口]]的抽象,Clojure提供基于[[协议 (面向对象编程)|协议]]<ref>{{cite web |url=https://clojure.org/reference/protocols |website=Clojure.org |title=Protocols |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200618/https://clojure.org/reference/protocols |dead-url=no }}</ref>的多态性以及基于[[记录]]<ref>{{cite web |url=https://clojure.org/reference/datatypes |website=Clojure.org |title=Datatypes: deftype, defrecord and reify |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200612/https://clojure.org/reference/datatypes |dead-url=no }}</ref>的数据类型系统。 Clojure通过这些设计来提供高性能且动态的多态性以避免所谓的“表达式问题”("expression problem"。) Clojure支持[[惰性求值|惰性序列]],并鼓励[[不可變物件|不可变性]]与持久数据结构(persistent data structure。)Clojure作为一门[[函數程式語言|函数式编程语言]]将重点放在[[递归]]与[[高阶函数]]上而不是基于[[函数副作用|副作用]]的[[迴圈|循环]]流程上。Clojure不支持自动[[尾调用]]优化,因为JVM还不支持该项优化,<ref>{{cite web |url=https://www.youtube.com/watch?v=2y5Pv4yN0b0&t=1h02m18s |title=Stewardship: the Sobering Parts |website=YouTube.com |last=Goetz |first=Brian |date=2014-11-20 |accessdate=2018-11-04 |archive-date=2016-12-19 |archive-url=https://web.archive.org/web/20161219093717/https://www.youtube.com/watch?v=2y5Pv4yN0b0&t=1h02m18s |dead-url=no }}</ref><ref>{{cite web |url=https://blogs.oracle.com/jrose/tail-calls-in-the-vm |website=Oracle.com |title=tail calls in the VM |last=Rose |first=John |date=2007-07-12 |accessdate=2018-11-04 |archive-date=2018-11-04 |archive-url=https://web.archive.org/web/20181104091208/https://blogs.oracle.com/jrose/tail-calls-in-the-vm |dead-url=no }}</ref><ref>{{cite web |url=https://bugs.openjdk.java.net/browse/JDK-6804517 |website=Java.net |title=Some languages need to be able to perform tail calls |last=Rose |first=John |date=2009-02-11 |accessdate=2018-11-04 |archive-date=2018-11-04 |archive-url=https://web.archive.org/web/20181104125822/https://bugs.openjdk.java.net/browse/JDK-6804517 |dead-url=no }}</ref>但是,可以用<code>recur</code>关键字显式地执行该项优化。<ref>{{cite web |url=https://clojure.org/reference/special_forms#recur |website=Clojure.org |title=Special Forms |access-date=2019-07-07 |archive-date=2019-07-02 |archive-url=https://web.archive.org/web/20190702200229/https://clojure.org/reference/special_forms#recur |dead-url=no }}</ref> 对于[[并行计算|并行]]与[[并发计算|并发]]计算,Clojure提供[[软件事务内存]]、<ref>{{cite web |url=https://clojure.org/refs |website=Clojure.org |title=Refs and Transactions |access-date=2019-07-07 |archive-date=2016-01-09 |archive-url=https://web.archive.org/web/20160109195038/http://clojure.org/refs |dead-url=no }}</ref> [[响应式编程|响应式]][[个体为本模型|代理系统]]<ref name="reference/agents" />及基于[[通信顺序进程|通道]]的并发编程。<ref>{{cite web |url=https://clojure.org/news/2013/06/28/clojure-clore-async-channels |website=Clojure.org |title=Clojure core.async Channels |last=Hickey |first=Rich |date=2013-06-28 |accessdate=2019-07-08 |archive-date=2019-07-05 |archive-url=https://web.archive.org/web/20190705174207/https://www.clojure.org/news/2013/06/28/clojure-clore-async-channels |dead-url=no }}</ref> Clojure 1.7引入了读取器条件表达式从而允许在同一名字空间中嵌入Clojure与ClojureScript代码。<ref name="release/clojure-17" /><ref name="reference/reader" /> 变换归纳器的加入则提供了另一种组合变换的方法。变换归纳器可以使高阶函数(如,<code>map</code>和<code>fold</code>)更加抽象从而使之独立于其输入数据源。传统地说,这些函数一般被应用于[[串列_(抽象資料型別)|序列]]上,而变换归纳器允许这些函数被应用于通道上并让用户定义她们自己的变换归纳模型。<ref>{{cite web |url=https://www.youtube.com/watch?v=6mTbuzafcII |website=YouTube.com |title=Transducers |last=Hickey |first=Rich |date=2014-09-17 |accessdate=2018-11-04 |archive-date=2018-10-01 |archive-url=https://web.archive.org/web/20181001184936/https://www.youtube.com/watch?v=6mTbuzafcII |dead-url=no }}</ref><ref>{{cite web |url=https://blog.cognitect.com/blog/2014/8/6/transducers-are-coming |website=Cognitect.com |title=Transducers are Coming |last=Hickey |first=Rich |date=2014-08-06 |accessdate=2019-07-08 |archive-date=2019-07-07 |archive-url=https://web.archive.org/web/20190707234603/http://blog.cognitect.com/blog/2014/8/6/transducers-are-coming |dead-url=no }}</ref><ref>{{cite web |url=https://www.youtube.com/watch?v=4KqUvG8HPYo |website=YouTube.com |title=Inside Transducers |last=Hickey |first=Rich |date=2014-11-20 |accessdate=2018-11-04 |archive-date=2018-12-07 |archive-url=https://web.archive.org/web/20181207203917/https://www.youtube.com/watch?v=4KqUvG8HPYo |dead-url=no }}</ref>
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息