Clang es un front end de compilador para los lenguajes de programación C, C++, Objective-C y Objective-C++. Usa LLVM como su back-end y ha sido parte del ciclo de lanzamiento de LLVM desde la versión 2.6.

Ver en Wikipedia

Noticias que mencionan Clang

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

Portar la biblioteca estándar de Go a entornos sin sistema operativo

Un programador que creó Solod, un Subconjunto de Go que se traduce a C, ha logrado portar 37 paquetes de la biblioteca estándar de Go, de los cuales 31 funcionan en modo freestanding, es decir, sin depender de ninguna implementación de libc ni de un sistema operativo concreto. El artículo describe l

Por qué compilar Rust a WebAssembly es lento con información de depuración

Compilar Rust a WebAssembly con información de depuración completa puede resultar hasta 40 veces más lento de lo esperado. Un caso concreto: un programa mínimo de 40 líneas pasa de 1,5 segundos sin depuración a 50 segundos al activar debug = 2 (DWARF completo), el ajuste por defecto del perfil dev d

Una forma más rápida de calcular el día de la semana

Calcular el día de la semana a partir de un día-continuo (rata-die) parece trivial, pero esconde una complejidad inesperada. Este artículo presenta una familia de funciones optimizadas en ensamblador que obtienen el día de la semana con muy baja latencia y alto rendimiento, superando a las solucione

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

mcpp: una herramienta de construcción moderna para C++23 basada en módulos

mcpp es una herramienta de construcción de software pensada desde el origen para proyectos C++23 que usan módulos. Está escrita íntegramente en módulos C++23 y, según sus autores, ya se autohospeda: más de 43 módulos C++23 componen la propia herramienta y se compilan con su propio pipeline, lo que s

Cómo funciona la infraestructura en la nube de Compiler Explorer

Compiler Explorer, el popular sitio web que permite compilar y examinar código ensamblador en el navegador, opera sobre una infraestructura totalmente abierta en Amazon Web Services. Matt Godbolt, su creador, detalla los servicios que intervienen en cada petición del usuario, desde CloudFront y WAF

#embed en C++26: cómo incrustar binarios sin herramientas externas

C++26 incorpora #embed, una directiva de preprocesador que permite incrustar el contenido de un archivo binario —imágenes, certificados, configuraciones por defecto— directamente en el código fuente como una secuencia de expresiones constantes enteras, sin recurrir a herramientas externas como xxd,

build2 iguala e incluso supera a Ninja en velocidad de compilación

El desarrollador del sistema de compilación build2 presenta una comparativa de rendimiento frente a Ninja, considerado la referencia de velocidad en builds de C++. Para una prueba en igualdad de condiciones eligió Xerces-C++, un parser XML en C++ con 299 unidades de traducción, y realizó una compila

Kakehashi: capa de traducción para ejecutar binarios macOS en Linux ARM64

Kakehashi es una herramienta de código abierto escrita en Rust que permite ejecutar binarios de macOS ARM64 (Darwin) sobre Linux aarch64 sin necesidad de emulación completa ni JIT. Funciona como una capa de traducción en espacio de usuario: carga archivos Mach-O, mapea una versión libSystem independ

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++26 reduce el comportamiento indefinido en el núcleo del lenguaje

C++26 marca un avance significativo en seguridad del lenguaje. El comité ha abordado la reducción del comportamiento indefinido (UB) tanto en el núcleo del lenguaje como en la biblioteca estándar. La propuesta P3144R2 convierte en error de compilación la eliminación de un puntero a un tipo incomplet

Construir software de sistemas con Nix: entornos reproducibles para Rust y BPF

Nix es, a la vez, un gestor de paquetes, un sistema de compilación, un lenguaje para definir builds y la base de la distribución Linux NixOS. Su pieza más práctica para equipos de desarrollo son los flakes, que funcionan como un lockfile universal: fijan una revisión concreta del repositorio nixpkgs

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

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

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

clx: un compilador ahead-of-time de Lua con ejecutables nativos en C++20

clx es un compilador y runtime de Lua multiplataforma que genera ejecutables nativos independientes a partir de código Lua mediante cadenas de herramientas modernas de C++. Su objetivo no es competir por ser la implementación más rápida de Lua en todos los escenarios, sino ofrecer compilación ahead-

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

Cobertura binaria por el camino difícil: instrumentar ramas con INT3 sobre KVM

El artículo describe un método poco ortodoxo para obtener cobertura precisa de código en binarios sin código fuente (black-box), inspirado en la necesidad del autor de construir un fuzzer propio sin dynamic recompilation ni un portátil con Intel PT. Explica primero la evolución del fuzz testing: des

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

Cómo se codifican realmente las instrucciones ARM64

