Go: Nuevo sistema de logs con buffer circular

El artículo de Alex Rios, "Construyendo slogbox", explora la implementación de un manejador de logs (`slog.Handler`) en Go que utiliza un buffer circular (ring buffer) para almacenar los últimos registros de logs. La motivación surge de la necesidad de tener acceso a logs recientes para fines de mon

Surelock: Nueva Biblioteca Rust Evita Bloqueos de Código

Desarrolladores de Rust han presentado 'Surelock', una nueva biblioteca diseñada para eliminar los bloqueos (deadlocks) en el código. Los bloqueos, difíciles de detectar y que pueden causar fallos inesperados en sistemas, son un problema común en la programación concurrente. Surelock aborda este pro

Rust: Compartir datos mutables de forma segura

Este artículo de Alice Ryhl explica cómo compartir estados mutables en Rust, un concepto crucial para aplicaciones concurrentes, tanto síncronas como asíncronas. El problema fundamental es permitir que múltiples hilos (threads) modifiquen el mismo dato de forma segura, evitando condiciones de carrer

Lisette: Nuevo lenguaje fusiona Rust y Go

Lisette es un nuevo lenguaje de programación diseñado para ser sintácticamente similar a Rust pero con un runtime de Go. Su objetivo principal es ofrecer una alternativa que combine la seguridad y expresividad de Rust con la interoperabilidad y el ecosistema maduro de Go. Esto se logra a través de u

Python Async: ¿Determinista? El desafío revelado

