Sistema de memoria U: sin recolector de basura y asignación por bloques

El sistema de memoria U se distingue por la ausencia total de un recolector de basura (GC), eliminando las pausas de ejecución asociadas a los algoritmos de trazado. En su lugar, utiliza un grafo de dependencias acíclico (DAG) donde las referencias fuertes apuntan siempre de padres a hijos. Cuando e

Análisis técnico de la gestión de memoria en el lenguaje V

El lenguaje de programación V ofrece un sistema de gestión de memoria que combina recolección de basura (GC), gestión manual y un modo de liberación automática llamado autofree. Aunque la documentación oficial promete que el autofree resuelva el 90-100% de la memoria, las pruebas prácticas con herra

Oilpan: el recolector de basura para C++ en Chromium

Oilpan es un recolector de basura escrito en C++ diseñado para gestionar la memoria en el motor de renderizado Blink de Chromium, donde gran parte del código no es JavaScript. A diferencia de los recolectores tradicionales, Oilpan utiliza un enfoque de trazado cruzado (cross-component tracing) que t

Nueva metodología de evaluación para VM sin rendimiento estable

Investigadores de la Universidad Carolina, la Università della Svizzera italiana y Oracle Labs han desarrollado una nueva metodología para evaluar el rendimiento de máquinas virtuales que no alcanzan un estado de estabilidad. Estudios previos demostraron que incluso microbenchmarks deterministas peq

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

Go 1.27 introduce un perfilador para detectar fugas de gorutinas

El equipo de Go anuncia un nuevo mecanismo integrado en Go 1.27 para localizar fugas de gorutinas en programas en ejecución, incluidos sistemas en producción. Se trata del goroutine leak profiler, accesible a través del paquete runtime/pprof como tipo de perfil goroutineleak, y también mediante los

Janet 1.42.0 llega con correcciones y una amplia revisión documental

El lenguaje de programación Janet ha alcanzado la versión 1.42.0, una actualización que llega tras un periodo prolongado de desarrollo y que reúne un volumen inusual de mejoras internas y de documentación. El comunicado oficial del repositorio en GitHub describe la entrega como una puesta al día pen

Curso de ingeniería de oráculos para circuitos cuánticos prácticos

La mayoría de las afirmaciones sobre la aceleración cuántica dependen de oráculos que existen solo en papel, un problema que este curso aborda enseñando a construir circuitos cuánticos prácticos desde cero. Dirigido a profesionales e investigadores con conocimiento previo de cúbits y puertas control

Ingeniería de arnés: cómo mantener la coherencia del código generado por IA

La ingeniería de arnés (harness engineering) es una disciplina que rodea la generación de código asistida por inteligencia artificial con herramientas deterministas, revisión basada en agentes y verificaciones periódicas de entropía, con el objetivo de que el código producido por IA se mantenga corr

Porffor pasa a alpha el 11 de agosto con un evento en San Francisco

Porffor, el compilador experimental de JavaScript a código nativo, entrará en fase alpha el 11 de agosto, según anunció su creador. Para celebrarlo, habrá un encuentro presencial en la sede de PlanetScale en San Francisco, con charla, demostraciones en directo y un RSVP abierto a través de Luma. En

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

Optimización del recolector de basura de Plush: de 117 ms a 7 ms

El autor retoma Plush, un lenguaje de juguete inspirado en Lox con paralelismo basado en actores y un recolector de basura (GC) por actor sin bloqueos globales, cuyo rendimiento quedaba lejos de su objetivo personal: recolectar un millón de objetos vivos en menos de 20 ms. En un MacBook Air M5, el G

Depot aplica TLA+ para encontrar errores en su recolector de basura

Depot ha utilizado el lenguaje de especificación formal TLA+ y su model checker TLC para verificar el recolector de basura de Depot Registry v2. El equipo sostiene que los errores más difíciles en sistemas distribuidos no aparecen en una sola operación, sino en intercalados concretos: dos procesos h

Qué cuesta de verdad la recolección de basura en un programa

