Skip to content

Commit

Permalink
1.6 changes, courtesy Alex Miller
Browse files Browse the repository at this point in the history
  • Loading branch information
stuarthalloway committed Nov 7, 2013
1 parent 249479e commit 234b0f7
Showing 1 changed file with 141 additions and 0 deletions.
141 changes: 141 additions & 0 deletions changes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,146 @@
<!-- -*- mode: markdown ; mode: visual-line ; coding: utf-8 -*- -->

# Changes to Clojure in Version 1.6

## CONTENTS

## 1 Deprecated and Removed Features

None.

## 2 New and Improved Features

### 2.1 Java API

The clojure.api package provides a minimal interface to bootstrap Clojure access from other JVM languages. It does this by providing:
1. The ability to use Clojure's namespaces to locate an arbitrary var, returning the var's clojure.lang.IFn interface.
2. A convenience method read for reading data using Clojure's edn reader

IFns provide complete access to Clojure's APIs. You can also access any other library written in Clojure, after adding either its source or compiled form to the classpath.

The public Java API for Clojure consists of the following classes and interfaces:
* clojure.api.API
* clojure.lang.IFn

All other Java classes should be treated as implementation details, and applications should avoid relying on them.

To lookup and call a Clojure function:

IFn plus = API.var("clojure.core", "+");
plus.invoke(1, 2);

Functions in clojure.core are automatically loaded. Other namespaces can be loaded via require:

IFn require = API.var("clojure.core", "require");
require.invoke(API.read("clojure.set"));

IFns can be passed to higher order functions, e.g. the example below passes plus to read:

IFn map = API.var("clojure.core", "map");
IFn inc = API.var("clojure.core", "inc");
map.invoke(inc, API.read("[1 2 3]"));

Most IFns in Clojure refer to functions. A few, however, refer to non-function data values. To access these, use deref instead of fn:

IFn printLength = API.var("clojure.core", "*print-length*");
API.var("clojure.core", "deref").invoke(printLength);

### 2.2 JDK and Dependency Version Updates

Clojure now builds with Java SE 1.6 and emits bytecode requiring Java SE 1.6 instead of Java SE 1.5. [CLJ-1268]

### 2.3 Printing