El artículo de dbos.dev explora un desafío crucial al desarrollar bibliotecas de ejecución duradera en Python: cómo lograr la determinancia en flujos de trabajo asíncronos. La asincronía, aunque mejora el rendimiento al permitir la ejecución concurrente de tareas (por ejemplo, usando `asyncio.gather

Unity: La 'hack' de corrutinas revelada

Un artículo explora el uso de corrutinas en C++ y cómo Unity, en C#, ha implementado una solución ingeniosa debido a limitaciones históricas en el soporte de `await` en C#. Inicialmente, las corrutinas de C++ han sido poco utilizadas debido a su complejidad y la falta de ejemplos concretos. El artíc

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

Aislamiento en Erlang: ¿Solución o Limitación?

Este artículo explora las limitaciones del modelo de concurrencia basado en aislamiento, utilizando Erlang como ejemplo paradigmático. Erlang, conocido por su robustez y alta disponibilidad (como se evidencia en sistemas como WhatsApp), implementa un modelo de 'actores' donde cada proceso tiene su p

Kovan: Nueva Biblioteca Rust para Gestión de Memoria

Este artículo del blog de vertexclique.com introduce Kovan, una nueva biblioteca de Rust diseñada para abordar un problema crítico en sistemas concurrentes de alto rendimiento: la recolección de memoria wait-free. El problema surge al usar estructuras de datos lock-free, como las proporcionadas por

Futuros bloqueados: un problema oculto en Rust

El artículo "Never snooze a future" aborda un problema sutil pero crítico en la programación asíncrona en Rust: el "snoozing" de futures. En esencia, el snoozing ocurre cuando un futuro está listo para avanzar (es decir, tiene trabajo por hacer) pero no es "polled" (interrogado) por el executor (el

Cómo funciona el planificador de Go

El sistema de planificación (scheduler) de Go es un componente crucial del runtime que gestiona la ejecución concurrente de goroutines, que son funciones ligeras que pueden ejecutarse simultáneamente. Dado que el número de goroutines puede superar con creces el número de núcleos de CPU disponibles,

Go: Contextos cancelados, ahora con más detalles

En Go, los errores de contexto cancelado o vencido son comunes, pero a menudo carecen de información crucial sobre la causa subyacente. Esto dificulta la depuración y la respuesta a incidentes en producción. El artículo aborda este problema, introduciendo las funciones `WithCancelCause` (Go 1.20) y

Scala: Concurrencia optimizada con técnica inspirada en Haskell

Este artículo explora una técnica avanzada para mejorar la concurrencia en Scala, inspirada en el lenguaje Haskell y su biblioteca Haxl. El problema que aborda es cómo optimizar la ejecución de múltiples consultas de datos, evitando una serie de llamadas secuenciales a la base de datos. En Haskell,

Python Asyncio: Errores comunes al compartir estado

Este artículo del blog de Inngest explora un problema común en Python asyncio: la coordinación de tareas concurrentes que comparten estado. La biblioteca estándar ofrece `asyncio.Event` y `asyncio.Condition`, pero ambos tienen limitaciones que se manifiestan bajo presión de concurrencia real. El art

Flujos de trabajo nativos en Go: un desafío resuelto

Este artículo de DBOS.dev explora cómo construir una biblioteca de flujos de trabajo en Go que se sienta natural y familiar para los desarrolladores de Go, abordando las limitaciones inherentes al lenguaje en este tipo de tareas. El desafío principal radica en combinar la potencia de Go (soporte par

Sistemas concurrentes: ¿por qué Erlang sigue siendo clave?

Este artículo de Variant Systems explora por qué los sistemas basados en procesos, como los que utiliza Erlang/Elixir (BEAM y OTP), siguen siendo relevantes y efectivos en la construcción de sistemas concurrentes y distribuidos, especialmente en el contexto de la inteligencia artificial y los agente

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

Lecturas bloqueadas: ¿el cuello de botella oculto?

Este artículo explora una paradoja contraintuitiva en la programación concurrente: en ciertas situaciones, las lecturas bloqueadas (read locks) pueden ser *más lentas* que las escrituras bloqueadas (write locks). El autor, al optimizar una caché de tensores de alto rendimiento llamada Redstone en Ru

Go 1.24: sync.Map optimizado con nueva estructura

A partir de Go 1.24, la implementación interna de `sync.Map` en la biblioteca estándar de Go ha sido rediseñada para mejorar el rendimiento de la concurrencia, utilizando ahora una estructura llamada HashTrieMap. Esta estructura combina una tabla hash con un trie, permitiendo lecturas sin bloqueo (l

C++17: Optimiza el acceso concurrente con shared_mutex

Este artículo explica `std::shared_mutex`, una herramienta valiosa introducida en C++17 que optimiza el acceso concurrente a datos compartidos, especialmente en escenarios de lectura intensiva. Comienza con un ejemplo básico: un contador que se incrementa y se lee por múltiples hilos, utilizando `st

Rust en GPU: Async/await facilita la programación

VectorWare ha anunciado un hito significativo en la programación de GPU: la capacidad de utilizar las características `async/await` de Rust directamente en la GPU. Esto representa un avance importante hacia la visión de la empresa de facilitar a los desarrolladores la creación de aplicaciones de alt

PostgreSQL: Fallos silenciosos en datos financieros

Un artículo de lirbank.com advierte sobre una vulnerabilidad común en bases de datos PostgreSQL que puede llevar a errores financieros silenciosos. Estas 'condiciones de carrera' ocurren cuando dos transacciones concurrentes leen el mismo valor (por ejemplo, el saldo de una cuenta), lo calculan inde

Discord Revela Secretos de su Escalabilidad

Este artículo de Fullstack.zip analiza cómo Discord, una plataforma de comunicación popular, logra su rendimiento, escalabilidad y fiabilidad a gran escala, soportando billones de mensajes. La clave de su arquitectura reside en el uso del **Modelo de Actor**, un patrón de diseño que ha evolucionado

Rust: Hibana asegura protocolos con nuevos tipos de sesión

Hibana es un proyecto innovador para Rust que introduce el concepto de *Tipos de Sesión Multipartita Afines* (Affine Multiparty Session Types - MPST) para garantizar la corrección y seguridad de protocolos de comunicación a nivel de compilador. En esencia, permite que el compilador Rust *pruebe* que

Go: Nueva librería facilita la depuración de bloqueos

Desarrolladores de Go han lanzado 'deadlog', una nueva biblioteca diseñada para simplificar la depuración de bloqueos de mutex, un problema común en aplicaciones concurrentes. La biblioteca, disponible en GitHub, permite a los programadores reemplazar `sync.Mutex` y `sync.RWMutex` con `deadlog.Mutex

Microsoft crea índice más eficiente para bases de datos

La noticia describe BF-Tree, una nueva estructura de índice desarrollada por Microsoft Research que busca optimizar el rendimiento de las bases de datos al reducir la amplificación de escritura y el desperdicio de memoria. BF-Tree reemplaza el almacenamiento en página tradicional de 4KB con mini-pág