Clojure 1.12.0
Kompatibilität
Java 8 – Ankündigung des Support-Endes
- Clojure 1.12 erzeugt Java-8-Bytecode, dies ist jedoch das letzte Release mit Java 8.
- Künftige Releases werden auf ein neues Java-LTS-Release umsteigen.
Java 21 – Pinning virtueller Threads in Benutzercode
- Für Clojure-Nutzer, die unter JDK 21 virtuelle Threads verwenden möchten, nutzen
lazy-seq und delay in 1.12 Locks statt synchronized-Blöcken.
Sicherheit
- Behebung der Sicherheitslücke CVE-2024-22871.
Serialisierung
- Clojure-Datentypen implementieren das Java-Serialisierungs-Interface.
- In 1.11.0 wurden die Serialisierungskennungen zweier Klassen geändert, dies wurde in 1.11.1 jedoch zurückgenommen.
- In 1.12.0 wurden die Arbeiten für die übrigen Klassen abgeschlossen.
Abhängigkeiten
- Die Abhängigkeit
spec.alpha wurde auf 0.5.238 aktualisiert.
- Die Abhängigkeit
core.specs.alpha wurde auf 0.4.74 aktualisiert.
Funktionen
Interaktives Hinzufügen von Bibliotheken
- Es werden neue Funktionen bereitgestellt, mit denen sich Bibliotheken hinzufügen lassen, ohne die JVM neu zu starten.
- Die Funktionen
add-lib, add-libs und sync-deps wurden hinzugefügt.
Starten und Steuern externer Prozesse
- Der neue Namespace
clojure.java.process wurde hinzugefügt.
- Mit den Funktionen
start und exec lassen sich externe Prozesse steuern.
Methodenwerte
- Es wurde eine Funktion hinzugefügt, mit der sich Java-Methoden als Higher-Order Functions verwenden lassen.
- Der Compiler erzeugt automatisch Wrapper-Funktionen.
Qualifizierte Methoden
- Mit der Syntax
Classname/method, Classname/.method und Classname/new lassen sich qualifizierte Methoden als Werte verwenden.
:param-tags-Metadaten
- Durch Bereitstellung von
:param-tags-Metadaten für qualifizierte Methoden können überladene Methoden aufgelöst werden.
Syntax für Array-Klassen
- Es wurde eine Syntax hinzugefügt, um Array-Klassen darzustellen. Beispiel:
String/2 steht für ein zweidimensionales String-Array.
Funktionale Interfaces
- Java Functional Interfaces können konvertiert und als Clojure-Funktionen verwendet werden.
Java-Supplier-Interoperabilität
- Implementierungen von
IDeref implementieren nun direkt das Interface Supplier.
Stream-Unterstützung
- Mit den Funktionen
stream-seq!, stream-reduce!, stream-transduce! und stream-into! lassen sich Streams auf Clojure-Art verarbeiten.
Spliterable-Implementierung für PersistentVector
PersistentVector bietet nun einen benutzerdefinierten Spliterator zur Unterstützung paralleler Verarbeitung.
Effizienteres drop und partition
- Die Performance der Funktionen
drop, nthrest und nthnext wurde verbessert.
- Die neuen Funktionen
partitionv, partitionv-all und splitv-at wurden hinzugefügt.
Var-Interning-Richtlinie
- Beim Internen von Vars in einem Namespace werden stabile Referenzen erzeugt.
- Dadurch wird ein in 1.11.0 aufgetretenes Problem behoben.
Zusammenfassung von GN⁺
- Clojure 1.12.0 ist das letzte Release mit Java 8; spätere Releases werden auf ein neues Java-LTS-Release umsteigen.
- Zu den neuen Funktionen gehören das interaktive Hinzufügen von Bibliotheken, die Steuerung externer Prozesse und die Nutzung von Methodenwerten.
- Die Interoperabilität mit Java wurde deutlich verbessert, außerdem wurden effizientere
drop- und partition-Funktionen hinzugefügt.
- Für Clojure-Nutzer ist dies ein nützliches Update, das die Entwicklungsproduktivität erhöhen kann.
1 Kommentare
Hacker-News-Kommentare
add-libsam besten.add-libsundsync-depssind sehr nützlich.