当前位置: 首页 > 科技观察

Clojure1.6正式发布,并发编程语言

时间:2023-03-12 02:23:26 科技观察

Lisp是一门以表现力和强大着称的编程语言,但普遍认为它不适用于一般情况。Clojure是一种在Java?平台上运行的Lisp方言,它改变了这一切。今天,只要有Java虚拟机,您就可以在任何地方利用Lisp的强大功能。作为当今最主流的计算平台JVM,将函数式编程语言引入JVM也是很多人都在尝试的方向,Clojure就是其中之一。Clojure是一种运行在JVM平台上的动态函数式编程语言。它的语法接近LISP语言。JVM平台运行时,会编译成JVM字节码进行计算。Clojure保持了函数式语言的主要特性,如不可变状态、FullLisp风格的宏支持、持久化数据结构等,也可以方便地调用Java类库的API,与Java类库很好地集成。Clojure1.6正式版发布,下载地址:http://clojure.org/downloads本次版本更新如下:1兼容性和依赖性1.1JDK版本更新Clojure现在使用JavaSE1.6构建,并发出需要JavaSE1.6的字节码而不是JavaSE1.5。[CLJ-1268]1.2ASM字节码库的嵌入式版本已经升级到ASM4.1。[CLJ-713]1.3以下功能在Clojure中不再标记为Alpha:Watches-add-watch,remove-watchTransients-transient,persistent!,conj!,assoc!,dissoc!,pop!,disj!异常数据-前信息,前数据承诺-承诺,交付记录-defrecord类型-deftype漂亮打印表-打印表2新功能和改进日志2.1JavaAPI2.2映射解构扩展以支持命名空间键2.3新"some"operations2.4HashingRelatedticketsfordevandregressions:CLJ-1328MakeseveralClojuretestsindependentoforderingCLJ-1331Updateprimi使用Murmur3哈希的向量CLJ-1335为空的PersistentList和LazySeq更新哈希CLJ-1336使哈希混合函数在Clojure中可用CLJ-1338使Murmur3类公开CLJ-1344更新mapHasheq以调用Murmur3算法CLJ-1348添加hash-ordered-coll和hash-unordered-collCLJ-1355恢复符号的缓存哈希码和关键字的(未缓存的)哈希码CLJ-1365为新的集合哈希函数添加类型提示2.5bitopsCLJ-827-unsigned-bit-shift-right2.6clojure.testCLJ-866-test-varsCLJ-1352-修复CLJ-866中的回归3功能增强3.1打印CLJ-908当print-meta为真时打印函数的元数据并删除开头的错误空间。CLJ-937pprintcl格式现在支持比率的E、F和G格式。3.2错误信息CLJ-1248IncludetypeinformationinreflectionwarningmessagesCLJ-1099Ifnon-seq在需要seq的地方传递,错误消息现在是一个带有实例值的ExceptionInfo,可以通过ex-data检索。CLJ-1083修复“munged”函数名称(如a->b)的错误消息报告。CLJ-1056处理更多情况并改进defprotocol定义中错误的错误消息。CLJ-1102更好地处理空堆栈跟踪异常。CLJ-939在顶级ns表单中抛出的异常在没有文件或行号的情况下被报告。3.3文档字符串CLJ-1164修复clojure.instant/validated和其他内部即时函数中的拼写错误。CLJ-1143更正ns宏的文档字符串。CLJ-196澄清文件的值在REPL中未定义。CLJ-1228修复了命名空间和文档字符串中的一些拼写错误。CLJ-835更新defmulti文档以阐明对层次结构参数的期望。CLJ-1304修复文档和评论中的小错别字CLJ-1302Mentionthatkeysandvalsorderareconsistentwithseqorder3.4性能CLJ-858通过删除System.currentTimeMillis提高STM的速度。CLJ-669clojure.java.io/do-copy:将java.nio用于文件提交通过删除不需要的生成的缓存字段来减少协议调用站点的开销。3.5其他修改CLJ-908Makedefault-data-reader-fnset!-ableinREPL,类似于data-readers。CLJ-783使clojure.inspector/inspect-tree在集合上工作。CLJ-896让浏览器url知道xdg-open。CLJ-1160Fixclojure.core.reducers/mapcat不停止减少?值。CLJ-1121->和->>已被重写以使用更广泛的宏集。CLJ-1105clojure.walk现在支持记录。CLJ-949删除了所有不必要的sneakyThrow案例。CLJ-1238允许EdnReader读取foo//(匹配LispReader行为)。CLJ-1264删除_的使用作为Java代码中的var(在Java8中引起警告)。CLJ-394添加记录?谓词。CLJ-1200ArraySeq死代码清理,添加了ArraySeq_short支持。CLJ-1331PrimitivevectorsshouldimplementhasheqandusenewhashalgorithmCLJ-1354MakeAPersistentVector.SubVectorpublicsoothercollectionscanaccessCLJ-1353Makeawtrunheadlessduringthebuildprocess4Bug修复CLJ-1018Makerangeconsistentlyreturninfinitesequenceofstartwithastep0.CLJ-863在0个参数上交错返回()并在1个参数上返回身份。CLJ-1072将旧元数据读取器语法的内部用法更新为新语法。CLJ-1193使bigint和biginteger函数在长范围之外的双精度值上工作。CLJ-1154使Compile.java刷新但不关闭标准输出,因此可以报告错误。CLJ-1161从源jar中删除错误的version.properties。CLJ-1175如果抛出异常,则修复延迟/取消引用的无效行为-现在将在后续调用中重新抛出异常,并且不会进入损坏状态。CLJ-1171修复实例的几个问题?使其在与apply一起使用时保持一致。带有破折号的CLJ-1202Protocolfns可能会被错误地编译成字段访问。CLJ-850添加检查以发出返回类型为double或long(如果有类型提示)的invokePrim。CLJ-1177clojure.java.io文件强制URL破坏了包含UTF-8字符的路径。CLJ-1234接受记录和类型阅读器形式中的空白(类似于数据文字)。CLJ-1233允许**作为有效的符号名称而不触发动态警告。CLJ-1246为带有注释的类添加对clojure.reflect的支持。CLJ-1184Evaling#{do...}或[do...]被视为do特殊形式。CLJ-1090通过Var间接调用函数实例无法清除本地人。CLJ-1076pprint测试在Windows上失败,需要\n。CLJ-766使into-array在更大的类型上与short-array和byte-array一致地工作。CLJ-1285当瞬态创建碰撞节点时,持久操作后违反数据结构不变量。CLJ-1222围绕Long/MIN_VALUE的乘法溢出问题CLJ-1118BigDecimals和其他数字之间不一致的数字比较语义CLJ-1125Clojure在使用动态绑定或STM事务时可能会泄漏servlet容器中的内存。CLJ-1082原始向量的子向量无法减少CLJ-1301Case表达式混合使用hashCode和hasheq,当它们不同时可能会导致丢失大小写匹配。如果调用抛出异常CLJ-983proxy-super不会恢复原始绑定CLJ-1176clojure.repl/sourceerrorswhenread-evalboundto:unknownCLJ-935clojure.string/trim使用与triml和trimr不同的空白定义CLJ-1339Empty原始向量在具有非向量顺序类型的.equals上抛出NPECLJ-1363通过.-在反射情况下进行字段访问不起作用CLJ-944Compiler提供常量集合类型,这些类型与其运行时值不匹配CLJ-1387reduce-kv在大型哈希映射上ignoresreducedresult更多更新信息请看发布说明