Este artículo explica, paso a paso y sobre ejemplos reales ejecutados en Apple Silicon, cómo el procesador ARM64 codifica cada instrucción en una palabra fija de 32 bits. A diferencia de x86, donde las instrucciones pueden ocupar entre uno y quince bytes, AArch64 utiliza siempre cuatro bytes por ins

Fil-C presenta ensamblador inline con seguridad de memoria

Fil-C, una variante de C y C++ con seguridad de memoria desarrollada por pizlonator, incorpora compatibilidad con ensamblador inline manteniendo las garantías de seguridad. La función, aún en fase preliminar y no incluida en el lanzamiento 0.679, requiere compilar desde el código fuente. El proyect

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

Se estrena en YouTube 'C++: The Documentary', crónica de 40 años del lenguaje

El documental 'C++: The Documentary' se estrenó hoy en YouTube con un recorrido por los 40 años de historia del lenguaje de programación C++, desde su creación en los laboratorios Bell de AT&T a manos de Bjarne Stroustrup hasta su actual adopción global. El filme reúne a figuras clave del lenguaje y

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

blqsort: quicksort sin ramas con redes de ordenación en C y C++

blqsort es una implementación de quicksort sin saltos condicionales (branchless) escrita en C y C++ que aprovecha redes de ordenación para clasificar pequeños subconjuntos de datos. El proyecto, distribuido en GitHub como biblioteca de cabecera única, está dirigido a desarrolladores que necesitan ru

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

ChatGPT y Claude hallan errores en compiladores de forma sorprendente

Este artículo detalla un experimento sorprendente sobre la búsqueda de errores en compiladores, utilizando modelos de lenguaje avanzados como ChatGPT y Claude. Justin Lebar, un experto en compiladores con experiencia en Google, Waymo y OpenAI, descubrió que podía encontrar una cantidad significativa

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

ClickHouse presenta Silk: nuevo planificador de fibras para Linux

Silk es un planificador de fibras cooperativas para Linux desarrollado por ClickHouse, diseñado para ofrecer alto rendimiento y concurrencia eficiente en sistemas modernos. Las fibras son corutinas de pila ligera que suspenden en lugar de bloquear sus hilos del sistema operativo, permitiendo concurr

NumExpr multiplica velocidad en cálculos NumPy con optimización multitarea

La biblioteca NumExpr, desarrollada por David M. Cooke, Francesc Alted y otros bajo la dirección del mantenedor Francesc Alted, ofrece aceleración significativa para cálculos numéricos con arrays de NumPy en Python. La herramienta evita asignar memoria para resultados intermedios, lo que mejora el u

Jank crea IR personalizada para optimizar código Clojure

El compilador de Clojure 'jank' ha implementado su propia representación intermedia (IR) personalizada, diseñada específicamente para optimizar el código a nivel de semántica del lenguaje Clojure. Anteriormente, jank delegaba toda la optimización a LLVM, pero debido a que LLVM IR opera a un nivel mu

El misterio de a++ + ++a: por qué el mismo código C da resultados diferentes

El contenido explora el comportamiento indefinido (UB) en expresiones C/C++ que combinan operadores de incremento pre (++a) y post (a++). El caso central analizado es a = a++ + ++a. Se demuestra teóricamente cómo existen múltiples posibilidades de evaluación: el orden de captura de valores y cuándo

Geekbench 6: ¿nueva referencia para medir rendimiento?

Este artículo de Chips and Cheese evalúa Geekbench 6, una suite de benchmarks diseñada para pruebas de rendimiento en sistemas modernos, comparándola con el estándar de la industria SPEC CPU2017. Geekbench, a diferencia de SPEC CPU2017 que se distribuye en código fuente, se entrega en formato binari

Turbo Vision revive: Unicode y compatibilidad moderna

Un desarrollador ha revitalizado Turbo Vision, un marco clásico para interfaces de usuario basadas en texto, con una nueva versión que ofrece soporte Unicode y compatibilidad multiplataforma. El proyecto, iniciado a finales de 2018, busca replicar la funcionalidad del original mientras lo adapta a e

Aplicaciones más seguras: optimizan llamadas al sistema

El artículo de Amit Limaye explora un problema fundamental en la seguridad y eficiencia de las aplicaciones modernas, especialmente aquellas que se ejecutan dentro de contenedores. La mayoría de las aplicaciones, incluso las más simples, se ejecutan sobre un kernel de Linux completo, que ofrece alre

Truco XOR: ¿ingenioso o innecesario?

Este artículo de Heather.cafe desmitifica el truco de intercambio XOR, una técnica de programación que utiliza la operación XOR para intercambiar el valor de dos variables sin necesidad de una variable temporal. Aunque a menudo se presenta como una solución ingeniosa, el artículo explora a fondo su

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

Doom en la terminal: ¡juega con curl!