La recolección de basura (GC) no cobra por la memoria usada, sino por los objetos vivos y las referencias entre ellos: por eso un grafo de muchos objetos pequeños resulta mucho más caro de barrer que un único búfer del mismo tamaño. El artículo explica que toda la memoria dinámica vive en el heap —l

Cómo reducir el consumo de memoria de los hashes en Ruby

Los hashes son el tipo de objeto que más memoria consume en las aplicaciones Ruby, muy por encima de alternativas como Struct o los llamados PORO (Plain Old Ruby Objects). Un hash vacío ocupa 160 bytes en Ruby 4.0.6, hasta cuatro veces más que un Struct del mismo tamaño, una diferencia que se mantie

Absolutistas de la seguridad de memoria: más allá de Rust

El artículo analiza el debate en torno a la seguridad de memoria en lenguajes de programación y arremete contra los llamados «absolutistas», que descalifican a Rust por contar con bloques `unsafe` sin aplicar el mismo rasero a C, C++ o Zig. El texto parte de una observación: aunque durante años la d

Wasmtime 47 habilita por defecto las propuestas Wasm GC y excepciones

Wasmtime 47, el runtime de WebAssembly desarrollado por Bytecode Alliance, activa por defecto las propuestas de estándar Wasm GC y excepciones, dos extensiones del lenguaje que permiten soportar de forma nativa lenguajes de alto nivel con modelos de objetos y referencias y con manejo de excepciones.

Cómo funciona el nuevo recolector de basura Green Tea de Go y por qué importa

Go 1.26 introdujo Green Tea como recolector de basura predeterminado, una evolución presentada originalmente en Go 1.25 que mejora la eficiencia de caché del proceso de limpieza de memoria. En Go, los objetos se agrupan por clases de tamaño dentro de fragmentos contiguos de páginas de 8 KiB, una téc

Análisis de escape en Go: cómo decide el compilador entre pila y montón

El análisis de escape es una optimización del compilador de Go que decide, valor por valor, si una variable puede vivir en la pila o debe trasladarse al montón. La pila es una región por gorutina donde las asignaciones son muy baratas y se liberan al retornar la función; el montón es una memoria com

El ordenador del fondo de un canal escocés

A finales de los años ochenta, Linn Products, una empresa escocesa de alta fidelidad conocida por su tocadiscos Sondek LP12, envió al fondo del canal Forth and Clyde un procesador diseñado a medida llamado Rekursiv. La máquina verificaba en hardware el tipo y los límites de cada acceso a memoria, re

Por qué ML y OCaml son buenas opciones para escribir compiladores

El ingeniero Dwight VandenBerghe sostiene que los lenguajes de la familia ML —especialmente OCaml y, en menor medida, SML/NJ— ofrecen una combinación de características que los hacen especialmente adecuados para desarrollar compiladores. El artículo, publicado en 1998 en el grupo comp.compilers, rep

Cómo Go implementa sus genéricos con GC shape stenciling

Go emplea una técnica intermedia entre la monomorfización completa de Rust o C++ y la borradura de tipos de Java para implementar los genéricos introducidos en Go 1.18: el GC shape stenciling. En lugar de generar una copia del código genérico por cada tipo concreto, el compilador agrupa los tipos se

Un lenguaje AOT sin libc ni runtime que sirve una web desde un binario nativo

Un proyecto presentado como un lenguaje de sistemas compilado con anticipación (AOT) y emitido directamente a x86-64 sirve una página web desde un binario nativo sin enlazar con libc, sin máquina virtual y sin runtime. Los datos que muestra la página —tamaño del binario (190.207 bytes), PID del work

Elm 0.19.2 acelera la compilación con un parser más eficiente

El compilador de Elm alcanza su versión 0.19.2 con mejoras de rendimiento centradas en reducir la asignación de memoria durante el análisis sintáctico. En pruebas internas, el compilador procesa 850.000 líneas de código Elm desde cero en 5,7 segundos y completa las compilaciones incrementales en men

CS 6120 de Cornell: curso autoguiado y abierto sobre compiladores avanzados

