|
1 | 1 | <!-- -*- mode: markdown ; mode: visual-line ; coding: utf-8 -*- --> |
2 | 2 |
|
| 3 | +# Changes to Clojure in Version 1.12.4 |
| 4 | + |
| 5 | +* [CLJ-2924](https://clojure.atlassian.net/browse/CLJ-2924) - LazySeq - fix visibility issues with non-volatile reads |
| 6 | + |
| 7 | +# Changes to ClojureCLR in Version 1.12.4 |
| 8 | + |
| 9 | +* [CLJCLR-181](https://clojure.atlassian.net/browse/CLJCLR-181) - Fix handling of a primitive type hint on the var name for a defn . |
| 10 | +* [CLJCLR-183](https://clojure.atlassian.net/browse/CLJCLR-183) - Fix NullReferenceException that sometimes occurs in printing a stack trace. |
| 11 | +* [CLJCLR-185](https://clojure.atlassian.net/browse/CLJCLR-185) - Change lookup directory for Clojure.Source.dll to be the same as for the spec.alpha dlls. |
| 12 | +* [CLJCLR-186](https://clojure.atlassian.net/browse/CLJCLR-186) - Fix parsing of dotnet version when version is release candidate or other preview |
| 13 | +* [CLJCLR-187](https://clojure.atlassian.net/browse/CLJCLR-187) - Include .NET 10 as a target framework |
| 14 | +* [CLJCLR-188](https://clojure.atlassian.net/browse/CLJCLR-188) - Fix sort-by to work with IComparable |
| 15 | +* [CLJCLR-190](https://clojure.atlassian.net/browse/CLJCLR-190) - Allow RT.classForName to look up non-public types (fix a regression) |
| 16 | +* [CLJCLR-189](https://clojure.atlassian.net/browse/CLJCLR-189) - Make clojure.core.Num throw an Exception on non-numeric types. (Better match to JVM behavior.) |
| 17 | +* [CLJCLR-191](https://clojure.atlassian.net/browse/CLJCLR-191) - PersistentVector.TransientVector should implement IFn.invoke(object arg1) |
| 18 | + |
| 19 | +## Type specification and Loading |
| 20 | + |
| 21 | +A significant change was made to the type specification language. Instead of having to type `|System.Collections.Generic.Dictionary``2[System.String, System.Collections.List``1[System.Int64]]|`, |
| 22 | +one can now declare type aliases and also use special type names such as `int` as generic type arguments. |
| 23 | +By declaring type aliases |
| 24 | + |
| 25 | +```clojure |
| 26 | +(alias-type Dictionary |System.Collections.Generic.Dictionary`2|) |
| 27 | +(alias-type List |System.Collections.Generic.List`1|) |
| 28 | +(alias-type IntList |List[int]|) |
| 29 | +``` |
| 30 | + |
| 31 | +one can refer to types in this way: |
| 32 | + |
| 33 | +```clojure |
| 34 | +|Dictionary[String, List<long>]| |
| 35 | +|Dictionary[String, IntList]| |
| 36 | +``` |
| 37 | + |
| 38 | +and create expressions such as |
| 39 | + |
| 40 | +```clojure |
| 41 | +(def my-list (IntList/new)) |
| 42 | +(IntList/.Add my-list 42) |
| 43 | +``` |
| 44 | + |
| 45 | +In addition, changes were made to improve discovery of assemblies that should be checked and automatically loaded when looking up types. |
| 46 | +The `DependencyContext` class is used to find the entry assembly's dependencies. We also discover assemblies that are part of the shared |
| 47 | +.NET runtime via `AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES")`. |
| 48 | + |
| 49 | +Note that the `AppContext.GetData` is not available on Framework 4.6.2. A build for Framework 4.8.1 was added -- if you want to take advantage of the improved assembly discovery under .NET Framework, you will have to move to that version. |
| 50 | + |
| 51 | +Details are available in the blog post [Typename syntax and resolution in ClojureCLR](https://dmiller.github.io/clojure-clr-next/general/2025/09/21/typename-syntax-and-resolution.html). |
| 52 | + |
| 53 | + |
| 54 | +# Changes to Clojure in Version 1.12.3 |
| 55 | + |
| 56 | +* [CLJ-2919](https://clojure.atlassian.net/browse/CLJ-2919) - Compiler - fix nested compilation emitting for keyword and protocol call sites |
| 57 | + |
3 | 58 | # Changes to Clojure in Version 1.12.2 |
4 | 59 |
|
5 | 60 | * [CLJ-2914](https://clojure.atlassian.net/browse/CLJ-2914) - Compiler - syntax error if qualified instance method expression is missing instance |
|
0 commit comments