Lisp is a programming language known for its expressiveness and power of functionality, but it is generally considered unsuitable for general use. Clojure is a Java™The appearance of the Lisp dialect on the platform has completely changed this situation. Nowadays, you can use the powerful functions of Lisp wherever you have a Java virtual machine.
As the most popular computing platform JVM today, introducing functional programming languages into JVM is also a target of many attempts. Clojure is one of them. Clojure is a dynamic functional programming language running on the JVM platform. Its syntax is similar to the LISP language. When running on the JVM platform, Clojure is compiled into the JVM bytecode for calculation.
Clojure maintains the main features of functional languages, such as immutable state, Full Lisp-style macro support, and persistent data structures. It can also conveniently call Java class library APIs, well integrated with Java class libraries.
Clojure 1.6 official release,: http://clojure.org/downloads
The updated version is as follows:
1. Compatibility and dependency
1.1 JDK version update
Clojure now builds with Java SE 1.6 and emits bytecode requiring Java SE 1.6 instead of Java SE 1.5. [CLJ-1268]
1.2 ASM database update
The embedded version of the ASM bytecode library has been upgraded to ASM 4.1. [CLJ-713]
1.3 improve the "Alpha" feature
The following features are no longer marked Alpha in Clojure:
-
Watches-add-watch, remove-watch
-
Transients-transient, persistent !, Conj !, Assoc !, Dissoc !, Pop !, Disj!
-
Exception data-ex-info, ex-data
-
Promises-promise, deliver
-
Records-defrecord
-
Types-deftype
-
Pretty-print tables-print-table
2 new features and improvement records 2.1 Java API
2.2 Map destructuring extended to support namespaced keys
2.3 New "some" operations
2.4 Hashing
Related tickets for dev and regressions:
-
CLJ-1328Make several Clojure tests independent of ordering
-
CLJ-1331Update primitive vectors to use Murmur3 hash
-
CLJ-1335Update hash for empty PersistentList and LazySeq
-
CLJ-1336Make hashing mixing functions available in Clojure
-
CLJ-1338Make Murmur3 class public
-
CLJ-1344Update mapHasheq to call Murmur3 algorithm
-
CLJ-1348Add hash-ordered-coll and hash-unordered-coll
-
CLJ-1355Restore cached hashCode for Symbol and (uncached) hashCode for Keyword
-
CLJ-1365Add type hints for new collection hash functions
2.5 bitops
2.6 clojure. test
3 function enhancement 3.1 Printing
-
CLJ-908Print metadata for functions whenPrint-metaIs true and remove errant space at beginning.
-
CLJ-937pprint cl-format now supports E, F, and G formats for ratios.
3.2 error message
-
CLJ-1248Include type information in reflection warning messages
-
CLJ-1099If non-seq passed where seq is needed, error message now is an ExceptionInfo with the instance value, retrievable via ex-data.
-
CLJ-1083Fix error message reporting for "munged" function names (like a-> B ).
-
CLJ-1056Handle more cases and improve error message for errors in defprotocol definitions.
-
CLJ-1102Better handling of exceptions with empty stack traces.
-
CLJ-939Exceptions thrown in the top level ns form are reported without file or line number.
3.3 document string
-
CLJ-1164Fix typos in clojure. instant/validated and other internal instant functions.
-
CLJ-1143Correct doc string for ns macro.
-
CLJ-196Clarify valueFileIs undefined in the REPL.
-
CLJ-1228Fix a number of spelling errors in namespace and doc strings.
-
CLJ-835Update defmulti doc to clarify expectations for hierarchy argument.
-
CLJ-1304Fix minor typos in documentation and comments
-
CLJ-1302Mention that keys and vals order are consistent with seq order
3.4 Performance
-
CLJ-858Improve speed of STM by removing System. currentTimeMillis.
-
CLJ-669clojure.java.io/do-copy: use java. nio for Files
-
CommitReduce overhead of protocol callsites by removing unneeded generated cache fields.
3.5 Other improvements
-
CLJ-908MakeDefault-data-reader-fnSet! -Able in REPL, similarData-readers.
-
CLJ-783Make clojure. inspector/inspect-tree work on sets.
-
CLJ-896Make browse-url aware of xdg-open.
-
CLJ-1160Fix clojure. core. reducers/mapcat does not stop on CED Ced? Values.
-
CLJ-1121-> and-> have been rewritten to work with a broader set of macros.
-
CLJ-1105clojure.walk now supports records.
-
CLJ-949Removed all unnecessary cases of sneakyThrow.
-
CLJ-1238Allow EdnReader to read foo // (matches LispReader behavior ).
-
CLJ-1264Remove uses of _ as a var in the Java code (causes warning in Java 8 ).
-
CLJ-394Add record? Predicate.
-
CLJ-1200ArraySeq dead code cleanup, ArraySeq_short support added.
-
CLJ-1331Primitive vectors shocould implement hasheq and use new hash algorithm
-
CLJ-1354Make APersistentVector. SubVector public so other collections can access
-
CLJ-1353Make awt run headless during the build process
4 Bug fixes
-
CLJ-1018Make range consistently return infinite sequence of start with a step of 0.
-
CLJ-863Make interleave return () on 0 args and identity on 1 args.
-
CLJ-1072Update internal usages of the old metadata reader syntax to new syntax.
-
CLJ-1193Make bigint and biginteger functions work on double values outside long range.
-
CLJ-1154Make Compile. java flush but not close stdout so errors can be reported.
-
CLJ-1161Remove bad version. properties from sources jar.
-
CLJ-1175Fix invalid behavior of Delay/deref if an exception is thrown-exception will now be rethrown on subsequent CILS and not enter a wrong upted state.
-
Is the CLJ-1171Fix several issues with instance? To make it consistent when used with apply.
-
CLJ-1202Protocol fns with dashes may get incorrectly compiled into field accesses.
-
CLJ-850Add check to emit invokePrim with return type of double or long if type-hinted.
-
CLJ-1177clojure.java.io URL to File coercion extends upts path ining UTF-8 characters.
-
CLJ-1234Accept whitespace in Record and Type reader forms (similar to data literals ).
-
CLJ-1233Allow ** as a valid symbol name without triggering dynamic warnings.
-
CLJ-1246Add support to clojure. reflect for classes with annotations.
-
CLJ-1090Indirect function callthrough Var instances fail to clear locals.
-
CLJ-1076pprint tests fail on Windows, expecting \ n.
-
CLJ-766Make into-array work consistently with short-array and byte-array on bigger types.
-
CLJ-1285Data structure invariants are violated after persistent operations when collision node created by transients.
-
CLJ-1222Multiplication overflow issues around Long/MIN_VALUE
-
CLJ-1118Inconsistent numeric comparison semantics between BigDecimals and other numerics
-
CLJ-1125Clojure can leak memory in a servlet container when using dynamic bindings or STM transactions.
-
CLJ-1082Subvecs of primitve vectors cannot be effecced
-
CLJ-1301Case expressions use a mixture of hashCode and hasheq, potentially leading to missed case matches when these differ.
-
CLJ-983proxy-super does not restore original binding if call throws exception
-
CLJ-1176clojure.repl/source errors whenRead-evalBound to: unknown
-
CLJ-935clojure.string/trim uses different definition of whitespace than triml and trimr
-
CLJ-1058StackOverflowError on exception in performancef for PersistentHashMap fold
-
CLJ-1328Fix some tests in the Clojure test suite to make their names unique and independent of hashing order
-
CLJ-1339Empty primitive vectors throw NPE on. equals with non-vector sequential types
-
CLJ-1363Field access via.-in reflective case does not work
-
CLJ-944Compiler gives constant collections types which mismatch their runtime values
-
CLJ-1387reduce-kv on large hash maps ignores reduced result
For more updates, see release notes.