You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There are many useful tools you can use at development time, but which are not part of your project's actual dependencies. The Clojure CLI provides explicit support for [tools](https://clojure.org/reference/clojure_cli#tool_install) with their own classpath, but there was not previously a way to invoke these interactively.
64
+
There are many useful tools you can use at development time, but which are not part of your project's actual dependencies. The Clojure CLI provides explicit support for [tools](https://clojure.org/reference/clojure_cli#tools) with their own classpath, but there was not previously a way to invoke these interactively.
65
65
66
66
Clojure now includes [clojure.tools.deps.interop/invoke-tool](https://clojure.github.io/clojure/branch-master/clojure.tools.deps.interop-api.html#clojure.tools.deps.interop/invoke-tool) to invoke a tool function out of process. The classpath for the tool is defined in deps.edn and you do not need to add the tool's dependencies to your project classpath.
67
67
68
68
`add-lib` functionality is built using `invoke-tool` but you can also use it to build or invoke your own tools for interactive use. Find more about the function execution protocol on the [CLI reference](https://clojure.org/reference/clojure_cli#function_protocol).
@@ -76,7 +76,7 @@ For a long time, we've had the `clojure.java.shell` namespace, but over time Jav
76
76
*[start](https://clojure.github.io/clojure/branch-master/clojure.java.process-api.html#clojure.java.process/start) - full control over streams with access to the underlying Java objects for advanced usage
77
77
*[exec](https://clojure.github.io/clojure/branch-master/clojure.java.process-api.html#clojure.java.process/exec) - covers the common case of executing an external process and returning its stdout on completion
@@ -102,7 +102,7 @@ Qualified method invocations with [param-tags](#26-param-tags-metadata) use only
102
102
103
103
Note: Static fields are values and should be referenced without parens unless they are intended as function calls, e.g `(System/out)` should be `System/out`. Future Clojure releases will treat the field's value as something invokable and invoke it.
@@ -130,7 +130,7 @@ Java programs define "functions" with Java functional interfaces (marked with th
130
130
131
131
Clojure developers can now invoke Java methods taking functional interfaces by passing functions with matching arity. The Clojure compiler implicitly converts Clojure functions to the required functional interface by constructing a lambda adapter. You can explicitly coerce a Clojure function to a functional interface by hinting the binding name in a `let` binding, e.g. to avoid repeated adapter construction in a loop, e.g. `(let [^java.util.function.Predicate p even?] ...)`.
*[CLJ-2726](https://clojure.atlassian.net/browse/CLJ-2726)`#uuid` data reader - Fix exception on invalid input so it flows through reader
183
183
*[CLJ-2813](https://clojure.atlassian.net/browse/CLJ-2813) anonymous function arg reader - no longer accepts invalid arg symbols
184
184
*[CLJ-2843](https://clojure.atlassian.net/browse/CLJ-2843) Reflective calls to Java methods that take primitive long or double now work when passed a narrower boxed number at runtime (Integer, Short, Byte, Float). Previously, these methods were not matched during reflection and an error was thrown.
185
+
*[CLJ-2145](https://clojure.atlassian.net/browse/CLJ-2145) - Fix clearing of closed overs in `^:once` fns
186
+
*[CLJ-2317](https://clojure.atlassian.net/browse/CLJ-2317) - `recur` to head of `:once` fn cancels once
* Make debug runs of Clojure.Main and Clojure.Main461 turn direct linking on
218
+
* Make Compiler.load dynamically bind the same Vars as Compiler.Compile
219
+
* Enable BinaryFormatter for .NET 9 version
220
+
* Upgrade to C# Version 12
221
+
* Use explicit netX.0 TargetFrameworks rather thatn netstandard2.1 in projects
222
+
* Fix numbers test for casting that broke due to breaking change in .NET 9
223
+
* Add hinting to remove some type reflection warnings in clojure.core
224
+
* Code changes to handle generic type-args more consistently
225
+
* Allow signature hints to contain (type-args ...)
226
+
* Add tests for generic method calls
227
+
* Add project to provide C# classes supporting tests in Clojure.Tests
228
+
* Remove build support for .NET 7; make .NET 8 the default for testing, etc.
229
+
* Fix passing of static/instance flag to MaybeReflectionWarn
230
+
* Add processing of (type-args ...) to the new use of QualifiedMethodExpr
231
+
* Modify error message being tested for in test_clojure/errors.clj
232
+
* Replace clojure.java.io with clojure.clr.io in core-namespaces variable in main.clj
233
+
* Fix reflection warning in test_helper
234
+
* Add method for structured print-out of a PersistentHashMap tree -- for debugging purposes only
235
+
* Fix PersistentQueue.SyncRoot
236
+
* Fix edge cases for BigDecimal/Rescale in certain rounding modes
237
+
* Fix reflection warning in process.clj (extra constructor in .NET 8)
238
+
* Add support for .NET 8.0, drop support for coreapp3.1
239
+
* Fix clojure.clr.process/null-file to work with Framework 4.x
240
+
* Add tests for clojure.clr.io/as-file, as-dir, file-info, dir-info
241
+
* Replace Path/Join (not in Framework) with Path/Combine and replace DirInfo with DirectoryInfo (tag in clojure.clr.io Coercions)
242
+
* Add some type hints for the return types of new functions in clojure.clr.io
243
+
* Tweak PeristentHashMap to have proper value for edit field in Transient operation
244
+
* During default type loading for namespaces, skip an assembly if we cannot access its types
245
+
* Conditional compilation for a few methods in math.clj that are not in earlier frameworks
246
+
247
+
*[CLJCLR-167](https://clojure.atlassian.net/browse/CLJCLR-167) - Reflector.GetMethods should filter for generic methods with the appropriate number of type-args
248
+
*[CLJCLR-168](https://clojure.atlassian.net/browse/CLJCLR-168) - Fix second error message in Reflector.InvokeMatchingMethod to say 'static' or 'instance', depending
249
+
*[CLJCLR-170](https://clojure.atlassian.net/browse/CLJCLR-170) - Fix syntax-quote on imported typename (should use Type.FullName)
250
+
*[CLJCLR-169](https://clojure.atlassian.net/browse/CLJCLR-169) - include [ as a charcter triggering full ClrTypeSpec resolution
251
+
*[CLJCLR-166](https://clojure.atlassian.net/browse/CLJCLR-166) - Loading of core.clj and related should use direct linking
252
+
*[CLJCLR-165](https://clojure.atlassian.net/browse/CLJCLR-165) - Improve error message when no type-args supplied to generic method invocation
253
+
*[CLJCLR-143](https://clojure.atlassian.net/browse/CLJCLR-143) - ensure pr-str prints metadata for maps when *print-meta is true
254
+
*[CLJCLR-164](https://clojure.atlassian.net/browse/CLJCLR-164) - Change value of dotnet-version to be a map holding the component, :major, :mintor:incremental
255
+
*[CLJCLR-162](https://clojure.atlassian.net/browse/CLJCLR-162) - make printing of StackFrame show the actual declaring method
256
+
*[CLJCLR-159](https://clojure.atlassian.net/browse/CLJCLR-159) - Fix error in clojure.core/subseq (typo in host call method name in mk-bound-fn
257
+
*[CLJCLR-158](https://clojure.atlassian.net/browse/CLJCLR-158) - Improve error reporting for file not found on load
258
+
*[CLJCLR-157](https://clojure.atlassian.net/browse/CLJCLR-157) - make RT.GetFindFilePaths filter out null or empty pathnames
259
+
*[CLJCLR-153](https://clojure.atlassian.net/browse/CLJCLR-153) - make sys-action properly handle no type-args
*[CLJCLR-155](https://clojure.atlassian.net/browse/CLJCLR-155) - find \<namespace\>.cljr embedded resource in loaded assemblies
262
+
*[CLJCLR-156](https://clojure.atlassian.net/browse/CLJCLR-156) - enhance gen-delegate to type hint formal parameters
263
+
*[CLJCLR-152](https://clojure.atlassian.net/browse/CLJCLR-152) - fix reflection errors in clojure/repl.clj
264
+
*[CLJCLR-150](https://clojure.atlassian.net/browse/CLJCLR-150) - Make Printf (used by format) print booleans with lowercase
265
+
*[CLJCLR-149](https://clojure.atlassian.net/browse/CLJCLR-149) - fix 2-arg clojure.string/split == more regular expression variation
266
+
*[CLJCLR-147](https://clojure.atlassian.net/browse/CLJCLR-147) - set :file metadata on Vars to have relative paths, not absolute paths to match Clojure(JVM)
267
+
*[CLJCLR-148](https://clojure.atlassian.net/browse/CLJCLR-148) - Make return tags on defn signatures have fully qualified type name symbols, i.e., System.String instead of just String
268
+
*[CLJCLR-133](https://clojure.atlassian.net/browse/CLJCLR-133) - Fix semantics of clojure.clr.io/as-file. It continues to return a FileInfo. Add as-dir to return a DirectoryInfo object.
269
+
*[CLJCLR-145](https://clojure.atlassian.net/browse/CLJCLR-145) - Fix (symbol :keyword) failure -- make Keyword.Symbol public
270
+
*[CLJCLR-144](https://clojure.atlassian.net/browse/CLJCLR-144) - fix method invocation binder for dynamic call-sites to apply type-args to generic method bases before binding
271
+
*[CLJCLR-142](https://clojure.atlassian.net/browse/CLJCLR-142) - rework hashing to provide stable hashing for strings and things that depend on them. Allows the case macro to be stable.
272
+
*[CLJCLR-141](https://clojure.atlassian.net/browse/CLJCLR-141) - RT.load not looking up .clj.dll files with correct name
273
+
*[CLJCLR-140](https://clojure.atlassian.net/browse/CLJCLR-140) - Properly catch client closing connecction in clojure.core.server/accept-connection
274
+
*[CLRCLR-138](https://clojure.atlassian.net/browse/CLRCLR-138) - at startup, loo for user.cljr + user.cljc + user.clj, in that order
275
+
*[CLRCLR-131](https://clojure.atlassian.net/browse/CLRCLR-131) - Remove unnecessary call to Util.ConvertLong in Numbers.hasheq
276
+
*[CLRCLR-134](https://clojure.atlassian.net/browse/CLRCLR-134) - APersistentVector+RSeq.reduce should check for Reduced value
277
+
*[CLJCLR-135](https://clojure.atlassian.net/browse/CLJCLR-135) - Fix Numbers.minus(Object,Object) on ulong
278
+
*[CLJCLR-136](https://clojure.atlassian.net/browse/CLJCLR-136) - Add case for CLR decimal to Numbers.ToBigDecimal
279
+
*[CLJCLR-139](https://clojure.atlassian.net/browse/CLJCLR-139) - ArrayChunk.reduce should deref a Reduced value
280
+
*[CLJCLR-130](https://clojure.atlassian.net/browse/CLJCLR-130) - Fix calculation of directory where the spec DLLs are loaded during Clojure.RT initialization
281
+
*[CLJCLR-121](https://clojure.atlassian.net/browse/CLJCLR-121) - make RT.CulturToString call ToString on non-numeric arg
282
+
*[CLJCLR-120](https://clojure.atlassian.net/browse/CLJCLR-120) - In clojure.lang.Future, replace to call Thread.Abort with Thread.Interrupt (Thread.Abbort not supported in recent .NET releases)
*[CLJCLR-119](https://clojure.atlassian.net/browse/CLJCLR-119) - Clean up some reflection warnings in clojure.math
285
+
*[CLJCLR-117](https://clojure.atlassian.net/browse/CLJCLR-117) - Flush() after calls to RT.ErrWriter() writes
286
+
*[CLJCLR-116](https://clojure.atlassian.net/browse/CLJCLR-116) - Better handling of values of type System.Type during reflection
287
+
*[CLJCLR-115](https://clojure.atlassian.net/browse/CLJCLR-115) - Bad value in Namespace.Mapping should be dealt with
288
+
*[CLJCLR-114](https://clojure.atlassian.net/browse/CLJCLR-114) - Make clojure.reflect/property->map consult the getter of a property in order to pick up needed attributes
289
+
*[CLJCLR-113](https://clojure.atlassian.net/browse/CLJCLR-113) - Fix recur sending vector into &rest param failing with cast exception
290
+
291
+
# Changes to Clojure in Version 1.11.4
292
+
293
+
*[CLJ-2145](https://clojure.atlassian.net/browse/CLJ-2145) - Fix clearing of closed overs in `^:once` fns
294
+
*[CLJ-2317](https://clojure.atlassian.net/browse/CLJ-2317) - `recur` to head of `:once` fn cancels once
295
+
210
296
# Changes to Clojure in Version 1.11.3
211
297
212
298
*[CLJ-2843](https://clojure.atlassian.net/browse/CLJ-2843) - Reflective calls to Java methods that take primitive long or double now work when passed a narrower boxed number at runtime (Integer, Short, Byte, Float). Previously, these methods were not matched during reflection and an error was thrown.
0 commit comments