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
Opiniones en Hacker News
add-libsadd-libsysync-depsson muy útiles