2 points par GN⁺ 2024-09-06 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-09-06
Avis sur Hacker News
  • Je me suis intéressé à Clojure en regardant les conférences de Rich sur YouTube. Je réfléchis à la manière de l’adopter dans mon entreprise
    • Je pense que la leçon sur la simplicité est extrêmement importante
  • Cette version inclut beaucoup de nouvelles fonctionnalités intéressantes
    • Personnellement, c’est la fonctionnalité add-libs que je préfère
    • Elle permet d’écrire des démos en un seul fichier ou des exemples minimaux, ce qui facilite le partage
    • Elle est aussi utile pour faire des démos de bibliothèques Java
  • Je pensais qu’il faudrait attendre Clojure/conj 2024
    • J’attends spec2, mais pour l’instant j’utilise Malli
    • Avec les changements de l’interface des fonctions, il n’est plus nécessaire de maintenir des macros utilitaires
  • Beaucoup de nouvelles fonctionnalités ont été ajoutées, mais le code continue de fonctionner tel quel
  • Les fonctionnalités add-libs et sync-deps sont très utiles
    • Cette version a une portée différente des précédentes
  • Certains se demandent quel est l’état de spec
  • Clojure est bien adapté à la construction de systèmes backend en combinant Lisp et l’écosystème Java
    • Il est regrettable qu’il ne reflète pas davantage certaines innovations apparues après Java 8
  • Les changements de l’interface des fonctions sont très importants
    • Préserver l’interopérabilité avec Java est l’un des points forts de Clojure
  • Il y a beaucoup d’améliorations intéressantes
    • C’est la famille de langages Lisp que j’utilise principalement
  • Je suis heureux de voir que Clojure reste toujours aussi solide