Por qué el punteado de tipos en C y C++ genera comportamientos indefinidos

El punteado de tipos, que consiste en interpretar la memoria como diferentes tipos entre lecturas y escrituras, es una técnica esencial para la serialización y el acceso a hardware, pero con riesgos críticos de comportamiento indefinido (UB). En C, las únicas formas seguras y definidas son el uso de

Lo bueno de Hacker News: Dan Luu defiende el valor de sus mejores comentarios

Dan Luu, ingeniero de software conocido por sus análisis técnicos detallados, sostiene en un artículo personal que los comentarios de Hacker News (HN) suelen ser mediocres cuando se evalúan sobre temas que él conoce, pero que, paradójicamente, sigue siendo el foro público en internet con la mejor co

La conversión de float a int en C++ puede ser comportamiento indefinido

En C++, convertir un valor en coma flotante a un entero mediante sintaxis tan habitual como `int i = f;` o `static_cast<int>(f)` constituye comportamiento indefinido cuando el valor truncado no cabe en el tipo destino. El estándar lo recoge en la página de conversiones implícitas de Cppreference, do

Reflexiones sobre los tipos enteros en los lenguajes de programación

Este artículo analiza los sistemas de tipos enteros en los lenguajes de programación más extendidos y defiende el enfoque de Rust como modelo más riguroso. El autor repasa cómo C, C#, Go y Swift manejan los enteros: en C, el desbordamiento de enteros con signo es comportamiento indefinido y conviven

Por qué los enteros sin signo deberían ser la elección por defecto

Dale Weiler sostiene que la necesidad de aritmética entera con signo está sobrevalorada, ya que la mayoría de los enteros de un programa —índices de arreglos, contadores de bucles, tamaños— nunca representan valores negativos. El autor defiende el uso preferente de enteros sin signo y rebate los arg

Reify: generador aleatorio de programas para probar compiladores de C

Reify es una herramienta de generación aleatoria de programas basada en reificación semántica, diseñada para poner a prueba compiladores de C y, potencialmente, otras máquinas virtuales. Su propósito es producir funciones y programas en C libres de comportamientos indefinidos (UB), de modo que cualq

Por qué no debes desactivar las aserciones en producción

Este artículo técnico sostiene que desactivar las aserciones en producción es una práctica «irremediablemente mala», y toma como referencia principal el comportamiento de `std.debug.assert` en Zig, aunque su razonamiento se aplica a la ingeniería de software en general. ¿Qué es una aserción? Es una

Knight: Un lenguaje de programación minimalista y peculiar

Knight es un lenguaje de programación minimalista y peculiar, diseñado con una filosofía radicalmente diferente a la de la mayoría de los lenguajes existentes. Su objetivo principal no es facilitar la vida al programador que escribe código, sino simplificar la implementación del propio lenguaje. Est