2 puntos por GN⁺ 2024-09-06 | 1 comentarios | Compartir por WhatsApp

Clojure 1.12.0

Compatibilidad

Java 8 - aviso de fin de compatibilidad

  • Clojure 1.12 genera bytecode de Java 8, pero esta es la última versión que usa Java 8.
  • Las versiones posteriores migrarán a una nueva versión LTS de Java.

Java 21 - fijación de hilos virtuales en código de usuario

  • Para los usuarios de Clojure que quieran usar hilos virtuales en JDK 21, en la versión 1.12 lazy-seq y delay usan locks en lugar de bloques synchronized.

Seguridad

  • Corrección de la vulnerabilidad de seguridad CVE-2024-22871.

Serialización

  • Los tipos de datos de Clojure implementan la interfaz de serialización de Java.
  • En la versión 1.11.0 cambiaron los identificadores de serialización de dos clases, pero esto se revirtió en 1.11.1.
  • En la versión 1.12.0 se completó el trabajo para las clases restantes.

Dependencias

  • Se actualizó la dependencia spec.alpha a 0.5.238.
  • Se actualizó la dependencia core.specs.alpha a 0.4.74.

Funcionalidades

Adición interactiva de librerías

  • Se ofrece una nueva función para agregar librerías sin reiniciar la JVM.
  • Se añadieron las funciones add-lib, add-libs y sync-deps.

Inicio y control de procesos externos

  • Se añadió el nuevo namespace clojure.java.process.
  • Se pueden controlar procesos externos con las funciones start y exec.

Valores de método

  • Se añadió la capacidad de usar métodos de Java como funciones de orden superior.
  • El compilador genera automáticamente funciones wrapper.

Métodos calificados

  • Se pueden usar métodos calificados como valores con la sintaxis Classname/method, Classname/.method y Classname/new.

Metadatos :param-tags

  • Se pueden proporcionar metadatos :param-tags a métodos calificados para resolver métodos sobrecargados.

Sintaxis de clases de arreglos

  • Se añadió una sintaxis para representar clases de arreglos. Ejemplo: String/2 representa un arreglo bidimensional de cadenas.

Interfaces funcionales

  • Ahora se pueden convertir interfaces funcionales de Java en funciones de Clojure para usarlas.

Interoperabilidad con Java Supplier

  • Las implementaciones de IDeref ahora implementan directamente la interfaz Supplier.

Soporte para streams

  • Los streams pueden procesarse al estilo Clojure con las funciones stream-seq!, stream-reduce!, stream-transduce! y stream-into!.

Implementación Spliterable de PersistentVector

  • PersistentVector ahora ofrece un spliterator personalizado que soporta procesamiento en paralelo.

drop y partition más eficientes

  • Se mejoró el rendimiento de las funciones drop, nthrest y nthnext.
  • Se añadieron las nuevas funciones partitionv, partitionv-all y splitv-at.

Política de internado de Var

  • Al internar var en un namespace, se crean referencias estables.
  • Esto resuelve un problema que surgió en la versión 1.11.0.

Resumen de GN⁺

  • Clojure 1.12.0 es la última versión que usa Java 8, y las siguientes versiones migrarán a una nueva versión LTS de Java.
  • Entre las nuevas funciones están la adición interactiva de librerías, el control de procesos externos y el uso de valores de método.
  • La interoperabilidad con Java mejoró de forma importante, y se añadieron funciones más eficientes para drop y partition.
  • Es una actualización útil para los usuarios de Clojure que puede mejorar la productividad de desarrollo.

1 comentarios

 
GN⁺ 2024-09-06
Opiniones en Hacker News
  • Me interesé en Clojure después de ver las charlas de Rich en YouTube. Estoy pensando cómo adoptarlo en la empresa
    • Creo que la lección sobre la simplicidad es muy importante
  • Esta versión incluye muchas funciones nuevas muy buenas
    • Personalmente, lo que más me gusta es la función add-libs
    • Hace que sea fácil escribir demos de un solo archivo o ejemplos mínimos y compartirlos
    • También es útil al mostrar bibliotecas de Java
  • Pensé que habría que esperar hasta Clojure/conj 2024
    • Estoy esperando spec2, pero por ahora uso Malli
    • Con el cambio en la interfaz de funciones, ya no hace falta mantener macros utilitarias
  • Se agregaron muchas funciones nuevas, pero el código sigue funcionando igual
  • Las funciones add-libs y sync-deps son muy útiles
    • Esta versión tiene un alcance distinto al de versiones anteriores
  • Hay comentarios preguntándose por el estado de spec
  • Clojure combina Lisp y el ecosistema de Java, así que es bueno para construir sistemas backend
    • Es una pena que no refleje algunas innovaciones posteriores a Java 8
  • El cambio en la interfaz de funciones es muy importante
    • Mantener la interoperabilidad con Java es una fortaleza de Clojure
  • Hay muchas mejoras muy buenas
    • Es el lenguaje de la familia Lisp que uso principalmente
  • Me alegra que Clojure siga manteniéndose fuerte