komi-learn dota a los agentes de código de memoria continua

komi-learn es una herramienta de código abierto diseñada para dotar a los agentes de codificación (como Claude Code y Codex) de una memoria continua y capacidad de auto-mejora. A diferencia de los asistentes convencionales que olvidan el contexto entre sesiones, komi-learn observa cada sesión de tra

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

Arrays en C: entre datos y punteros

Los arrays en C son una fuente común de confusión para desarrolladores debido a su comportamiento híbrido entre tipos de datos y punteros. Técnicamente, un array `T[n]` representa una secuencia contigua de valores en memoria, pero en la práctica se 'decomponen' (decay) en punteros `T*` en casi todas

Ia aprende a dormir para mejorar su memoria

Los modelos de lenguaje basados en Transformers han revolucionado la inteligencia artificial, pero enfrentan un cuello de botella crítico: su mecanismo de atención no escala eficientemente con el aumento de la longitud del contexto. Este artículo, titulado "Language Models Need Sleep", propone una s

El error ERROR_ARENA_TRASHED: un legado de MS-DOS en la memoria

El código de error ERROR_ARENA_TRASHED, identificado numéricamente como el número 7, es un mensaje de error histórico heredado directamente del sistema operativo MS-DOS. Su relevancia actual reside en la comprensión de cómo funcionaba la gestión de memoria en entornos operativos antiguos, ofreciendo

pc engine: la consola de 8 bits que sorprendió

Este artículo explora la CPU del PC Engine (TurboGrafx-16), una consola de videojuegos lanzada en 1987 que se encuentra en una posición peculiar entre la tercera y cuarta generación de consolas. A pesar de su nombre, la consola no utiliza una CPU de 16 bits, sino una basada en el 65C02, un procesado

Rust optimiza memoria al procesar JSON de AWS

Este artículo del blog de dystroy.org describe una optimización significativa de memoria en un programa Rust que deserializa archivos JSON complejos. El problema original era que el programa, al procesar archivos JSON que representan estructuras de datos de AWS (Smithy Shapes), consumía una gran can

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

Diario de diseño revela claves de Tachyon

Tachyon es un proyecto de software de alto rendimiento, y como todo sistema complejo, sus desarrolladores han tomado una serie de decisiones de arquitectura cruciales a lo largo del tiempo. El repositorio de GitHub que se describe contiene los 'Architecture Decision Records' (ADRs) de Tachyon. Un AD

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

Rust: Maximiza el potencial con menos esfuerzo

El autor ha estado buscando el lenguaje de programación perfecto durante años, frustrado por las limitaciones de opciones populares como F#, TypeScript y C#. Si bien Rust ofrece un gran potencial, su curva de aprendizaje y complejidad (relacionada con la gestión de memoria y el sistema de tipos) han

Menos es más: ¿cuánta memoria contigua es necesaria?

Este artículo de Solidean investiga la cantidad óptima de contigüidad de memoria lineal necesaria para un rendimiento máximo en cálculos de alta velocidad. La sabiduría convencional dicta que la memoria lineal y contigua siempre es la mejor opción, pero este estudio experimental desafía esa idea, de

Entrenan LLM gigante en una GPU: avance tecnológico

El entrenamiento de modelos de lenguaje grandes (LLMs), como GPT-3 o LaMDA, es un desafío computacional enorme. Estos modelos pueden tener cientos de miles de millones de parámetros, lo que requiere una cantidad significativa de memoria y potencia de cálculo. Tradicionalmente, el entrenamiento de es

Go a C: Portan el paquete 'strings'

