Cerberus: un modelo formal para esclarecer la semántica de C

El lenguaje C sigue siendo una pieza central de la infraestructura informática, pero su definición formal —el estándar ISO— se ha distanciado tanto de las propiedades que el código de sistemas asume como de las que los compiladores implementan, y ninguna de esas visiones está claramente caracterizad

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

C no es un lenguaje de bajo nivel: las CPU ya no son PDP-11 rápidos

Este artículo, publicado en ACM Queue por David Chisnall (Universidad de Cambridge), sostiene que C dejó de ser un lenguaje de bajo nivel hace décadas y que las vulnerabilidades Spectre y Meltdown son consecuencia directa de los esfuerzos de la industria por mantener esa ilusión. La definición de Al

Los obstáculos reales que impiden reemplazar al lenguaje C

El lenguaje C no solo es un estándar sintáctico: es todo un ecosistema de herramientas, compiladores, analizadores estáticos y soporte multiplataforma consolidado durante décadas. Sustituirlo exige que la alternativa aporte mejoras tangibles que justifiquen rehacer la cadena de producción. Este artí

INT_MAX.md: la vida interior de un entero al borde del desbordamiento

Una narración en primera persona da voz a un entero con signo de 32 bits en Ada, encerrado en el rango de −2.147.483.648 a 2.147.483.647, y relata el instante en que su programador le ordena superar el límite y provocar deliberadamente una excepción. El texto recorre, con tono literario y técnico a

Lambdock: un dock nativo para Wayland configurable en Scheme

Lambdock emerge como una solución técnica distintiva en el ecosistema de escritorio GNU/Linux, posicionándose como un dock nativo para Wayland que combina la eficiencia del lenguaje C con la flexibilidad extrema de GNU Guile Scheme. Desarrollado por jjba23 y alojado en Codeberg, este proyecto no es

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

Comprender a fondo la ABI de C++

# Comprender a fondo la ABI de C++ Cuando un programa se compila y se distribuye como una biblioteca dinámica, existe un contrato invisible que garantiza que el código funcione correctamente al ser enlazado y ejecutado: la Interfaz Binaria de Aplicación, conocida como ABI por sus siglas en inglés.

Lecciones de fiabilidad de SQLite, según su creador Richard Hipp

SQLite es una biblioteca escrita en C que implementa un motor de base de datos relacional autónomo, embebido en proceso y con soporte completo de SQL: incluye un planificador de consultas avanzado y transacciones ACID. Por distintas mediciones, se trata de la biblioteca de software más utilizada del

La regla del reloj: cómo descifrar declaraciones en C

Descifrar declaraciones complejas en C es una habilidad que todo programador del lenguaje puede entrenar con la llamada regla del reloj, también conocida como regla de la espiral. Se trata de un método visual que permite reconstruir de un vistazo qué designa cada identificador dentro de una declarac

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

tiny-c: un lenguaje educativo inspirado en BASIC y estructurado como C

tiny-c es un lenguaje de programación estructurado creado con una vocación formativa que combina la sencillez de BASIC con la arquitectura de C. Diseñado como una herramienta pensada para el aprendizaje, ofrece if-then-else, bucles while, funciones, variables globales y locales, punteros, arrays y d

Diferencias entre API y ABI en bibliotecas de software

Una respuesta de la lista de correo de Debian, firmada por Colin Watson en febrero de 2004, aclara de forma didáctica la distinción entre una API (Application Programming Interface) y una ABI (Application Binary Interface), dos conceptos que suelen confundirse porque ambos describen cómo los desarro

Tether busca desarrollador remoto para su runtime 'Bare'

Tether, la empresa detrás de la stablecoin USDT, ha publicado una oferta de empleo en el hilo 'Who's hiring? Q3 2026' para incorporar a un 'Bare Developer' en remoto a nivel mundial. La persona seleccionada desarrollará addons nativos que conectan APIs de plataforma con JavaScript dentro del entorno

Decomp Academy: curso interactivo para descompilar código de GameCube

Decomp Academy es una plataforma educativa diseñada para enseñar, desde cero, a descompilar ensamblador de la consola GameCube y reescribirlo en C que produce un binario idéntico al original. El servicio plantea un método progresivo: el alumno lee instrucciones en ensamblador, escribe su equivalente

UTFS: un sistema de archivos inspirado en TAR para microcontroladores

UTFS (micro TAR File System) es un sistema de archivos minimalista desarrollado por CLI Systems, pensado para organizar datos en memorias no volátiles de microcontroladores, como flash o EEPROM, con un espacio de direcciones plano. Su objetivo es separar la capa de almacenamiento de las estructuras

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

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

El proyecto de reconstrucción de F-15 Strike Eagle II busca pilotos de prueba

El proyecto abierto de ingeniería inversa que reconstruye en C el código fuente del juego de 1989 F-15 Strike Eagle II, de MicroProse, ha alcanzado un nuevo hito: todo el código C de los tres ejecutables del juego ha sido reconstruido, la mayor parte de los datos ha migrado del ensamblador a C, la m

microui: una biblioteca de interfaz de usuario diminuta en C

microui es una biblioteca de interfaz de usuario (UI) en modo inmediato escrita en C ANSI, distribuida como software libre bajo licencia MIT y desarrollada por el programador conocido como rxi en GitHub. Su propósito es ofrecer un conjunto mínimo de herramientas para construir interfaces gráficas li

Portar un motor de juego en C a WebAssembly: lecciones desde la trinchera

Un desarrollador detalla los problemas técnicos no evidentes que encontró al portar a WebAssembly, mediante Emscripten, su juego Match Morphosis, escrito en C con un motor propio que usa bgfx, SDL2, miniaudio y cimgui. La experiencia sirve como guía práctica para quien enfrente un proyecto similar.

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