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

Sincronización del backend GCC de Rust: un caso de Murphy

El backend GCC del compilador Rust, desarrollado en el repositorio rustc_codegen_gcc, requiere una sincronización constante con el repositorio principal de Rust para mantener la coherencia del código. Este proceso, que utiliza la función git-subtree, ha presentado desafíos significativos que ilustra

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

TXR: un lenguaje de programación para procesamiento de datos y extracción

TXR es un lenguaje de programación pragmático y versátil, diseñado para facilitar el procesamiento de datos y la extracción de información desde fuentes de texto arbitrarias. Desarrollado desde 2009, su manual de referencia, de 778 páginas, lo posiciona como una herramienta robusta para tareas de 'h

Re4: decompilación byte a byte de Resident Evil 4 para GameCube

Re4 es un repositorio de código abierto que presenta una decompilación completa y byte a byte del videojuego Resident Evil 4 para Nintendo GameCube. El proyecto se centra en la versión de depuración G4BE08, un prototipo de noviembre de 2004 que incluye dos discos de datos. El objetivo principal es r

Análisis técnico del tamaño y coste de desarrollo de GNU/Linux

Este artículo técnico analiza la magnitud del código fuente en GNU/Linux utilizando la distribución Red Hat Linux 7.1 como referencia. El estudio estima que desarrollar esta distribución mediante métodos propietarios convencionales en Estados Unidos (en dólares de 2000) requeriría más de 1.000 millo

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

Cómo GCC implementa las funciones anidadas

Las funciones anidadas son una extensión histórica del lenguaje C en GCC que permite definir una función dentro del cuerpo de otra. Este artículo analiza en detalle el mecanismo interno que emplea el compilador para que una función an acceda a las variables de su función padre. La pieza clave es una

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

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

Las especificaciones formales no existen para la mayoría del software

Artículo explicativo sobre por qué los métodos formales de verificación no pueden aplicarse de forma generalizada al software actual. El autor parte de una hipótesis central: una vez que se dispone de una especificación formal de calidad, verificar un sistema resulta costoso pero no difícil; el verd

Guía técnica para crear ejecutables ELF extremadamente pequeños en Linux

Este documento técnico detalla los métodos avanzados para reducir el tamaño de los ejecutables en formato ELF (Executable and Linkable Format) en sistemas operativos Linux, específicamente bajo la arquitectura Intel x86. El objetivo principal es eliminar el exceso de bytes y la sobrecarga innecesari

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

Añadir compilación JIT a un intérprete de juguete con libgccjit

En el mundo de los lenguajes de programación, la compilación en tiempo de ejecución (JIT) permite que un programa se traduzca a código máquina mientras se ejecuta, lo que puede mejorar notablemente el rendimiento. Este tutorial, cuarta parte de una serie, explica cómo añadir esta capacidad a un inté

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

Cómo desarrollé un compilador de C y un navegador web para Am29000

Entre finales de 1998 y principios de 1999, Oscar Toledo G., programador mexicano, construyó desde cero un compilador de C y un navegador web para su computadora casera basada en el procesador Am29000, un chip RISC de 32 bits de AMD. El autor ya había desarrollado para esa máquina un sistema operati

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

Cómo compilar un cross-compiler para Itanium y ejecutar Windows XP en QEMU

Un blog técnico detalla el proceso para construir un compilador cruzado para Itanium en macOS y arrancar Windows XP 64 bits sobre una bifurcación de QEMU con emulación del procesador Merced. El autor parte del fork de Malte Kuhlmann sobre el trabajo previo de syunnPC, que añade soporte funcional de

Avances en gccrs para compilar el núcleo Linux con GCC

El proyecto gccrs, que desarrolla un frontend de Rust para el compilador GCC, dedicó la primera mitad de 2026 a intentar compilar el núcleo Linux, un esfuerzo que ha permitido detectar y corregir múltiples fallos en el compilador. Aunque de momento gccrs solo puede manejar programas sencillos y autó

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

Cómo compilar GCC 1.27 en Ubuntu de 64 bits

