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

Presentan Tight-C, el nuevo lenguaje sin recolector de basura que compila a C11

Se ha lanzado Tight-C, un nuevo lenguaje de programación minimalista diseñado para la programación de sistemas. El lenguaje, creado por el desarrollador Alonsovm, compila directamente a código C11 y utiliza únicamente 10 palabras clave: if, loop, break, defer, ret, struct, fn, use, pub y pin. A dife

EndBASIC crea suite de pruebas ejecutables escribir tests en Markdown

Este artículo presenta una suite de pruebas innovadora desarrollada por Julio Merino para el proyecto EndBASIC, donde todos los casos de prueba se escriben en archivos Markdown en lugar de usar código Rust tradicional. Esta metodología surge tras un experimento con agentes de IA que reveló la necesi

El comportamiento indefinido: el error invisible que acecha en todo código C

El artículo aborda un tema fundamental en la programación con C y C++: el comportamiento indefinido (Undefined Behavior o UB). El autor, con más de 30 años de experiencia, argumenta que prácticamente todo código no trivial en C/C++ contiene UB, y que es imposible escribir código completamente correc

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

Spectre: lenguaje con contratos para desarrollo seguro de bajo nivel

Spectre es un nuevo lenguaje de programación diseñado para el desarrollo seguro de sistemas de bajo nivel mediante el uso de contratos. El lenguaje permite definir invariantes a nivel de tipo y precondiciones y postcondiciones a nivel de funciones, ofreciendo seguridad a través de inmutabilidad por

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

Crean máquina de pila para ejecutar lógica computacional

Las máquinas abstractas para programas lógicos son un mecanismo conceptual que permite ejecutar definiciones relacionales como programas computacionales. En términos simples, una regla de inferencia como 'plus 0 N N' o 'plus (s N) M (s P)' define la relación de suma entre números, pero no esintrínse

Rlisp une sintaxis Lisp con el rendimiento sin runtime de Rust

Un desarrollador ha creado rlisp, un nuevo proyecto que combina la sintaxis de Lisp con la semántica y el rendimiento de Rust. La herramienta funciona como un frontal de expresiones S que compila directamente a código Rust, sin necesidad de runtime ni recolector de basura. El proyecto permite utiliz

Let-Go combina Clojure y Go para crear binarios ultrarrápidos de 10MB

Let-Go es un nuevo lenguaje de programación que combina características de Clojure y Go, desarrollado como un compilador de bytecode y máquina virtual. El proyecto destaca por generar binarios standalone de aproximadamente 10MB, logrando un tiempo de arranque en frío de tan solo 7 milisegundos, lo q

IA y código: ¿Adiós a las revisiones manuales?

Un reciente artículo argumenta que las revisiones de código tradicionales se están volviendo imprácticas e incluso irresponsables en la era de los agentes de codificación con IA. El autor propone una analogía con los compiladores: nadie revisa el código ensamblador generado por un compilador, sino q

Compilador C en Zig: Un Proyecto de Aprendizaje

El proyecto 'paella', documentado en ar-ms.me, es una serie de artículos que narran el proceso de construcción de un compilador para el lenguaje C utilizando el lenguaje de programación Zig. El autor, mientras se encontraba en un periodo de transición laboral, se propuso este desafío como un ejercic

IA mejora código ensamblador y acelera rendimiento

Investigadores han demostrado que la inteligencia artificial (IA), específicamente modelos como Grok y Claude, pueden optimizar código en lenguaje ensamblador, logrando mejoras significativas en el rendimiento. Daniel Lemire, investigador, llevó a cabo un experimento donde solicitó a estas IA que op

Nanopass: Nuevo marco agiliza creación de compiladores

Desarrolladores de software ahora cuentan con una nueva herramienta para simplificar la creación de compiladores: el Nanopass Framework. Este marco de trabajo, anunciado por nanopass.org, es un lenguaje específico de dominio (DSL) diseñado para facilitar la construcción de compiladores al enfocarse

Hardware y compiladores: una optimización en conjunto

Este artículo explora la relación entre las optimizaciones de hardware, específicamente la suma de acarreo (Carry-Save Addition), y las optimizaciones de compiladores, como la fusión de bucles (Loop Fusion). La suma de acarreo es una técnica de hardware que acelera la adición de múltiples números bi

Investigación de Lighterra: Referente en Informática

La colección de artículos y papers de Lighterra, liderada por Jason R. C. Patterson, abarca una impresionante variedad de temas en informática, desde el diseño de microprocesadores hasta la optimización de compiladores y la calidad de video en la web. El trabajo de Patterson, a menudo originado como