CS 6120 es un curso de nivel doctoral de la Cornell University, impartido por Adrian Sampson, que ahora se ofrece como itinerario autoguiado y abierto en la web. El programa aborda la implementación de lenguajes de programación desde una perspectiva tanto clásica como de investigación: representacio

Lone: intérprete de Lisp en C desde cero

Lone es un intérprete de Lisp escrito en C que se distingue por su desarrollo 'desde cero' sin utilizar librerías estándar como libc. Su sistema de gestión de memoria, conocido como el 'heap', es el tema central de esta explicación y representa un caso de estudio valioso sobre cómo se construyen los

V8 optimiza memoria con nuevo 'Parallel Scavenger'

El motor JavaScript V8, utilizado en Chrome y Node.js, gestiona la memoria de los objetos JavaScript a través de un recolector de basura (garbage collector). Para optimizar el rendimiento, V8 ha evolucionado constantemente sus algoritmos de recolección de basura, buscando reducir los tiempos de paus

Rail: Nuevo lenguaje de sistemas sin dependencias de C

Un nuevo lenguaje de sistemas auto-alojado llamado 'Rail' ha sido presentado, destacando por eliminar por completo las dependencias de C y ofrecer una arquitectura innovadora. Desarrollado por Zemo-G, Rail se distingue por su compilador (4.687 líneas de código) que genera un binario ARM64 de 729 KB

Fil-C: C/C++ más seguro con nueva técnica

Fil-C es un nuevo enfoque para implementar C/C++ con seguridad de memoria. El proyecto, detallado en corsix.org, busca resolver los problemas de seguridad inherentes a estos lenguajes mediante una transformación automatizada del código fuente. En su modelo simplificado, Fil-C inserta un `AllocationR

De Lisp a Magia: La Evolución de un Recolector de Basura

Este artículo, escrito por Matheus Afonso Martins Moreira, narra la evolución de un recolector de basura llamado 'Baby's Second Garbage Collector', originalmente concebido como una solución simple y precisa en el lenguaje dinámico 'lone lisp'. La historia se presenta de forma alegórica, utilizando m

Java 26: Estabilidad y futuro en la nueva versión

Java 26 ha sido lanzada, marcando un hito importante en el desarrollo de la plataforma Java. Esta nueva versión, que llega seis meses después de Java 25, introduce una serie de mejoras enfocadas en sentar las bases para futuras innovaciones, posiblemente relacionadas con el Proyecto Valhalla. Aunque

SBCL: Hilos Ligeros Mejoran la Concurrencia

Este documento describe una implementación de hilos cooperativos ligeros (fibers) para SBCL, una implementación de Common Lisp. El objetivo principal es proporcionar una alternativa eficiente a los hilos del sistema operativo (OS) para manejar aplicaciones concurrentes, especialmente aquellas con ca

Programación: ¿Siempre es más lento lo de bajo nivel?

Este artículo explora el concepto de "costos ocultos" en la programación, desafiando la idea de que los lenguajes de alto nivel son inherentemente menos eficientes que los lenguajes de bajo nivel como C o C++. El autor observa que los programadores de sistemas a menudo evitan lenguajes con recolecci

Go: Optimiza el rendimiento con la pila

Este artículo del blog de Go explica cómo los desarrolladores están optimizando el rendimiento de Go al realizar más asignaciones de memoria en la pila (stack) en lugar del montón (heap). Las asignaciones en el montón son costosas, requieren código adicional y generan carga para el recolector de bas

Asignador de memoria en Go: cómo funciona

El artículo "The Memory Allocator" de internals-for-interns.com explica cómo funciona el asignador de memoria del runtime de Go, un componente crucial para el rendimiento y la eficiencia del lenguaje. Imagina al asignador como un 'administrador de almacenes': Go necesita 'cajas' (memoria) de diferen

Java optimiza recolección de basura con nueva API

Un nuevo API de Java, incluido en OpenJDK 26, busca optimizar la eficiencia de la recolección de basura (GC) al permitir a los ingenieros cuantificar el costo de CPU asociado. Históricamente, la optimización de GC se centraba en minimizar los tiempos de pausa, pero con los colectores modernos, la re