Este artículo del blog de Anton Zhiyanov detalla el proceso de portar el paquete `strings` de Go al lenguaje C. El objetivo no era crear un compilador Go a C, sino permitir el uso de código Go con la flexibilidad y control de C. La portación comenzó con el paquete `io` y continuó con `bytes` y `str

IA recuerda: Nuevo sistema mejora la memoria de los agentes

Un nuevo sistema de memoria para agentes de IA llamado Hippo-Memory ha sido lanzado, abordando la limitación de los agentes actuales que olvidan el contexto entre sesiones. Hippo-Memory permite a los agentes recordar información de manera persistente y portátil, funcionando como una capa de memoria

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

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

Ohm: Parsing 50 veces más rápido con WebAssembly

El toolkit de parsing Ohm, utilizado para analizar formatos de archivo personalizados y construir parsers, intérpretes y compiladores, ha anunciado una actualización significativa (v18) que aumenta la velocidad de parsing hasta 50 veces en comparación con versiones anteriores. Esta mejora sustancial

GPU Mali: Firmware revela detalles del procesador Cortex-M7

Investigaciones recientes sobre el firmware de las GPU Mali (como la Mali-G610 en el RK3588) han revelado detalles importantes sobre su funcionamiento interno. El firmware se ejecuta en un microcontrolador (MCU) Cortex-M7 que opera a una velocidad impresionante de 990 MHz en el RK3588. Este MCU gest

C++: Cómo funciona el borrado de tipo en std::any

Este artículo explora la técnica de "type erasure" (borrado de tipo), un mecanismo fundamental detrás de la implementación de `std::any` en C++. La idea principal es permitir trabajar con objetos de diferentes tipos a través de una interfaz común, ocultando los tipos concretos subyacentes. El artícu

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,

Booleano en Rust: ¿Cuántas opciones existen?

Este artículo, publicado en la revista técnica experimental "Paged Out!", explora una pregunta aparentemente trivial pero reveladora: ¿cuántas opciones caben en un booleano en Rust? La pregunta surge de una curiosidad inicial y se convierte en una oportunidad para profundizar en los detalles de la r

Linux: /proc/self/mem y la memoria protegida

Este artículo explora un comportamiento peculiar y a menudo desconocido de `/proc/self/mem` en sistemas Linux: la capacidad de escribir en memoria marcada como inescrutable. Normalmente, el sistema operativo impide que el código escriba en áreas de memoria designadas como de solo lectura. Sin embarg

Emacs: Desentrañando el código Lisp en C

Este artículo de The Cloudlet explora la estructura interna de GNU Emacs, específicamente cómo representa los valores de Lisp (Elisp) en C. El objetivo es comprender el diseño del sistema desde una perspectiva de bajo nivel, desglosando el tipo de dato `Lisp_Object`. La pieza se basa en el conocimie

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

Linux optimiza la gestión de memoria swap

El kernel de Linux está modernizando la gestión de memoria swap con la introducción de 'espacios de swap virtuales', un cambio significativo que busca simplificar y optimizar el proceso. Anteriormente, el sistema dependía de una tabla de swap por dispositivo, lo que complicaba tareas como la elimina

Búsqueda eficiente de trillones de vectores: un desafío

Este artículo explora el desafío de realizar búsquedas de similitud vectorial a gran escala, específicamente con 3 mil millones de vectores. El problema surge al intentar encontrar elementos semánticamente similares, una técnica crucial en aplicaciones como búsqueda, recomendaciones y recuperación g

Dada simplifica referencias: una alternativa a Rust

Este artículo del blog explora cómo Dada, un nuevo lenguaje de programación, aborda el manejo de referencias y permisos de una manera innovadora, superando las limitaciones de Rust. Dada introduce un sistema de permisos basado en 'lugares' (places) en lugar de 'tiempos de vida' (lifetimes), lo que s

dos y la memoria: cómo evolucionó su gestión

## Dos y la Memoria: Cómo Evolucionó su Gestión El sistema operativo DOS, fundamental en la historia de la computación personal, ha experimentado una notable evolución en su gestión de memoria, desde sus humildes comienzos hasta la necesidad de soportar mayores cantidades de RAM. Esta evolución, a

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

Julia: Optimiza tu código con estos consejos

Este documento de Julia Language ofrece consejos prácticos para optimizar el rendimiento del código Julia. El objetivo principal es ayudar a los desarrolladores a escribir código más rápido y eficiente. La optimización en Julia se centra en evitar problemas comunes que ralentizan la ejecución, como

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

TAL: Ensamblador seguro para software crítico

## Lenguaje Ensamblador Tipado (TAL): Un Puente Seguro entre Lenguajes de Alto Nivel y Hardware ¿Qué es y por qué es importante? En el mundo del desarrollo de software, especialmente en áreas críticas como sistemas operativos, kernels móviles y aplicaciones que requieren una seguridad extrema, la

Forth: arrays a la carta, sin estándar fijo

Forth, un lenguaje de programación conocido por su flexibilidad, no tiene una implementación estándar de 'arrays' como otros lenguajes. Esto se debe a que Forth facilita la creación de nuevos tipos de datos, permitiendo a los programadores diseñar estructuras que se adapten perfectamente a sus neces

Software moderno: ¿Más grande, menos eficiente?

El artículo "The Apollo 11 Paradox" plantea una crítica contundente a la dirección actual del desarrollo de software, señalando una preocupante tendencia a la ineficiencia y la pérdida de conexión con los fundamentos de la computación. El ejemplo citado, la disparidad entre los 4KB de RAM utilizados

Python: cuidado con la asignación encadenada

Este artículo explora un comportamiento sutil pero común en Python relacionado con la asignación encadenada (chained assignment), y cómo se manifiesta a nivel de bytecode. La asignación encadenada, como en `a = b = []`, puede llevar a errores inesperados porque Python crea *un solo* objeto de lista