Aprende Assembly x86-64 creando una GUI desde cero

2025-09-16

Este artículo detalla el proceso del autor para aprender el lenguaje de ensamblaje x86-64 creando un programa GUI simple. Comenzando con un programa básico de salida, el autor explica progresivamente las llamadas al sistema, las operaciones de pila, el protocolo X11 y más, logrando finalmente una ventana que muestra "¡Hola, mundo!" en un binario de menos de 1 KB. El artículo está bien estructurado y es adecuado para lectores con alguna experiencia en programación.

Leer más
Desarrollo programación GUI

Haciendo mi compilación de depuración 100 veces más rápida: SIMD y silicio dedicado al rescate

2025-02-18

Al desarrollar una aplicación torrent basada en C, el autor encontró un tiempo de inicio de compilación de depuración lento (20-30 segundos). Esto se debía principalmente a la verificación de valores hash SHA1 para cada pieza del archivo descargado al iniciar el programa, ralentizado significativamente por Address Sanitizer en modo depuración. El artículo explora varias técnicas de optimización, incluido el uso de instrucciones SIMD y el hardware de aceleración SHA dedicado de la CPU. Finalmente, utilizando el conjunto de instrucciones de extensión SHA de Intel, el tiempo de inicio se redujo a 866,9 milisegundos, logrando una mejora de rendimiento de 100 veces. El artículo detalla la implementación y la comparación de rendimiento de varios enfoques de optimización, discutiendo la optimización del compilador y el impacto de E/S de disco.

Leer más
Desarrollo

La Elusive API de Temporizador Multiplataforma: Un Viaje a Través de las APIs del Sistema Operativo

2025-02-06

Este artículo explora los desafíos de las APIs de temporizador multiplataforma en la programación C. El autor descubre que diferentes sistemas Unix (incluyendo Linux, FreeBSD, NetBSD, etc.) manejan los temporizadores de maneras muy diferentes. La función POSIX timer_create, basada en señales, presenta numerosos problemas, como la mala interoperabilidad con otras primitivas del SO y la interferencia de la máscara de señal. El artículo profundiza en los pros y los contras de varias soluciones, incluyendo timerfd_create, kqueue, port_create e io_uring, concluyendo que, para aplicaciones multiplataforma, implementar temporizadores en el espacio de usuario, como lo hace libuv, es un enfoque más eficiente y confiable. Libuv usa una estructura de datos de montón mínimo para administrar temporizadores y usa llamadas al sistema como poll/epoll/kqueue para la multiplexación.

Leer más