Desmitificando el concepto de tipo en programación

Este ensayo, escrito como complemento de un texto anterior titulado 'Type Theory Weary', cuestiona la necesidad de tratar los tipos como un constructo especial dentro de la informática y la lógica. El autor sostiene que los sistemas de tipos surgieron históricamente para resolver problemas que en su

C3 0.8.3 introduce los feature flags con el atributo @feat

C3, lenguaje de programación de sistemas derivado de C, ha publicado la versión 0.8.3, cuya novedad principal es el atributo @feat, destinado a sustituir al antiguo @if en las declaraciones de nivel superior. Hasta ahora, @if aceptaba cualquier expresión constante en tiempo de compilación, lo que ob

Análisis de ocho años enviando enlaces a Lobsters

El programador Abhinav Sarkar, miembro de Lobsters desde junio de 2018, descargó sus 220 envíos a la comunidad mediante la API JSON del sitio y los sometió a un análisis estadístico. En los primeros seis años su actividad fue muy reducida, pero a partir de mediados de 2024 se intensificó notablement

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

Intérpretes con tail-calls en Rust: cuatro estilos de despacho de VM comparados

Este artículo explica y compara cuatro estrategias para implementar el despacho de instrucciones en una máquina virtual (VM) escrita en Rust, todas basadas en la técnica de interpretación con tail-calls. La técnica consiste en transformar la recursión en un salto en tiempo de compilación, lo que evi

Jolt incorpora imágenes de programa y backends de Scheme portables

Jolt, un lenguaje de la familia Lisp que se ejecuta sobre Scheme, ha incorporado dos funcionalidades derivadas de desacoplar su runtime del host. La primera es la posibilidad de serializar imágenes de programa —al estilo de Common Lisp y Smalltalk—, una especie de caja negra que captura el estado co

Futhark incorpora funciones recursivas tras casi una década sin ellas

Futhark, un lenguaje funcional orientado a la computación paralela sobre datos, ha carecido de soporte para funciones recursivas durante casi toda su existencia. La ausencia no respondía a una postura ideológica contra la recursión —el propio compilador contiene definiciones recursivas—, sino a la f

#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,

Seguridad de memoria práctica: por qué los matices importan

La seguridad de memoria suele presentarse como un concepto difuso y polémico, pero la realidad es más sencilla: puede entenderse como un espectro y, al mismo tiempo, admitir una definición práctica que no depende de tecnicismos. El código verdaderamente seguro es aquel cuyas reglas sobre la memoria

Construimos sin querer un compilador LLVM para JAX

El equipo de PennyLane, una biblioteca de software cuántico, estaba desarrollando Catalyst, un compilador cuántico basado en MLIR, cuando descubrió que su infraestructura podía ejecutar código JAX clásico sin necesidad de instrucciones cuánticas. El decorador @qjit acepta funciones JAX puras con Num

Escribir software recreativo es una alegría

En un momento en el que la inteligencia artificial, la industrialización y la métrica amenazan con arrinconar la dimensión artesana del desarrollo de software, un programador defiende una receta casi olvidada: construir programas «de juguete». El argumento parte de la célebre cita de Richard Feynman

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

Mapeo de bytecode a código fuente: técnicas y rendimiento

Cuando una máquina virtual basada en bytecode genera un error en tiempo de ejecución, necesita traducir el desplazamiento del bytecode a la línea del código fuente que lo produjo. Este artículo, surgido de los retos del capítulo 14 del libro 'Crafting Interpreters' de Robert Nystrom, analiza de form

Conformidad frente a comprensión: el coste de los oráculos ha caído

En un ensayo publicado el 27 de junio de 2026, el ingeniero de software jubilado que firma como "rubys" reflexiona sobre cómo la inteligencia artificial ha transformado la producción de artefactos que antes requerían instituciones, como los oráculos de conformidad. El autor parte de una anécdota de

Paralelización de compiladores: ¿en proceso o multiproceso?

Un diseñador de un nuevo lenguaje de programación plantea una pregunta abierta sobre arquitectura de compiladores: ¿por qué los lenguajes modernos optan por compiladores paralelos en lugar de generar procesos independientes por cada archivo, como hace C? La motivación es pragmática: persigue tiempos

