La instrucción vfmaddrnd231pd no existe en la CPU de Intel

La instrucción vfmaddrnd231pd, documentada en el Software Development Manual (SDM) de Intel, no es ejecutable en las CPU actuales. Aunque el manual describe una operación de multiplicación y adición fusionada (FMA) con control de redondeo por instrucción, la implementación real ha sido retirada del

Incompatibilidades entre el estándar C y las implementaciones de GCC y Clang

El lenguaje C, aunque estandarizado, presenta divergencias significativas entre su especificación teórica y las implementaciones prácticas de compiladores como GCC y Clang, así como de librerías como glibc y musl. Esta discrepancia afecta la portabilidad y la conformidad del código, especialmente en

Las ramas ocultas en el código constante de tiempo en RISC-V

El código escrito para ser constante de tiempo (constant-time) suele generar instrucciones de rama condicional en arquitecturas como RISC-V, comprometiendo la seguridad contra canales laterales. Este artículo técnico analiza cómo compiladores como Clang y GCC emiten ramas en operaciones aritméticas

Cómo el borrado de secretos puede generar fugas de datos

La práctica habitual de eliminar secretos de memoria tras su uso puede, paradójicamente, aumentar la superficie de ataque si no se implementa con precisión. El uso ciego de funciones de borrado, como memset() o funciones opacas, introduce copias no deseadas en la memoria que persisten tras la ejecuc

Estructuras de datos genéricas y seguras en C mediante uniones

El artículo técnico detalla una técnica para implementar estructuras de datos genéricas y seguras de tipos en el lenguaje C, utilizando uniones para asociar información de tipo con la estructura de datos. El autor, que no encuentra esta aproximación ampliamente documentada, la ilustra mediante la im

El complemento de true es true en C++: un error de conformance en GCC

El artículo técnico analiza una anomalía en el comportamiento de las operaciones de complemento de bits en C++ cuando se aplican a tipos bool y enums. Según el estándar, el complemento de true debería ser true, pero en GCC se obtiene false, lo que constituye un error de conformance. El texto explica

Un desarrollador abandona la escritura manual de código por la IA

Un desarrollador de experiencia de 18 años ha dejado de escribir código manualmente, citando la adopción de herramientas de inteligencia artificial como el factor determinante. Tras años de práctica manual, el autor describe cómo la integración de asistentes como Claude Code y otros modelos de lengu

EDG C/C++: compilador de código abierto con compatibilidad total

El proyecto EDG C/C++ es un compilador de código abierto centrado en el desarrollo de un front end que garantiza la compatibilidad de compilación con Clang, GCC y MSVC. Su principal característica es la emulación de errores, lo que permite que el código fuente que funciona en otros compiladores tamb

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

C++26 define bucles infinitos triviales como comportamiento definido

C++26 corrige una ambigüedad en el estándar que clasificaba como comportamiento indefinido (UB) los bucles infinitos triviales, como `while (true);`. Esta modificación, respaldada por la propuesta P2809R3, establece que estos bucles son ahora bien definidos, lo que impide que los compiladores los op

Optimizaciones del compilador eliminan protecciones de seguridad en código C

Investigadores de seguridad revelaron en la conferencia Black Hat USA 2026 que las optimizaciones legítimas de los compiladores pueden eliminar protecciones de seguridad en binarios de código C, incluso cuando el código fuente sigue las mejores prácticas. Chris Domas, investigador de seguridad, expl

Limitaciones de ThreadSanitizer en la detección de carreras de datos

ThreadSanitizer (TSan), el detector de carreras de datos estándar en compiladores como Clang, GCC y Go, presenta limitaciones arquitectónicas significativas que pueden llevar a omitir errores críticos. Aunque TSan es la herramienta predominante para identificar condiciones de carrera en código concu

jank mejora sus errores y lanza un repositorio oficial de paquetes nativos

jank ha ampliado su sistema de errores en C++ con trazas de excepciones en tiempo de ejecución, páginas de ayuda y mensajes más claros para resolver ambigüedades entre funciones candidatas. El compilador combina información de depuración del ejecutable actual, archivos compilados con anticipación y

Cómo evitar std::move en C++ y aun así mover objetos

Mover objetos en C++ rara vez exige escribir std::move de forma explícita: el propio lenguaje y el compilador ya se encargan en la mayoría de los casos, y recurrir a movimientos manuales solo cuando hace falta produce código más limpio y, en ocasiones, más rápido. La técnica preferible es la elisión

Errores de aliasing en BPF al usar vmlinux.h y CO-RE

Un cambio menor en un programa BPF, sustituyendo cabeceras del kernel por definiciones generadas con BTF (vmlinux.h), provocó fallos silenciosos en la validación de sumas de verificación L3. El problema no residía en la lógica de cálculo, sino en una optimización agresiva del compilador Clang basada

Técnica para evitar pila ejecutable en funciones anidadas de GCC

