3 points par bus710 12 일 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Publié le 14 avril 2026. Cette sortie est le fruit de 1 183 commits réalisés sur 8 mois par 244 contributeurs.

I/O comme interface — le cœur de cette version

C’est le plus grand changement de cette version. Presque tout ce qui peut bloquer, comme le système de fichiers, le réseau, les timers ou la synchronisation, a été regroupé dans la nouvelle interface std.Io. Tout comme l’allocation mémoire nécessite un Allocator, le code qui utilise des E/S doit désormais recevoir une instance de Io. Cela permet de créer des packages réutilisables quel que soit le modèle de concurrence, et de gérer correctement les event loops au niveau du langage.

Il existe trois implémentations :

  • Io.Threaded — implémentation complète basée sur les threads. Elle prend aussi en charge la cancellation, et conserve le même comportement lors de la migration depuis 0.15.x
  • Io.Evented — implémentation expérimentale basée sur le user-space stack switching (green threads)
  • Io.Uring — implémentation PoC basée sur io_uring sous Linux

Compilateur

  • La compilation incrémentale fonctionne aussi avec le backend LLVM — en cas d’erreur de compilation, l’étape LLVM Emit Object est ignorée, ce qui permet de voir les erreurs beaucoup plus vite
  • La résolution de types (Type Resolution) a été entièrement repensée — le graphe de dépendances interne est passé d’une structure cyclique à un DAG. Les types utilisés uniquement comme espaces de noms n’entraînent plus d’analyse inutile, ce qui réduit aussi la taille des binaires. Les messages d’erreur liés aux boucles de dépendances montrent également bien mieux l’origine du problème
  • Backend aarch64 — le développement avance activement avec pour objectif d’en faire la valeur par défaut en mode Debug
  • Le fuzzer intégré a gagné en puissance — ajout du fuzzing multiprocessus basé sur AST Smith, d’un mode infini (Infinite Mode) et d’une fonction de crash dump

Changements du langage (Breaking Changes)

Voici les changements qui nécessitent une migration :

  • @cImport a été déplacé vers le système de build
  • Le builtin @Type a disparu — remplacé par des builtins distincts selon le type
  • Lazy Field Analysis a été introduite — les types utilisés uniquement comme espaces de noms ne font pas l’objet d’une analyse des champs
  • Il n’est plus possible de mettre des pointeurs dans des packed union/struct
  • De nombreuses API liées à posix et os.windows ont été supprimées

Bibliothèque standard

  • heap.ArenaAllocator est désormais thread-safe et lock-free, et le heap.ThreadSafe Allocator a été supprimé
  • La compression Deflate a été ajoutée, et l’API de décompression a aussi été simplifiée
  • std.crypto ajoute AES-SIV, AES-GCM-SIV, Ascon-AEAD et Ascon-Hash
  • Thread.Pool, GenericReader / AnyReader / FixedBufferStream ont été supprimés
  • Le réseau sous Windows fonctionne désormais sans ws2_32.dll, et la migration vers NtDll est terminée

Mise à jour de la toolchain

Passage à LLVM 21, musl 1.2.5, glibc 2.43, en-têtes Linux 6.19, en-têtes macOS 26.4 et libc FreeBSD 15.0.


Orientation de la prochaine version (0.17.0)

Les principaux objectifs sont la stabilisation de l’async I/O, le passage du backend aarch64 comme valeur par défaut en mode Debug, la suppression de la dépendance à LLD, et l’implémentation d’un linker prenant en charge la compilation incrémentale.

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.