Apprenez l'assembly x86-64 en écrivant une GUI à partir de zéro

2025-09-16

Cet article détaille le parcours de l'auteur pour apprendre le langage d'assemblage x86-64 en créant un programme GUI simple. En commençant par un programme de sortie basique, l'auteur explique progressivement les appels système, les opérations de pile, le protocole X11 et plus encore, réussissant finalement à afficher une fenêtre avec "Bonjour le monde !" dans un binaire de moins de 1 Ko. L'article est bien structuré et convient aux lecteurs ayant une certaine expérience en programmation.

Lire plus
Développement programmation GUI

Rendre ma build de débogage 100 fois plus rapide : SIMD et silicium dédié à la rescousse

2025-02-18

Lors du développement d'une application torrent en C, l'auteur a rencontré un problème de lenteur du temps de démarrage de la build de débogage (20 à 30 secondes). Cela était principalement dû à la vérification des valeurs de hachage SHA1 pour chaque morceau du fichier téléchargé au démarrage du programme, considérablement ralentie par Address Sanitizer en mode débogage. L'article explore plusieurs techniques d'optimisation, notamment l'utilisation d'instructions SIMD et du matériel d'accélération SHA dédié du processeur. Finalement, en utilisant le jeu d'instructions d'extension SHA d'Intel, le temps de démarrage a été réduit à 866,9 millisecondes, soit une amélioration des performances de 100 fois. L'article détaille l'implémentation et la comparaison des performances de plusieurs approches d'optimisation, en discutant de l'optimisation du compilateur et de l'impact des E/S disque.

Lire plus
Développement

L'API de temporisation multiplateforme insaisissable : un voyage à travers les API du système d'exploitation

2025-02-06

Cet article explore les défis des API de temporisation multiplateformes dans la programmation C. L'auteur découvre que différents systèmes Unix (y compris Linux, FreeBSD, NetBSD, etc.) gèrent les temporisations de manières très différentes. La fonction POSIX timer_create, basée sur les signaux, présente de nombreux problèmes, tels qu'une mauvaise interopérabilité avec d'autres primitives du système d'exploitation et des interférences avec le masque de signal. L'article examine les avantages et les inconvénients de plusieurs solutions, notamment timerfd_create, kqueue, port_create et io_uring, et conclut que, pour les applications multiplateformes, la mise en œuvre des temporisations dans l'espace utilisateur, comme le fait libuv, est une approche plus efficace et fiable. Libuv utilise une structure de données de tas minimal pour gérer les temporisations et utilise des appels système tels que poll/epoll/kqueue pour le multiplexage.

Lire plus