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