Codificación tagless inicial en Rust con GADT sin coste en tiempo de ejecución

El patrón "tagless final" es una abstracción habitual en programación funcional para construir lenguajes de dominio específico con múltiples intérpretes —evaluación, pretty-printing, optimización— sobre una misma lógica. Este artículo explora su variante "tagless inicial", basada en tipos algebraico

tmpout_v: índice del número 5 de la revista técnica tmpout.sh

tmpout.sh es una revista digital de carácter técnico y experimental centrada en programación a bajo nivel, formatos binarios ELF en Linux x86-64, ensamblador y técnicas de ofuscación, empaquetado y autoextracción de ejecutables. El número 5, fechado el 23 de agosto de 2026 y firmado por el seudónimo

Cómo construir un compilador JIT en 5 microsegundos

Este artículo explica cómo implementar un compilador JIT (Just-In-Time) capaz de generar código ensamblador en aproximadamente 5 microsegundos, un tiempo de compilación muy inferior al de alternativas como LLVM o la generación de C/C++. El autor, desarrollador de la base de datos pgrust, relata que

sectorforth: un Forth de 16 bits para x86 que cabe en 512 bytes

sectorforth es una implementación minimalista de Forth para arquitecturas x86 de 16 bits que cabe íntegra en un sector de arranque de 512 bytes. El proyecto se inspira en un hilo de Usenet de 1996, en particular en la propuesta de Bernd Paysan, y se compone únicamente de ocho primitivas básicas —fet

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

Decodificando el campo inmediato de vcmpps y vcmppd en x86

Las instrucciones SIMD vcmpps y vcmppd comparan pares de números en coma flotante IEEE754 y producen un resultado de un bit por carril. En lugar de escribir flags, codifican en cinco bits (b4…b0) tanto la relación a evaluar como el comportamiento ante NaN. Una codificación ingenua dedicaría un bit a

SIMD en los años 90: programar el Intel Pentium MMX

En 1997 Intel presentó las extensiones MMX (MultiMedia eXtensions) junto al procesador Pentium MMX, un conjunto de 57 instrucciones adicionales pensadas para acelerar gráficos, procesamiento de audio, vídeo y software de módem. MMX no inventó el modelo SIMD (Single Instruction, Multiple Data), pero

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

AttoChess: diez bytes menos reescribiendo pantalla, entrada y peones

AttoChess es una reimplementación minimalista de un motor de ajedrez para DOS que reduce el tamaño del binario en diez bytes respecto al original sin tocar el núcleo del algoritmo de búsqueda. Las cinco optimizaciones actúan sobre los elementos que rodean a ese bucle principal. La mayor ganancia ll

BareMetal-RAM-Dumper: utilidad x86 para volcar la RAM física al disco

BareMetal-RAM-Dumper es una utilidad bare-metal para arquitecturas x86 que arranca desde un disco o una memoria USB y vuelca el contenido completo de la RAM del sistema directamente en el propio medio de arranque, sin necesidad de sistema operativo. La herramienta se apoya en interrupciones del BIOS

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

Una conversión de bool a u32 revela un fallo del optimizador de Rust

El desarrollador Parsa, autor de un blog técnico sobre compiladores y parsers, relata una sesión de refactorización de su motor de JavaScript escrito en Rust en la que una versión 'estética' de una función del lexer provocaba errores de parseo, mientras que una variante menos elegante funcionaba cor

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

slisp: un compilador sencillo de Lisp a ensamblador para Linux/AMD64

slisp es un compilador de Lisp escrito en Go que traduce programas Lisp a ensamblador autónomo para plataformas Linux sobre AMD64. El nombre del proyecto admite dos lecturas: «Simple Lisp» (Lisp sencillo) o «Steve's Lisp» (el Lisp de Steve), según prefiera el lector. El repositorio, alojado en GitHu

El ejecutable Teensy revisado: cómo encoger un ELF conforme al estándar

Este artículo técnico retoma el reto de construir el ejecutable ELF para Linux x86 más pequeño posible, pero esta vez cumpliendo de forma estricta la especificación ELF. Partiendo de una versión previa de 91 bytes, el autor muestra cómo solapar el encabezado ELF y la tabla de cabeceras de programa,

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

Demostración de Buffers: un shader procedural en ensamblador y WGSL

Buffers es una demostración incluida en el proyecto asm-shader-toy, un entorno que permite escribir shaders mediante un dialecto ensamblador propio y compilarlos a WGSL para su ejecución en navegador. El ejemplo combina operaciones trigonométricas —seno y coseno— con las coordenadas del fragmento y

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

El oscuro comando que puede bloquear cualquier procesador

Halt and Catch Fire (HCF) es una expresión del argot de la ingeniería informática que describe un tipo de instrucción de código máquina capable de bloquear completamente un procesador, obligando a reiniciar el sistema. Aunque suenen dramático, el término nació como un chiste entre ingenieros, inspir

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

Desarrollador crea servidor web en ensamblador puro para macOS

Un desarrollador ha creado «ymawky», un pequeño servidor web estático escrito íntegramente en ensamblador aarch64 para macOS, utilizzando raw syscalls de Darwin sin wrappers de libc. El proyecto surge como reto personal para comprender los fundamentos profundos del funcionamiento de un servidor HTTP

Pizza Tycoon: El secreto del tráfico en 25 MHz

Este artículo explora cómo el juego de 1994, Pizza Tycoon, simulaba tráfico en una CPU de tan solo 25 MHz. El autor, quien está reimplementando el juego en código abierto (Pizza Legacy), describe su frustración inicial al crear simulaciones de tráfico mucho más complejas y lentas que la original. La

Rust optimiza ejecución con nuevo intérprete de llamadas

Un desarrollador ha implementado un intérprete con llamadas de cola (tail-call interpreter) en Rust, logrando mejoras significativas en el rendimiento. Este logro, utilizando la nueva palabra clave `become` añadida recientemente a Rust nightly, supera tanto a implementaciones previas en Rust como a

Herramienta facilita verificación de código RISC-V

Un desarrollador ha presentado una nueva herramienta llamada "Knuckledragger" para simplificar la verificación de código ensamblador RISC-V. La herramienta aborda la complejidad inherente a la verificación de ensamblador, un proceso propenso a errores y con herramientas limitadas, especialmente en e

Forth en 1KB: Un intérprete minimalista y experimental

PlanckForth es un proyecto experimental y divertido que consiste en implementar un intérprete de Forth a partir de un binario ELF (Executable and Linkable Format) extremadamente pequeño, de tan solo 1KB, escrito a mano. El objetivo principal no es la utilidad práctica, sino la exploración de cómo se

25 Años de Código: Reflexiones de un Desarrollador

Este artículo narra experiencias personales de un desarrollador de software a lo largo de 25 años. Comienza con una anécdota de su juventud, en 2001, donde un estudiante mayor le enseñó los fundamentos de HTML de manera improvisada. Luego, relata un incidente universitario donde, por curiosidad, sal