Clojure 1.12.0
Compatibilité
Java 8 - annonce de fin de compatibilité
- Clojure 1.12 génère du bytecode Java 8, mais il s'agit de la dernière version à utiliser Java 8.
- Les versions suivantes passeront à une nouvelle version LTS de Java.
Java 21 - épinglage des threads virtuels dans le code utilisateur
- Pour les utilisateurs de Clojure souhaitant utiliser des threads virtuels sur JDK 21, la version 1.12 fait désormais utiliser à
lazy-seq et delay des verrous au lieu de blocs synchronized.
Sécurité
- Correction de la vulnérabilité de sécurité CVE-2024-22871.
Sérialisation
- Les types de données Clojure implémentent l'interface de sérialisation Java.
- Dans la version 1.11.0, les identifiants de sérialisation de deux classes avaient été modifiés, mais cela a été annulé dans la version 1.11.1.
- La version 1.12.0 finalise ce travail pour les autres classes.
Dépendances
- Mise à jour de la dépendance
spec.alpha vers la version 0.5.238.
- Mise à jour de la dépendance
core.specs.alpha vers la version 0.4.74.
Fonctionnalités
Ajout interactif de bibliothèques
- Nouvelles fonctions permettant d'ajouter des bibliothèques sans redémarrer la JVM.
- Ajout des fonctions
add-lib, add-libs et sync-deps.
Démarrage et contrôle de processus externes
- Ajout du nouvel espace de noms
clojure.java.process.
- Les fonctions
start et exec permettent de contrôler des processus externes.
Valeurs de méthode
- Ajout d'une fonctionnalité permettant d'utiliser des méthodes Java comme fonctions d'ordre supérieur.
- Le compilateur génère automatiquement des fonctions wrapper.
Méthodes qualifiées
- Les syntaxes
Classname/method, Classname/.method, Classname/new permettent d'utiliser des méthodes qualifiées comme valeurs.
Métadonnées :param-tags
- Les métadonnées
:param-tags peuvent être fournies aux méthodes qualifiées pour résoudre les méthodes surchargées.
Syntaxe de classe de tableau
- Ajout d'une syntaxe pour représenter les classes de tableaux. Exemple :
String/2 représente un tableau de chaînes à deux dimensions.
Interfaces fonctionnelles
- Les interfaces fonctionnelles Java peuvent être converties et utilisées comme fonctions Clojure.
Interopérabilité avec Java Supplier
- Les implémentations de
IDeref implémentent désormais directement l'interface Supplier.
Prise en charge des streams
- Les fonctions
stream-seq!, stream-reduce!, stream-transduce!, stream-into! permettent de traiter les streams à la manière de Clojure.
Implémentation Spliterable de PersistentVector
PersistentVector fournit désormais un spliterator personnalisé prenant en charge le traitement parallèle.
drop et partition plus efficaces
- Les performances des fonctions
drop, nthrest, nthnext ont été améliorées.
- Ajout des nouvelles fonctions
partitionv, partitionv-all, splitv-at.
Politique d'internage des Var
- Lors de l'internage de var dans un espace de noms, des références stables sont créées.
- Cela corrige un problème apparu dans la version 1.11.0.
Le récapitulatif de GN⁺
- Clojure 1.12.0 est la dernière version à utiliser Java 8, et les versions suivantes passeront à une nouvelle version LTS de Java.
- Parmi les nouveautés figurent l'ajout interactif de bibliothèques, le contrôle de processus externes et l'utilisation de valeurs de méthode.
- L'interopérabilité avec Java a été nettement améliorée, et des fonctions
drop et partition plus efficaces ont été ajoutées.
- Une mise à jour utile pour les utilisateurs de Clojure, qui peut améliorer la productivité de développement.
1 commentaires
Avis sur Hacker News
add-libsque je préfèrespec2, mais pour l’instant j’utilise Malliadd-libsetsync-depssont très utilesspec