Martin Uecker detalla una técnica avanzada para gestionar funciones anidadas en compiladores GCC antiguos sin requerir una pila ejecutable, un problema común al usar callbacks. Aunque GCC 17 y Clang introducen macros específicas para este fin, los desarrolladores que deben soportar versiones previas

Mejoras de tiempo de compilación en LLVM 23: del -6,75% al detalle interno

LLVM 23 reduce el tiempo de compilación un 6,75% en compilaciones -O3, con un descenso del 10,53% en el caso concreto de sqlite3, según los datos del propio proyecto. La mayor parte de la ganancia procede de tres reformas de las tablas hash que LLVM utiliza intensivamente: el paso de sondeo cuadráti

Por qué el ensamblador inline de Odin es el mejor frente a GCC, Clang y Rust

El lenguaje Odin incorpora un ensamblador inline diseñado desde cero, no añadido como un parche sobre una cadena de texto. A diferencia de las soluciones de GCC, Clang o Rust —basadas en plantillas de texto y restricciones tipo DSL—, el sistema de Odin trata el ensamblador como plantillas asm invoca

Un experimento reducido compara RVA23 y ARMv9

Un experimento reducido comparó el tamaño del código, el volumen dinámico de instrucciones y el número de microoperaciones generado por RISC-V y ARMv9. La prueba utilizó chibicc, un compilador de C de tamaño medio, compilado consigo mismo como carga de trabajo. Los binarios se evaluaron con RVA22, R

La optimización de tail calls en C es un avance relativamente reciente

La optimización de tail calls (llamadas de cola) en el lenguaje C no existía desde siempre, según argumenta un comentario firmado por anton (anton@) en LWN.net. La convención de llamadas de C exigía que el llamante retirase los argumentos de la pila tras la llamada, lo que convertía estas llamadas e

Una ambigüedad del estándar C89 que nunca se resolverá

El autor documenta una ambigüedad nunca resuelta del estándar C89/C90 sobre las declaraciones implícitas de funciones, una característica del lenguaje eliminada en C99. Explica que, cuando se invoca una función no declarada, el compilador la inserta en el ámbito como extern int () en lugar de produc

Por qué Clang triplicó el rendimiento de un validador UTF-8 y GCC no

El autor, Nemanja Trifunović, mantiene desde 2006 una biblioteca C++ de código abierto para manejar cadenas UTF-8 y recientemente reoptimizó su función validate_next, que decodifica un code point UTF-8 a partir de un iterador de bytes. La versión original determina la longitud de la secuencia según

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

All Your Codebase: paquetes C/C++ listos para el sistema de build de Zig

