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