Présentation

Crystal 1.22.0, publié le 12 octobre 2026, regroupe 251 changements apportés par 33 contributeurs. La version introduit la prise en charge native d’LLVM 23 et 24, promeut aarch64‑linux au rang Tier 1 et propose les toutes premières constructions pour aarch64‑windows‑msvc. Au‑delà de ces évolutions d’infrastructure, le cœur du runtime reçoit deux améliorations majeures : l’émulation du comportement SIGPIPE sur les flux standards et une refonte du parseur DWARF.

Gestion des flux et comportement SIGPIPE

Le runtime intercepte désormais les erreurs EPIPE sur STDOUT et STDERR. Au lieu de lever IO::Error, le processus se termine immédiatement, reproduisant le comportement par défaut du signal SIGPIPE sous Unix. Cette modification simplifie la logique d’erreur dans les scripts qui écrivent vers des pipelines fermés. L’ancien mécanisme reste accessible : la propriété STDOUT.exit_on_broken_pipe = false désactive la sortie immédiate.

STDOUT.exit_on_broken_pipe = false  # désactive le comportement SIGPIPE

Cette option permet aux applications de gérer explicitement les scénarios de rupture de canal, par exemple en nettoyant des ressources avant de quitter.

Optimisation du parsing DWARF et boucle d'événements native

Le parseur DWARF a été réécrit pour charger les sections uniquement à la demande (on‑demand scanning) et construire un index unique. Le résultat est un accès aux informations de débogage « blazingly fast », avec une consommation mémoire réduite grâce à un cache LRU. Le support de DWARF 5, notamment les formes DW_FORM_addrx<n> et DW_FORM_strx<n>, étend la compatibilité avec les compilateurs récents.

Parallèlement, tous les cibles supportent désormais une boucle d’événements native basée sur le sélecteur du système d’exploitation. Sur Solaris, epoll est activé, tandis que les cibles BSD utilisent kqueue. La bibliothèque libevent reste disponible mais devient strictement optionnelle, annonçant une dépréciation future.

Implications pour l’écosystème Crystal

Le support d’LLVM 23/24 ouvre la porte à de nouvelles optimisations de génération de code, notamment pour les architectures récemment promues. La promotion de aarch64‑linux au Tier 1 garantit des builds officiels, réduisant la dépendance aux builds communautaires depuis la version 1.19. Les améliorations HTTP (déplacement de #remote_address et #local_address, ajout de Headers#merge, corrections de parsing) renforcent la robustesse des services web écrits en Crystal.

Enfin, la politique de compatibilité ascendante (RFC 30) impose que la compilation de 1.22 nécessite un compilateur stage‑0 ≥ 1.14, assurant une chaîne de construction cohérente tout en incitant les mainteneurs à mettre à jour leurs environnements.