All Your Codebase es una iniciativa que empaqueta proyectos C y C++ para el sistema de build de Zig, permitiendo compilarlos y compilarlos cruzadamente con un único comando. La organización aloja repositorios que sustituyen las cadenas de herramientas tradicionales (Make, CMake, autoconf, scripts de

El modelo de código grande no puede con el TLS

Un análisis técnico demuestra que la opción -mcmodel=large de GCC y Clang, pensada para compilar binarios enormes sorteando los límites de direccionamiento de 32 bits, falla de forma sistemática con variables thread-local (__thread) y, por extensión, con la inmensa mayoría del software C/C++ real de

scriptc: compilador de TypeScript a ejecutables nativos sin motor JavaScript

scriptc es un compilador experimental, desarrollado por vercel-labs, que traduce código TypeScript ordinario a ejecutables nativos pequeños y rápidos, sin necesidad de Node ni de un motor de JavaScript incluido en el binario. La promesa central es que el mismo TypeScript que se ejecuta sobre Node —t

Las trampas de analizar declaraciones con inferencia de tipos en C

En C moderno, la palabra clave auto permite declarar variables con tipo inferido, pero su análisis sintáctico encierra ambigüedades que enfrentan a GCC y Clang en sentidos opuestos. Cuando en un ámbito interno existe un typedef con el mismo nombre que el identificador de la declaración, ambos compil

Ni GCC ni Clang cumplen el estándar de C++ en el enlace de lenguajes

En C++, los tipos de función llevan asociado un «enlace de lenguaje» (language linkage) que puede ser «C++», «C» u otro definido por la implementación. El estándar establece con claridad que dos tipos de función con enlaces de lenguaje distintos son tipos diferentes aunque su firma sea idéntica, pre

Tu código es rápido… solo si el compilador te deja

El programador Christof Kaser presenta `sort.h`, una implementación de Quicksort sin ramas basada en el principio de que los compiladores modernos —especialmente Clang— traducen bucles con operadores condicionales en instrucciones branchless rápidas, siempre que el código fuente esté escrito con el

Cpp2Rust: traductor automático de C++ a Rust seguro

Cpp2Rust es una herramienta de código abierto que traduce código C++ a Rust completamente seguro de forma automática. Funciona como un traductor dirigido por la sintaxis que toma como punto de partida el árbol de sintaxis abstracta (AST) generado por clang. Tras recorrer dicho AST, la herramienta em

Un programador porta Doom a su máquina virtual UVM con ayuda de IA generativa

Maxime Chevalier-Boisvert retomó su proyecto personal UVM, una máquina virtual minimalista basada en bytecode con pila que abandonó a principios de 2023, y se propuso compilar software real en ella. Hasta ahora, programar para UVM exigía usar su lenguaje ensamblador propio o ncc, un compilador de ju

LLVM, la infraestructura de compiladores que sostiene la informática moderna

El artículo repasa la historia, el diseño y el impacto de LLVM, la infraestructura de compiladores de código abierto nacida en 2000 como proyecto de investigación en la Universidad de Illinois Urbana-Champaign y publicada por primera vez en octubre de 2003. Financiada inicialmente por la Fundación N

Optimización de push_back en SmallVector de LLVM: ruta rápida sin frame

LLVM, el compilador de Clang, ha introducido una optimización en SmallVector::push_back para tipos aproximadamente copiables triviales, su operación más caliente. Antes, la ruta rápida del push_back reservaba capacidad, almacenaba el elemento y luego llamaba a grow_pod, lo que obligaba a guardar thi

C++26 elimina el veto al constexpr en la herencia virtual

C++26 da un paso más en la trayectoria de expansión de constexpr, la palabra clave que permite evaluar expresiones en tiempo de compilación. La propuesta P3533R2, autoría de Hana Dusíková, levanta una de las últimas restricciones sintácticas: la prohibición de declarar constexpr los constructores y

Por qué odio los compiladores: la odisea de los builds reproducibles en Anubis

Este artículo relata los problemas técnicos que el autor, desarrollador del proyecto Anubis, tuvo que resolver para integrar comprobaciones de prueba de trabajo basadas en WebAssembly con fallback a JavaScript puro. La idea es definir la lógica de comprobación una sola vez y compilarla a JavaScript

El algoritmo de rotación de gcc coincide con el de iteradores forward

El algoritmo de rotación unidireccional de gcc libstdc++ para iteradores de acceso aleatorio resulta ser, contra toda expectativa, el mismo que el algoritmo clásico empleado con iteradores forward. Así lo explica el blog técnico The Old New Thing en una nueva entrega, donde compara ambos procedimien

GCC 16 se acerca a la paridad con LLVM en soporte para BPF

José Marchesi y los desarrolladores de GCC-BPF abrieron la sesión sobre BPF en el Linux Storage, Filesystem, Memory-management, and BPF Summit 2026 con un repaso de 90 minutos sobre los avances del último año en el soporte de BPF en la cadena de herramientas GNU. GCC estaría cerca de alcanzar la par

Desarrollan herramienta para BPF en Go: más fácil y eficiente

Un nuevo proyecto llamado 'gobee' permite a los desarrolladores escribir programas BPF (Berkeley Packet Filter) en Go, en lugar de C. Esta herramienta transpila un subconjunto estricto de código Go a BPF C, generando también enlaces de Go tipados para el espacio de usuario y verificando la compatibi

LFortran compila fpm: avance clave para su beta

LFortran ha logrado compilar con éxito el Fortran Package Manager (fpm), un proyecto complejo que ha permitido identificar y corregir numerosos errores y carencias en el compilador. Este logro, completado el 7 de febrero de 2026, marca un hito importante en el desarrollo de LFortran, acercándolo a s

Clang y GCC adoptan 'defer' para simplificar limpieza de código

La funcionalidad 'defer', una herramienta para gestionar la limpieza de recursos y evitar fugas de memoria en código C, está ahora disponible en el compilador Clang a partir de la versión 22, y está en proceso de integración en GCC. La especificación técnica (TS 25755) ha sido completada y está ava

C: Nueva herramienta evita errores de memoria

`fbounds-safety` es una extensión para el lenguaje C que busca abordar un problema crítico: los accesos a memoria fuera de los límites (out-of-bounds, OOB). Estos accesos son una fuente común de vulnerabilidades de seguridad en C, y esta extensión tiene como objetivo eliminarlos convirtiendo estos a

Swift 6.0: Retraso por Problemas Técnicos

El desarrollo de Swift 6.0 enfrenta importantes obstáculos técnicos que impiden su lanzamiento estable, según un análisis detallado publicado en GitHub por LadybirdBrowser. La lista de problemas abarca desde incompatibilidades con LLVM, errores en la gestión de tipos opcionales entre Swift y C++, ha

ROX: Nuevo Lenguaje Busca Simplificar la Programación

Un nuevo lenguaje de programación llamado ROX ha sido desarrollado con el objetivo de priorizar la claridad sobre la comodidad. Creado por Taman-Islam y disponible en GitHub, ROX busca eliminar las complejidades inherentes a muchos lenguajes, como conversiones implícitas, operadores sobrecargados y

Compiladores GCC y Clang: Código Ineficiente con Arrays

Investigadores han descubierto comportamientos inesperados e ineficientes en el código generado por los compiladores GCC y Clang al trabajar con arrays de diferentes tamaños. El problema surge al verificar si un array contiene solo ceros, una tarea aparentemente sencilla. Al variar el tamaño del arr