Este artículo explica paso a paso cómo compilar la versión 1.27 del compilador GCC, publicada en 1988 y primera en ofrecer soporte para la arquitectura x86, sobre un sistema Ubuntu de 64 bits moderno. El autor parte del trabajo previo de Mikhail Maltsev, que documentó la compilación de un compilador

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

Escribir un programa en C válido sin función main(): tutorial paso a paso

Este tutorial técnico de iximiuz Labs muestra cómo construir un ejecutable en C que prescinde de la función main() y, opcionalmente, de toda la biblioteca estándar, recurriendo directamente a las llamadas al sistema del kernel de Linux. El recorrido parte de un programa «Hola, mundo» convencional co

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

Cron jobs en C desde cero: un tutorial práctico

Daniel Hirsch presenta una sesión de programación de algo más de una hora en la que construye desde cero un ejecutor de tareas programadas (cron jobs) en lenguaje C. El vídeo está dirigido a estudiantes y desarrolladores que quieran comprender el funcionamiento interno de las tareas automáticas en s

Cómo montar un entorno de desarrollo para AmigaOS en 2026 sobre Linux

Daniel Kochmański publica una guía paso a paso para configurar en Linux un entorno completo de desarrollo cruzado para AmigaOS, válido en 2026 y dirigido a usuarios familiarizados con la compilación desde código fuente. El artículo explica cómo construir la toolchain amiga-gcc (ramas amiga16.1 para

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

El código abierto sostuvo el progreso digital; la IA no debería cerrarlo

David Siegel, colega de Richard Stallman en el Laboratorio de IA del MIT, reconstruye cómo hace cuatro décadas el principio de software libre —expresado en el compilador GCC y en el sistema GNU/Linux— se convirtió en la base invisible de la industria tecnológica. Tras cerca de dos años de discusión,

Avances en GCC para eliminar los trampolines de las funciones anidadas en C

Las funciones anidadas de C —un caso particular del lenguaje soportado por GCC— han dependido históricamente de un fragmento de código auxiliar llamado trampolín que se genera en tiempo de ejecución sobre la pila. Para poder alojarlo, la pila debía ser ejecutable, algo que choca con una de las medid

Cómo compilar GDC en FreeBSD usando DMD gracias a un pequeño wrapper

GDC, el frontend de D para el compilador GCC, no dispone de un paquete oficial en FreeBSD. El Dr. Brian Robert Callahan necesitaba esa herramienta como soporte de su investigación y, ante la ausencia de documentación práctica, documenta él mismo el procedimiento que ideó para compilarla en el sistem

Borrado de tipos en C++26 con reflexión: la librería duck lo simplifica

La librería rjk::duck, publicada como un único header, aprovecha las anotaciones y la metaprogramación por reflexión introducidas en C++26 para implementar borrado de tipos sin la verbosidad habitual. En lugar de escribir a mano cientos de líneas de código propensas a errores —o recurrir a alternati

Un compilador de Rust completo, traducido a C y compilable con GCC

El repositorio crustc, publicado en GitHub por FractalFir, contiene una traducción completa del compilador rustc a código C, de modo que puede construirse con GCC y make sin necesidad de rustc como binario anfitrión. El proyecto sirve como demostración pública de cilly, una herramienta en desarrollo

La vida antes de main en Rust: inicialización y secciones de enlace

El artículo técnico 'There Is Life Before Main in Rust' explora en detalle lo que sucede antes de que se ejecute la función `main()` en un binario compilado con Rust. Se describe cómo el sistema operativo entrega el control al programa a través de un punto de entrada (`_start` o `WinMainCRTStartup`)

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

Cómo reducir al mínimo un binario en C con GCC

Este artículo analiza paso a paso cómo reducir el tamaño de un ejecutable ELF en x86-64 compilado con GCC partiendo de un programa mínimo que simplemente devuelve 0 al sistema. El autor, mediante una serie de iteraciones con banderas del compilador y código ensamblador inline, consigue reducir el bi

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

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

IA avanzada: ¿acceso limitado frena innovación?

La reciente aparición de modelos de lenguaje grandes (LLM) avanzados como Mythos, que supuestamente pueden identificar vulnerabilidades de seguridad, ha generado preocupación por la restricción del acceso a estas herramientas poderosas. El autor, un programador desde la infancia, reflexiona sobre có

División rápida: optimización en sistemas de 64 bits

Este artículo de investigación aborda un problema de optimización en la programación de computadoras: la división de números enteros sin signo de 32 bits por constantes en arquitecturas de 64 bits. Aunque la división por constantes es una operación común, su implementación eficiente puede ser un cue

QEMU: pruebas con sistemas big-endian

En el mundo de la informática, los términos *big-endian* y *little-endian* describen el orden en que se almacenan los bytes de un valor en la memoria. Imagina el número hexadecimal 0x12345678, compuesto por cuatro bytes. En un sistema *little-endian* (el más común, como los ordenadores personales y

Fatal Core Dump: Resuelve un misterio con código

Fatal Core Dump es una experiencia interactiva única que combina un misterio narrativo con la depuración de código real. En un futuro cercano, tras una catástrofe relacionada con el año 2038 (un problema de desbordamiento de enteros que afecta a sistemas que usan representaciones de tiempo de 32 bit

C++26: Reflexión impacta el tiempo de compilación

Un desarrollador ha explorado el impacto en el tiempo de compilación de la nueva característica de reflexión de C++26 (C++26 Reflection). Los resultados iniciales indican que, aunque la propia característica de reflexión tiene un impacto mínimo en el tiempo de compilación, su uso conlleva una signif

Singleton en C++: Optimización para Mejor Rendimiento

Este artículo de Andreas Fertig explora cómo optimizar el rendimiento de la implementación de un Singleton en C++. Un Singleton es un patrón de diseño que asegura que solo exista una instancia de una clase, controlando su acceso. El artículo se basa en un ejemplo práctico: un Display Manager (como G

Compiladores: ¿Siempre dan el mismo resultado?

El artículo explora la pregunta de si los compiladores son deterministas, un tema crucial en el desarrollo de software, especialmente con la creciente integración de modelos de lenguaje grandes (LLMs). La respuesta, según el autor, depende de si se considera desde una perspectiva teórica (ciencia de

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

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

IA compila Linux: Anthropic desafía a GCC

Anthropic ha desarrollado un compilador de C llamado CCC (Claude’s C Compiler), construido íntegramente con Claude Opus 4.6, un modelo de lenguaje de IA. El objetivo era verificar la afirmación de que CCC podía compilar el kernel de Linux, un logro significativo dada la complejidad de los compilador

Mejor C: 6 Claves para Código Eficiente

El artículo explora seis reflexiones sobre la generación de código C, desde la perspectiva de un desarrollador de compiladores. Se destacan técnicas para mejorar la calidad y eficiencia del código generado, incluyendo el uso de funciones `static inline` para la abstracción de datos y evitar penaliza

Fedora: Error en actualización afecta a DOOM

Este artículo relata un problema inesperado encontrado al actualizar paquetes de software para Fedora Linux, específicamente relacionado con el juego clásico DOOM y su derivado Chocolate-DOOM. El incidente, denominado humorísticamente "The little bool of doom", surge durante un 'Mass Rebuild', un pr

Tiny C Compiler: Supera a GCC en Velocidad y Tamaño

Un nuevo compilador de C llamado Tiny C Compiler (TCC) está superando significativamente al compilador GCC en velocidad y tamaño. Desarrollado por Fabrice Bellard, TCC es notablemente pequeño (alrededor de 100KB para x86), lo que permite su uso en entornos con recursos limitados como discos de resca

ga68: Reviven Algol 68 con Compilador para GCC

## FOSDEM 2026: Descubriendo ga68, el Compilador Algol 68 para GCC **¿Qué es Algol 68 y por qué deberíamos prestarle atención?** Algol 68 es un lenguaje de programación histórico, diseñado a mediados de la década de 1960 como sucesor de Algol 50. Aunque nunca alcanzó la popularidad de otros lengua

Compilador de OpenAI falla con 'Hola Mundo'

Un nuevo compilador de código C, denominado 'Claudes-C-Compiler' (CCC), desarrollado por OpenAI, ha fallado al intentar compilar un programa básico de 'Hola Mundo', según reportes recientes. El problema, detectado en diferentes entornos (Fedora 43, Ubuntu 26.04 y Fedora 42), impide que el compilador