Un desarrollador ha creado una forma inusual de jugar el clásico videojuego Doom: a través de la línea de comandos utilizando `curl`. El sistema, alojado en un servidor HTTP, transmite los fotogramas del juego como bloques ANSI a la terminal, permitiendo a los usuarios interactuar con el juego envia

WireGuard actualiza: más rápido, estable y moderno

Se ha lanzado una actualización importante para WireGuard en Windows, incluyendo WireGuardNT v0.11 y WireGuard para Windows v0.6. El anuncio, realizado por Jason A. Donenfeld, destaca mejoras significativas en la estabilidad, rendimiento y modernización del código base, eliminando compatibilidades a

Xilem: Nuevo Framework Rust Simplifica Apps Nativas

Desarrolladores han presentado Xilem, un nuevo framework de interfaz de usuario (UI) para Rust que busca simplificar el desarrollo de aplicaciones nativas. Xilem, junto con Masonry (una base para construir frameworks de UI), ofrecen una arquitectura de alto nivel inspirada en React, SwiftUI y Elm. X

Solod: Nuevo Lenguaje Fusiona Go y C para Sistemas

Un nuevo lenguaje de programación llamado Solod (So) ha sido anunciado, diseñado para sistemas que requieren la eficiencia de C pero con la sintaxis y las herramientas de Go. Desarrollado por Solod-Dev en GitHub, So es un subconjunto estricto de Go que se traduce directamente a código C11 legible, e

IA crea codec de video alternativo a H.264

Un equipo de ingenieros simulados por inteligencia artificial, utilizando el agente Claude Code de Anthropic, ha desarrollado un nuevo codec de video experimental llamado vibecoded como alternativa sin patente a los codecs H.264 y H.265. El proyecto, descrito como un experimento de aprendizaje y no

Software: ¿por qué se ignora la portabilidad?

Este artículo aborda una problemática común en el mundo del software de código abierto: la resistencia a la portabilidad a arquitecturas consideradas 'antiguas' o menos relevantes. El autor, un desarrollador con experiencia en portabilidad, critica esta actitud, argumentando que a menudo se basa en

C++: Optimización de 'asin' Acelera Cálculos

Un desarrollador de C++ ha optimizado la función 'asin' (arcoseno) para mejorar el rendimiento, logrando mejoras significativas en algunas plataformas. El ajuste se basa en una técnica llamada 'Estrin's Scheme', que permite al compilador ejecutar operaciones en paralelo, aprovechando la arquitectura

Han: Nuevo lenguaje de programación con claves en coreano

Un nuevo lenguaje de programación llamado 'Han' ha sido desarrollado y se distingue por utilizar palabras clave en coreano, aprovechando el sistema de escritura Hangul. Creado por Xodn y basado en Rust, Han busca ofrecer una experiencia de programación única, combinando la belleza del diseño lingüís

Optimiza tu código C: rendimiento y portabilidad

Este artículo explora técnicas para optimizar el rendimiento de software C, especialmente en arquitecturas x86-64, donde la capacidad de la CPU juega un papel crucial. El problema radica en que el código optimizado para una CPU específica puede no funcionar bien en otras, limitando la portabilidad.

IA escribe código: ¿quién garantiza su seguridad?

La creciente adopción de la inteligencia artificial (IA) en el desarrollo de software, con empresas como Google y Microsoft utilizando IA para generar entre el 25% y el 30% de su código, plantea serias preocupaciones sobre la verificación y seguridad. Recientemente, Anthropic desarrolló un compilado

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

C++: Optimiza el polimorfismo con desvirtualización

Este artículo explora el tema de la 'desvirtualización' y el 'polimorfismo estático' en C++, abordando un problema común de rendimiento en diseños polimórficos. La programación polimórfica, a través de funciones virtuales, permite que el código se adapte a diferentes tipos en tiempo de ejecución. Si

Nuevo algoritmo acelera cálculo de rutas en grafos

Este proyecto, llamado DMMSY-SSSP, representa un avance significativo en la resolución de problemas de camino más corto desde un solo origen (SSSP) en grafos grandes y dispersos. Tradicionalmente, los algoritmos SSSP, como el algoritmo de Dijkstra, se ven limitados por el costo de ordenar los nodos

JWasm: Ensamblador multiplataforma compatible con MASM

Un nuevo ensamblador llamado JWasm ha sido lanzado en GitHub, ofreciendo compatibilidad con el lenguaje MASM y la capacidad de funcionar en múltiples sistemas operativos. Desarrollado por Baron-von-Riedesel, JWasm es compatible con Windows, Linux, DOS y OS/2, y probablemente con otros sistemas opera

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

GPT en C: modelo más rápido para dispositivos

Un desarrollador ha creado una implementación en lenguaje C99 de un modelo GPT de estilo 'character-level', denominado MicroGPT-C, que permite un entrenamiento y generación de texto significativamente más rápidos que las implementaciones en Python. El proyecto, publicado en GitHub, busca ofrecer una

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