Présentation de Swift 6.4

Le 15 septembre 2026, la communauté Swift a publié la version 6.4. Cette itération vise à renforcer la cohérence du langage sur l’ensemble du stack : applications mobiles, serveurs, systèmes embarqués et navigateurs. Parmi les annonces majeures, le gestionnaire de paquets SwiftPM adopte Swift Build comme moteur de compilation unique, garantissant que les projets se construisent de façon identique sous Linux, macOS et Windows. Le SDK WebAssembly devient directement disponible depuis swift.org, promettant des temps d’exécution jusqu’à 40 fois plus rapides grâce à l’intégration de JavaScriptKit.

Nouvelles du compilateur et du système de build

Swift Build, auparavant optionnel, est désormais le comportement par défaut de SwiftPM, ce qui élimine les divergences entre les environnements de développement. Le même release introduit la génération de SBOM (Software Bill of Materials) au format SPDX ou CycloneDX, facilitant la traçabilité des dépendances pour les équipes DevOps. Au niveau du débogage, le compilateur a refondu le suivi des modules : LLDB importe les modules via un suivi de dépendances précis, réduisant la taille des builds de debug sur Linux, Windows et les bundles dSYM sur Darwin.

Interopérabilité et support multiplateforme

Swift 6.4 approfondit les ponts avec d’autres langages. La nouvelle structure Span se mappe directement sur std::span de C++20, permettant de transmettre des vues de mémoire sans copie ni conversion manuelle. L’interopérabilité Java s’enrichit d’un support asynchrone et de callbacks, tandis que la directive @c combinée à @implementation génère automatiquement les en‑têtes C nécessaires. Côté navigateur, le runtime WebAssembly exploite JavaScriptKit, réduisant le facteur de ralentissement habituel de 40 fois par rapport aux implémentations précédentes.

Améliorations de la bibliothèque standard et du testing

Le standard library introduit plusieurs raccourcis syntaxiques : les types optional some et optional any ne nécessitent plus de parenthèses, simplifiant l’écriture de some Rocket?. Le nouvel attribut @diagnose donne un contrôle source‑level sur les avertissements, pouvant les transformer en erreurs. Les sélecteurs de module (::) résolvent les conflits de noms entre bibliothèques, par exemple CommonThing::MyLib. Au niveau de la concurrence, withTaskCancellationShield garantit l’exécution complète des blocs de nettoyage même en cas d’annulation de tâche. La bibliothèque introduit aussi un protocole Iterable et des tableaux capables de contenir des éléments non‑copiables sans déclencher le mécanisme copy‑on‑write. Enfin, le framework Subprocess atteint la version 1.0 ; il offre une API cross‑platform stable pour lancer et interagir avec des processus externes :

let result = try await Subprocess.run(.name("ls"),
    arguments: ["-la"],
    output: .string(limit: 4096))
print(result.standardOutput)
Swift Testing bénéficie d’une intégration plus fluide avec XCTest, notamment grâce aux protocoles CustomTestReflectable et Transferable pour enrichir les rapports d’échec.