2 Punkte von GN⁺ 2024-09-06 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-09-06
Hacker-News-Kommentare
  • Durch Richs YouTube-Vorträge bin ich auf Clojure aufmerksam geworden. Ich überlege, wie ich es im Unternehmen einführen kann.
    • Ich finde, die Lehren über Einfachheit sind sehr wichtig.
  • Dieses Release enthält viele großartige neue Funktionen.
    • Persönlich gefällt mir die Funktion add-libs am besten.
    • Damit lassen sich Single-File-Demos oder minimale Beispiele schreiben, die sich leicht teilen lassen.
    • Auch zum Vorführen von Java-Bibliotheken ist das nützlich.
  • Ich dachte, wir müssten bis zur Clojure/conj 2024 warten.
    • Ich warte auf spec2, nutze derzeit aber Malli.
    • Durch die Änderungen an der Funktionsschnittstelle muss ich Utility-Makros nicht mehr pflegen.
  • Es wurden viele neue Funktionen hinzugefügt, aber der Code läuft unverändert weiter.
  • Die Funktionen add-libs und sync-deps sind sehr nützlich.
    • Dieses Release hat einen anderen Umfang als frühere Releases.
  • Es gibt Kommentare, die sich nach dem Status von spec erkundigen.
  • Clojure eignet sich gut für den Aufbau von Backend-Systemen, weil es Lisp mit dem Java-Ökosystem verbindet.
    • Schade ist, dass einige Innovationen seit Java 8 nicht übernommen wurden.
  • Die Änderungen an der Funktionsschnittstelle sind sehr wichtig.
    • Die Interoperabilität mit Java aufrechtzuerhalten, ist eine Stärke von Clojure.
  • Es gibt viele großartige Verbesserungen.
    • Es ist die Lisp-Variante, die ich hauptsächlich benutze.
  • Ich freue mich, dass Clojure weiterhin so stark bleibt.