Por qué ML y OCaml son buenas opciones para escribir compiladores

El ingeniero Dwight VandenBerghe sostiene que los lenguajes de la familia ML —especialmente OCaml y, en menor medida, SML/NJ— ofrecen una combinación de características que los hacen especialmente adecuados para desarrollar compiladores. El artículo, publicado en 1998 en el grupo comp.compilers, rep

Cómo Go implementa sus genéricos con GC shape stenciling

Go emplea una técnica intermedia entre la monomorfización completa de Rust o C++ y la borradura de tipos de Java para implementar los genéricos introducidos en Go 1.18: el GC shape stenciling. En lugar de generar una copia del código genérico por cada tipo concreto, el compilador agrupa los tipos se

Spectral Compute quiere liberar a CUDA del hardware de Nvidia

Spectral Compute, una empresa londinense fundada en 2018 por cuatro ingenieros con 60 años de experiencia combinada en optimización para HPC, desarrolla SCALE, un compilador basado en CLang y LLVM que funciona como sustituto directo de NVCC, el compilador CUDA de Nvidia. La herramienta permite recom

Sintaxis con propósito: por qué la forma de un lenguaje refleja su modelo

En este vídeo ensayo, el desarrollador Marcos Magueta sostiene que la sintaxis de un lenguaje de programación no debería ser un conjunto arbitrario de atajos heredados de otros lenguajes, sino un reflejo fiel de las abstracciones que el lenguaje ofrece. La idea central es que cada decisión sintáctic

Rust 1.97.0 adopta el esquema de mangling v0 por defecto en stable

El equipo de Rust publicó la versión 1.97.0 del lenguaje de programación, disponible mediante `rustup update stable`. La novedad principal es la activación por defecto del esquema de mangling v0, específico de Rust, que sustituye al basado en el ABI de Itanium. Hasta ahora, este esquema solo podía h

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

Manual universitario gratuito enseña a construir un compilador desde cero

El profesor Douglas Thain, de la Universidad de Notre Dame, ha publicado un libro de texto en abierto titulado *Introduction to Compilers and Language Design*, pensado para un curso universitario de un semestre. La obra guía al lector en la construcción de un compilador completo para un lenguaje de

Volviendo a Zig: de Rust a Zig tras seis años

Un programador que abandonó Zig por Rust en 2020 por la inestabilidad del lenguaje y la inmadurez de su ecosistema narra su regreso a Zig en 2026. Asegura que, aunque el lenguaje sigue siendo inestable —la versión 0.17 romperá sistemas de compilación— y conserva muchos de sus problemas de antaño, su

Prism: un lenguaje funcional impuro con efectos tipados

Prism es un compilador funcional de prueba de concepto desarrollado por Stephen Diehl durante los últimos tres años. Su propuesta central consiste en modelar los efectos computacionales —mutación, excepciones, generadores, entrada/salida— dentro del sistema de tipos, de modo que el programador decla

Un compilador mínimo para entender cómo se paralelizan los kernels de datos

El artículo describe un compilador experimental de unas 180 líneas de Python, disponible en GitHub, que realiza una fase de "lowering" sobre kernels: transforma bucles `for` convencionales en bucles `vector_for` en los que el paralelismo de datos queda explícito. La entrada es un AST pequeño escrito

La programación en 1992 según un texto recuperado de hace más de tres décadas

Un texto escrito en 1992, recuperado al ordenar un despacho, reflexiona sobre por qué los problemas de la programación informática no se habían resuelto pese a los avances en compiladores. Para ilustrarlo, su autor recurría a un caso de IBM: en la década de 1970, la compañía decidió sustituir su com

CS 6120 de Cornell: curso autoguiado y abierto sobre compiladores avanzados

CS 6120 es un curso de nivel doctoral de la Cornell University, impartido por Adrian Sampson, que ahora se ofrece como itinerario autoguiado y abierto en la web. El programa aborda la implementación de lenguajes de programación desde una perspectiva tanto clásica como de investigación: representacio

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

Numeración de valores: la optimización que reutiliza cálculos idénticos

La numeración de valores (value numbering) es una técnica clásica de optimización de compiladores que identifica instrucciones puras que producirán el mismo resultado en tiempo de ejecución y las fusiona para evitar cálculos redundantes. El artículo parte de la forma SSA (asignación única estática),