* [CLJ-908](http://dev.clojure.org/jira/browse/CLJ-908)
Print metadata for functions when *print-meta* is true and remove errant space at beginning.
* [CLJ-937](http://dev.clojure.org/jira/browse/CLJ-937)
pprint cl-format now supports E, F, and G formats for ratios.

### 2.4 Other improvements

* [CLJ-908](http://dev.clojure.org/jira/browse/CLJ-908)
Make *default-data-reader-fn* set!-able in REPL, similar to *data-readers*.
* [CLJ-783](http://dev.clojure.org/jira/browse/CLJ-783)
Make clojure.inspector/inspect-tree work on sets.
* [CLJ-896](http://dev.clojure.org/jira/browse/CLJ-896)
Make browse-url aware of xdg-open.
* [CLJ-1160](http://dev.clojure.org/jira/browse/CLJ-1160)
Fix clojure.core.reducers/mapcat does not stop on reduced? values.
* [CLJ-1121](http://dev.clojure.org/jira/browse/CLJ-1121)
-> and ->> have been rewritten to work with a broader set of macros.

## 3 Improved error messages

* [CLJ-1099](http://dev.clojure.org/jira/browse/CLJ-1099)
If non-seq passed where seq is needed, error message now is an ExceptionInfo with the instance value, retrievable via ex-data.
* [CLJ-1083](http://dev.clojure.org/jira/browse/CLJ-1083)
Fix error message reporting for "munged" function names (like a->b).
* [CLJ-1056](http://dev.clojure.org/jira/browse/CLJ-1056)
Handle more cases and improve error message for errors in defprotocol definnitions.
* [CLJ-1102](http://dev.clojure.org/jira/browse/CLJ-1102)
Better handling of exceptions with empty stack traces.

## 4 Improved documentation strings

* [CLJ-1164](http://dev.clojure.org/jira/browse/CLJ-1164)
Fix typos in clojure.instant/validated and other internal instant functions.
* [CLJ-1143](http://dev.clojure.org/jira/browse/CLJ-1143)
Correct doc string for ns macro.
* [CLJ-196](http://dev.clojure.org/jira/browse/CLJ-196)
Clarify value of *file* is undefined in the REPL.
* [CLJ-1228](http://dev.clojure.org/jira/browse/CLJ-1228)
Fix a number of spelling errors in namespace and doc strings.
* [CLJ-835](http://dev.clojure.org/jira/browse/CLJ-835)
Update defmulti doc to clarify expectations for hierarchy argument.

## 5 Bug Fixes

* [CLJ-1018](http://dev.clojure.org/jira/browse/CLJ-1018)
Make range consistently return () with a step of 0.
* [CLJ-863](http://dev.clojure.org/jira/browse/CLJ-863)
Make interleave return () on 0 args and identity on 1 args.
* [CLJ-1072](http://dev.clojure.org/jira/browse/CLJ-1072)
Update internal usages of the old metadata reader syntax to new syntax.
* [CLJ-1193](http://dev.clojure.org/jira/browse/CLJ-1193)
Make bigint and biginteger functions work on double values outside long range.
* [CLJ-1154](http://dev.clojure.org/jira/browse/CLJ-1154)
Make Compile.java flush but not close stdout so errors can be reported.
* [CLJ-1161](http://dev.clojure.org/jira/browse/CLJ-1161)
Remove bad version.properties from sources jar.
* [CLJ-1175](http://dev.clojure.org/jira/browse/CLJ-1175)
Fix invalid behavior of Delay/deref if an exception is thrown - exception will now be rethrown on subsequent calls and not enter a corrupted state.
* [CLJ-1171](http://dev.clojure.org/jira/browse/CLJ-1171)
Fix several issues with instance? to make it consistent when used with apply.
* [CLJ-1202](http://dev.clojure.org/jira/browse/CLJ-1202)
Protocol fns with dashes may get incorrectly compiled into field accesses.
* [CLJ-850](http://dev.clojure.org/jira/browse/CLJ-850)
Add check to emit invokePrim with return type of double or long if type-hinted.
* [CLJ-1177](http://dev.clojure.org/jira/browse/CLJ-1177)
clojure.java.io URL to File coercion corrupts path containing UTF-8 characters.
* [CLJ-1234](http://dev.clojure.org/jira/browse/CLJ-1234)
Accept whitespace in Record and Type reader forms (similar to data literals).
* [CLJ-1233](http://dev.clojure.org/jira/browse/CLJ-1233)
Allow ** as a valid symbol name without triggering dynamic warnings.
* [CLJ-1246](http://dev.clojure.org/jira/browse/CLJ-1246)
Add support to clojure.reflect for classes with annotations.
* [CLJ-1184](http://dev.clojure.org/jira/browse/CLJ-1184)
Evaling #{do ...} or [do ...] is treated as do special form.
* [CLJ-1125](http://dev.clojure.org/jira/browse/CLJ-1125)
Clojure can leak memory in a servlet container when using dynamic bindings or STM transactions.
* [CLJ-1090](http://dev.clojure.org/jira/browse/CLJ-1090)
Indirect function calls through Var instances fail to clear locals.
* [CLJ-1076](http://dev.clojure.org/jira/browse/CLJ-1076)
pprint tests fail on Windows, expecting \n.
* [CLJ-766](http://dev.clojure.org/jira/browse/CLJ-766)
Make into-array work consistently with short-array and byte-array on bigger types.
* [CLJ-1285](http://dev.clojure.org/jira/browse/CLJ-1285)
Data structure invariants are violated after persistent operations when collision node created by transients.


## 6 Compatibility Notes

None.

# Changes to Clojure in Version 1.5.1

* fix for leak caused by ddc65a96fdb1163b
Expand Down

0 comments on commit 234b0f7

Please sign in to comment.