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