Por qué Clojure es superior a Java para el desarrollo con modelos de lenguaje

El artículo analiza las ventajas técnicas de Clojure frente a Java en el contexto de la programación asistida por modelos de lenguaje de gran escala (LLM). El autor argumenta que, aunque los LLM pueden generar código rápido, el ciclo de retroalimentación lento de la compilación y el reinicio de apli

THC permite ejecutar Haskell en la JVM mediante JIT y AOT

Edward Kmett ha desarrollado THC, un compilador que permite ejecutar Haskell en la JVM utilizando un compilador Just-In-Time (JIT) y soporte para compilación en tiempo de ejecución (AOT). El proyecto, iniciado hace una semana, implementa todos los operadores primarios de GHC 9.14.1 y se basa en la a

JEP 544: compilación de código anticipada (ahead-of-time) en la JVM HotSpot

La JEP 544, propuesta para OpenJDK por John Rose, introduce la compilación anticipada (AOT) de código de aplicación dentro de la caché AOT existente, con el objetivo de reducir los tiempos de arranque y calentamiento de la JVM HotSpot. La idea central es ejecutar un entrenamiento previo que genere c

Babashka 1.13.220 añade FFI para llamar a bibliotecas C desde Clojure

Babashka ha publicado la versión 1.13.220, que incorpora el espacio de nombres babashka.ffi para invocar bibliotecas C directamente desde scripts de Babashka. Esta funcionalidad, basada en java.lang.foreign, también se distribuye como librería independiente para proyectos de Clojure sobre JVM, lo qu

Por qué Arrays.fill es 265 veces más lento con G1GC que con ParallelGC