WebAssembly más rápido: Cranelift optimiza con 'aegraph'

Cranelift, el optimizador de código de la Bytecode Alliance, ha introducido una nueva optimización llamada 'acyclic e-graph' (aegraph) para mejorar el rendimiento de WebAssembly. Esta innovación busca resolver el problema de la ordenación de las fases de optimización en compiladores, donde la inter

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

C++: Revelan detalles inéditos de su historia

La 'C++ History Collection' es un valioso repositorio de documentos, código fuente y otros materiales que narran la fascinante historia del lenguaje de programación C++. Creado y editado por Paul McJones, este recurso ofrece una visión profunda de la génesis, desarrollo, estandarización y evolución

Koru: Nuevo lenguaje desafía el rendimiento de C

Un nuevo lenguaje de programación llamado Koru está sorprendiendo al mundo de la informática al demostrar un rendimiento comparable, e incluso superior en algunos casos, a lenguajes de alto rendimiento como C, Rust y Zig. Según pruebas realizadas por los desarrolladores de Koru, sus 'kernels' (unida

Construyendo un compilador que se compila a sí mismo

El repositorio de GitHub 'acwj' documenta el fascinante viaje de DoctorWkt para construir un compilador auto-compilador para un subconjunto del lenguaje C. Un compilador auto-compilador es un programa que puede compilarse a sí mismo, lo que es un logro significativo en el campo de la informática y d

Compiladores: ¿Más simples de lo que creemos?

El artículo de Golden explora una perspectiva inusual sobre la complejidad de los compiladores de lenguajes de programación. Tradicionalmente, se asume que los compiladores modernos son enormes, con millones de líneas de código que abarcan desde la interfaz de usuario (frontend) hasta la gestión de

Programación con caramelos: nace MNM Lang

Este proyecto, llamado MNM Lang, es una demostración ingeniosa de cómo se puede crear un lenguaje de programación utilizando M&M's (o GEMS, una versión india). La idea surgió de un accidente: el autor derramó un paquete de caramelos que se organizaron en un patrón que le recordó un código. El objeti

Purple Garden: 'match' simplifica la lógica del código

Este artículo del blog de xnacly.me explora la implementación de sentencias `match` (similares a `switch` en otros lenguajes) en un nuevo lenguaje de programación llamado Purple Garden. El objetivo es proporcionar una alternativa a las largas cadenas `if-if-else`, mejorando la legibilidad y la estru

Funciones: abstracciones para simplificar la programación

Este artículo explora la naturaleza de las funciones en programación y cómo los lenguajes modernos manejan la ejecución del código, particularmente en lo que respecta al despacho dinámico y el manejo de errores. Comienza desafiando la noción de que las funciones son entidades reales, argumentando qu

Compiladores: Nueva técnica agiliza el proceso

Los compiladores basados en consultas (Query-Based Compilers o QBC) se han vuelto populares debido a su capacidad para implementar compilación incremental, un aspecto crucial para la experiencia de desarrollo en entornos de IDE modernos donde la respuesta rápida a las ediciones del código es esencia

IA crea emulador: desafío a experimento de Anthropic

Un desarrollador, Antirez, replicó un experimento de Anthropic donde se instruyó a un modelo de IA (Opus 4.6) para escribir un compilador C en Rust. Antirez cuestionó la metodología de Anthropic, especialmente la falta de acceso a documentación y recursos sobre optimización de compiladores. Para dem

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

Mini-lenguajes: programación en código reducido

Este artículo de Taylor Troesh explora el fascinante mundo de los "Lil' Fun Langs", o lenguajes de programación muy pequeños. La idea central es que es posible crear lenguajes de programación funcionales y con tipado estático con una cantidad sorprendentemente baja de código. El artículo no solo pre

Optimizador Toy: análisis de alias para código más eficiente

Este artículo del blog de Bernstein Bear explora una técnica llamada 'análisis de alias basado en tipos' (TBAA) dentro del contexto de un optimizador de código (Toy Optimizer). El objetivo es mejorar la capacidad del optimizador para comprender cómo los diferentes objetos en la memoria interactúan e

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

ACK: El Kit de Compilación Retro que Vuelve

El Amsterdam Compiler Kit (ACK) es una herramienta de compilación completa, un conjunto de herramientas (toolchain) diseñado originalmente en la Vrije Universiteit de Ámsterdam en la década de 1980 y revitalizado por David Given. Su objetivo principal es permitir la compilación de código fuente en e

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