Reductores de casos de prueba: herramientas de depuración infravaloradas

Los reductores de casos de prueba son herramientas de depuración capaces de reducir automáticamente un fichero de entrada —código fuente, datos de configuración, cualquier texto— hasta conservar únicamente la versión mínima que reproduce un error. Funcionan combinando un programa, una entrada grande

Gleam 1.17.0 añade soporte para escripts en BEAM

Gleam ha publicado la versión 1.17.0 de su lenguaje de programación, que incorpora la orden `gleam export escript` para generar un único archivo ejecutable que contiene todo el código compilado de un programa en BEAM. Esta funcionalidad, análoga a los paquetes bundle de JavaScript para entornos como

El problema oculto de Go: abstracciones que ralentizan el código crítico

Este artículo explora un problema fundamental en la optimización de rendimiento en Go: la ausencia de abstracciones de costo cero en las rutas críticas de código (hot paths). El autor, al portar el algoritmo Brotli a Go puro para el proyecto go-brrr, descubrió que las abstracciones idiomáticas del l

Knight: Un lenguaje de programación minimalista y peculiar

Knight es un lenguaje de programación minimalista y peculiar, diseñado con una filosofía radicalmente diferente a la de la mayoría de los lenguajes existentes. Su objetivo principal no es facilitar la vida al programador que escribe código, sino simplificar la implementación del propio lenguaje. Est

ELI-512: Nueva arquitectura busca optimizar procesadores

El artículo explora una arquitectura de procesador novedosa llamada Very Long Instruction Word (VLIW), y específicamente, el diseño ELI-512. Para entender su importancia, primero debemos comprender el problema que intenta resolver: la eficiencia en la ejecución de programas. Los procesadores moderno

Desaparece revista clave sobre código C

El 'Journal of C Language Translation' (JCLT) fue una publicación trimestral especializada, con un enfoque muy concreto: el desarrollo de herramientas que procesan y transforman código escrito en los lenguajes de programación C y C++. Aunque hoy en día pueda parecer un nicho muy específico, su impor

Mejoran inferencia de tipos para errores más claros

El artículo presenta un nuevo algoritmo de inferencia de tipos llamado 'Quadratic Micropass Type Inference', diseñado para mejorar la claridad de los mensajes de error en lenguajes de programación con inferencia de tipos. La inferencia de tipos, una característica que permite al compilador deducir e

Pratt Parsing: Analizando código de forma intuitiva

Este artículo explica el 'Pratt Parsing', una técnica ingeniosa para analizar expresiones matemáticas o código, especialmente útil en compiladores. La idea central es que, tradicionalmente, las expresiones (como `a + b * c + d`) se representan en un árbol de sintaxis abstracta (AST) donde los operad

Ohm: Parsing 50 veces más rápido con WebAssembly

El toolkit de parsing Ohm, utilizado para analizar formatos de archivo personalizados y construir parsers, intérpretes y compiladores, ha anunciado una actualización significativa (v18) que aumenta la velocidad de parsing hasta 50 veces en comparación con versiones anteriores. Esta mejora sustancial

Cálculos dispersos: nuevo método optimiza el rendimiento

El cálculo eficiente con datos dispersos (sparse data) es crucial en muchas áreas científicas y de ingeniería, desde simulaciones físicas hasta aprendizaje automático. Sin embargo, optimizar el código para estas operaciones, especialmente en hardware diverso como diferentes GPUs, puede ser extremada

Emacs: Desentrañando el código Lisp en C

Este artículo de The Cloudlet explora la estructura interna de GNU Emacs, específicamente cómo representa los valores de Lisp (Elisp) en C. El objetivo es comprender el diseño del sistema desde una perspectiva de bajo nivel, desglosando el tipo de dato `Lisp_Object`. La pieza se basa en el conocimie

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

Llamadas a funciones: ¿Cuánto cuestan y cómo optimizarlas?

En programación, es común encadenar funciones, donde una función llama a otra. Aunque esto es una práctica habitual, cada llamada de función tiene un costo en términos de rendimiento. Este artículo explora ese costo y cómo los compiladores pueden optimizarlo a través de una técnica llamada 'inlining

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