Un análisis técnico detalla por qué una llamada aparentemente inocente a Arrays.fill se ejecuta 265 veces más despacio bajo G1GC que bajo ParallelGC, a pesar de que el código Java, el JDK y la máquina son idénticos. La investigación, realizada con JMH y un perfilador a nivel de ensamblador (xctracea

Cómo Jactl implementa continuaciones en Java 8 y se integra con hilos virtuales

Jactl es un lenguaje de scripting integrable y seguro para aplicaciones Java, pensado para ejecutarse dentro de arquitecturas reactivas basadas en un pool de hilos event-loop. Uno de sus requisitos de diseño era no bloquear el hilo de ejecución cuando una operación de larga duración —como una consul

Codes: una librería JVM ligera para estandarizar resultados y mapear protocolos

Codes es una biblioteca para JVM (Java 17+, sin dependencias en tiempo de ejecución) que ofrece identidades estables para los resultados de una aplicación y mappings explícitos entre fronteras de protocolo. Su propósito es que un mismo dominio conserve la misma identidad de outcome —por ejemplo, com

Las clases valor en Valhalla siguen necesitando el apoyo del compilador

El proyecto Valhalla acerca su mayor hito al integrarse como función de previsualización en JDK 28: las clases valor (value classes), contempladas en la JEP 401. Esta característica permite renunciar a la identidad de los objetos y, con ello, abrir nuevas vías de optimización en la JVM, como el apla

Trampas del benchmarking en sistemas modernos: por qué los resultados engañan

Benchmarking en sistemas modernos rara vez produce datos limpios y comparables. Aunque el software bajo prueba sea determinista, el resto del entorno —sistema operativo, hardware, JVM, mecanismos de seguridad— introduce variaciones que pueden cambiar los tiempos de ejecución entre iteraciones y entr

Implementar `nameOf` en Java introspeccionando el bytecode

El artículo muestra cómo reproducir en Java la expresión `nameof` de C#, que devuelve el nombre textual de un identificador para evitar duplicaciones en mensajes de validación. En lugar de añadir una característica al lenguaje, la propuesta se apoya exclusivamente en bibliotecas estándar: la API `St

OpenJDK fusiona la primera vista previa de los Value Objects (JEP 401)

El repositorio principal de OpenJDK (jdk/master) ha recibido un pull request que agrupa 2.934 commits para implementar la primera vista previa de la JEP 401 (Value Objects), uno de los cambios más ambiciosos del proyecto Valhalla. La propuesta introduce en el lenguaje Java un nuevo tipo de objeto: l

Mapeo de bytecode a código fuente: técnicas y rendimiento

Cuando una máquina virtual basada en bytecode genera un error en tiempo de ejecución, necesita traducir el desplazamiento del bytecode a la línea del código fuente que lo produjo. Este artículo, surgido de los retos del capítulo 14 del libro 'Crafting Interpreters' de Robert Nystrom, analiza de form

Configuración avanzada de Eglot en Emacs para Scala y Kotlin

Artículo técnico que detalla una configuración de producción de Eglot, el cliente LSP integrado por defecto en Emacs desde la versión 29, orientada al trabajo diario con Scala, Kotlin y algo de Java. El autor, integrante de la configuración heks-emacs, defiende que Emacs, frente a IntelliJ IDEA, ofr

Java 27 ya tiene sus características cerradas: estas son las 9 JEP que trae

Java 27 ha entrado en la fase de Rampdown Phase One, lo que significa que el conjunto de funcionalidades de esta versión ya está cerrado. La entrega llega con 9 JEP, una cifra reducida frente a las 10 de Java 26, y casi todas son consolidaciones más que grandes novedades. El cambio más visible es e

JEP 539: inicialización estricta de campos en la JVM (vista previa)

El JEP 539, propuesto por Dan Smith en el repositorio OpenJDK, introduce un nuevo modelo de inicialización de campos en la Máquina Virtual de Java (JVM) denominado inicialización estricta de campos. Los campos marcados con este modo no dispondrán de valor por defecto (0, false o null), por lo que la

Project Valhalla llega al JDK 28: una década de trabajo en clases valor

Project Valhalla, la iniciativa de OpenJDK que arrancó en 2014 para acercar el modelo de programación de Java al rendimiento de los tipos primitivos, entrará por fin en el repositorio principal de OpenJDK como característica de previsualización en JDK 28. Lo confirmó el 15 de junio la ingeniera de O

H2JVM: biblioteca en Haskell para generar bytecode de la JVM

H2JVM es una biblioteca en Haskell, aún en fases muy iniciales, que permite generar bytecode de la máquina virtual de Java (JVM) desde código funcional con un enfoque de alto nivel. Su objetivo es que los desarrolladores de compiladores hacia la JVM no tengan que lidiar con los detalles de bajo nive

Mis impresiones tras un mes programando en Clojure

Tras un mes utilizando Clojure para reconstruir su sitio web personal, el autor comparte sus impresiones sobre el lenguaje y por qué piensa seguir con él. El autor se acercó a Clojure esperando la sintaxis engorrosa que suele asociarse a los dialectos de Lisp, pero en la práctica lo encontró más er

rustc_codegen_jvm: backend de rustc para compilar Rust a bytecode de la JVM

rustc_codegen_jvm es un backend alternativo para el compilador de Rust (rustc) que traduce código fuente escrito en Rust a bytecode de la Java Virtual Machine (JVM) y produce archivos .jar ejecutables compatibles con JVM 8 o superior. El proyecto, alojado en GitHub bajo la cuenta IntegralPilot, conf

Endive: nuevo runtime de wasm para java sin dependencias nativas

El proyecto Endive, desarrollado por Bytecode Alliance, es un nuevo tiempo de ejecución nativo de Java para WebAssembly (Wasm). Lanzado como un fork de Chicory, permite ejecutar módulos Wasm directamente en la Máquina Virtual de Java (JVM) sin dependencias nativas ni llamadas JNI. La relevancia de e

Guía completa compara cuatro dialectos principales de Lisp

Esta referencia lateral de hyperpolyglot.org ofrece una comparación exhaustiva entre cuatro dialectos principales del ecosistema Lisp: Common Lisp, Racket, Clojure y Emacs Lisp. Cada dialecto comparte la sintaxis característica de Lisp —notación prefijada con paréntesis—, pero difiere considerableme

Jank crea IR personalizada para optimizar código Clojure

El compilador de Clojure 'jank' ha implementado su propia representación intermedia (IR) personalizada, diseñada específicamente para optimizar el código a nivel de semántica del lenguaje Clojure. Anteriormente, jank delegaba toda la optimización a LLVM, pero debido a que LLVM IR opera a un nivel mu

Java: Visualiza tu aprendizaje con este gráfico interactivo

El "100DaysOfJava Knowledge Graph" es una herramienta interactiva que visualiza el contenido de una serie de publicaciones de blog centradas en el aprendizaje y la exploración de Java. Imagina que has seguido un curso intensivo de Java, con cientos de conceptos interconectados. Intentar recordar y c

Clojure: del código a la infraestructura de Nubank

El documental "Documental" explora la historia de Clojure, un lenguaje de programación funcional que ha evolucionado desde una idea inicial hasta convertirse en la base de la infraestructura de ingeniería de Nubank, uno de los mayores bancos digitales independientes del mundo. Clojure no es un lengu

OpenJDK 11: nuevas herramientas para terminar JVM

Una nueva versión de OpenJDK 11 introduce opciones de terminación de la Máquina Virtual Java (JVM) para mejorar la depuración y el manejo de errores en entornos de producción. Estas opciones, disponibles a través de flags de runtime, permiten abortar la JVM en situaciones específicas como fallos de

Panamá: Puente Java-Nativo Facilita la Interoperabilidad

El proyecto Panamá, impulsado por el Hotspot Group dentro de OpenJDK, busca mejorar la interoperabilidad entre la Máquina Virtual de Java (JVM) y código nativo, especialmente APIs comúnmente utilizadas por programadores de C. El objetivo es permitir una comunicación más fluida y eficiente entre el c

Clojure: lenguaje funcional gana terreno en empresas

Una reciente implementación en Michelin ha impulsado la adopción de Clojure, un lenguaje de programación funcional basado en Lisp, para el desarrollo de aplicaciones empresariales. Inicialmente, el equipo se mostró escéptico al desviarse de la pila de desarrollo estándar (Java), pero rápidamente apr

Aprende Clojure: Plataforma práctica para desarrolladores

ClojureStream es una plataforma integral diseñada para el aprendizaje y la comunidad en torno a los lenguajes de programación Clojure, ClojureScript y Datalog. En un mundo donde la curva de aprendizaje de nuevas tecnologías puede ser empinada, ClojureStream se presenta como un recurso estructurado y

Clojure y Java: Solucionan Retraso de Inicio en OpenLDK

Este artículo aborda un problema de rendimiento significativo encontrado al integrar Clojure (un lenguaje funcional) con OpenLDK, una implementación de Common Lisp que se ejecuta sobre la Máquina Virtual de Java (JVM). Inicialmente, el tiempo de inicio de Clojure en OpenLDK era excesivamente largo (

Common Lisp y Scheme: Interoperabilidad sin precedentes

Un nuevo proyecto, denominado 'cl-kawa', permite una profunda interoperabilidad entre Common Lisp y Scheme, dos lenguajes de programación, a través de una implementación innovadora. El proyecto, creado por Anthony Green y disponible en GitHub, utiliza OpenLDK, un JVM escrito en Common Lisp que trans