- Le langage, la bibliothèque standard, le système de build et la prise en charge des plateformes s’enrichissent, avec une meilleure expérience développeur
- Interopérabilité renforcée avec C, ajout d’un SDK officiel pour Android, améliorations pour l’embarqué et extension de l’outil de documentation DocC figurent parmi les principaux changements
- Swift Package Manager améliore la cohérence des builds multiplateformes grâce à un moteur de build unifié et à la prise en charge de Swift Syntax précompilé
- Swift Testing ajoute de nouvelles fonctionnalités comme l’enregistrement de problèmes au niveau avertissement, l’annulation de tests et les pièces jointes d’images, pour plus de flexibilité dans les tests
- Le lancement officiel du SDK Android élargit le champ du développement multiplateforme de Swift et permet l’intégration avec des apps Kotlin/Java
Principales mises à jour de Swift 6.3
- Swift 6.3 apporte des fonctionnalités étendues dans le langage, la bibliothèque standard, le système de build et la prise en charge des plateformes
- Interopérabilité renforcée avec C, ajout d’un SDK officiel pour Android, améliorations pour l’embarqué et extension de l’outil de documentation DocC sont les changements clés
- L’objectif est d’améliorer l’expérience développeur et de renforcer l’intégration du développement multiplateforme
Langage et bibliothèque standard
-
Interopérabilité C
- Le nouvel attribut
@c permet d’exposer des fonctions Swift ou des enum à du code C
- La forme
@c(MyLibrary_callFromC) permet de définir un nom de déclaration C personnalisé
- L’utilisation conjointe de
@c et @implementation permet d’implémenter en Swift des fonctions déclarées dans des en-têtes C
- Dans cette configuration, Swift vérifie la correspondance avec les déclarations C existantes
-
Sélecteurs de nom de module (Module Name Selectors)
- Lors de l’import d’API portant le même nom depuis plusieurs modules, il est possible d’effectuer un appel qualifié par module sous la forme
ModuleA::getValue()
- La syntaxe
Swift::Task permet d’accéder aux API de concurrency et de traitement des chaînes
-
Contrôle des performances des API de bibliothèque
- @specialize : fournit une implémentation spécialisée à l’avance pour des types spécifiques d’une API générique
- @inline(always) : force l’inlining afin d’étendre le corps de la fonction au point d’appel
- @export(implementation) : expose l’implémentation de la fonction dans les bibliothèques stables ABI pour autoriser des optimisations supplémentaires
- Les propositions associées sont consultables sur le tableau de bord Swift Evolution
Améliorations des packages et du build
- Swift Package Manager inclut un aperçu de l’intégration de Swift Build, offrant une expérience de build cohérente sur toutes les plateformes
- Le moteur de build unifié renforce la cohérence du développement multiplateforme
- Les utilisateurs peuvent tester directement avec leurs packages et signaler les problèmes
- Principales améliorations de SwiftPM 6.3
- Prise en charge de Swift Syntax précompilé : les bibliothèques dédiées aux macros peuvent utiliser des binaires
swift-syntax précompilés
- Contrôle flexible de l’héritage de documentation : les plugins impératifs qui génèrent des graphes de symboles peuvent contrôler l’inclusion ou non de la documentation héritée
- Fonction d’exploration des caractéristiques du package : la commande
swift package show-traits permet de vérifier les caractéristiques prises en charge par un package
- Davantage de détails figurent dans les notes de version de SwiftPM 6.3
Mises à jour des bibliothèques cœur
-
Swift Testing
- Enregistrement de problèmes au niveau avertissement :
Issue.record(..., severity: .warning) affiche uniquement un avertissement sans faire échouer le test
- Fonction d’annulation de test :
try Test.cancel() permet d’interrompre un test en cours et ses sous-tâches
- Prise en charge des pièces jointes d’images : il est possible de joindre des images pendant les tests sur les plateformes Apple et Windows
- Propositions associées : ST-0012, ST-0013, ST-0014, ST-0015, ST-0016, ST-0017, ST-0020
-
DocC
- Prise en charge de la sortie Markdown : l’option
--enable-experimental-markdown-output permet de générer des documents Markdown
- Contenu HTML statique par page : l’insertion d’un résumé HTML dans `` améliore le référencement et l’accessibilité
- Extension des annotations de blocs de code : de nouvelles options de format comme
nocopy, highlight, showLineNumbers, wrap sont ajoutées
- Activation possible via l’option
--enable-experimental-code-block-annotations
Plateformes et environnements
-
Embedded Swift
- Comprend de nombreuses améliorations, dont une interopérabilité C renforcée, un meilleur débogage et des avancées vers l’aboutissement du modèle de linkage
- Les détails sont disponibles dans le blog “Embedded Swift Improvements coming in Swift 6.3”
-
Android
- Première sortie du SDK officiel Swift pour Android
- Permet le développement d’apps Android natives en Swift et la prise en charge du build Android pour les packages Swift
- L’intégration avec des apps Kotlin/Java est possible via Swift Java et Swift Java JNI Core
- Cette sortie est considérée comme une étape importante dans l’extension du développement multiplateforme de Swift
- Le guide de démarrage est fourni dans le document “Getting Started with the Swift SDK for Android”
Étapes suivantes
- La toolchain Swift 6.3 peut être installée depuis la page Install Swift
- Les développeurs peuvent dès maintenant expérimenter les nouvelles fonctionnalités et envoyer leurs retours
1 commentaires
Avis sur Hacker News
Ça fait plaisir de voir une sortie aussi réussie pour Swift
Je ne l’ai pas utilisé depuis la v3, mais vers 2015~17, Swift aurait pu remplacer Python
C’était simple, rapide et bien intégré à l’écosystème C/C++. À l’époque où IBM poussait le serveur, il y avait une vraie possibilité
Mais Apple n’a pas su suffisamment embarquer la communauté, et au final Swift est resté un langage réservé à Apple. Aujourd’hui, sa complexité est montée au niveau de celle de C++
J’aime Swift, mais en dehors de l’écosystème Apple, j’ai toujours l’impression qu’il n’a pas encore franchi la masse critique. J’ai fini par passer à TypeScript l’an dernier
Surtout, il y a probablement très peu de gens qui veulent volontairement introduire Apple comme gatekeeper dans leur stack
Projet TensorFlow Swift
CircuitPython était aussi utile pour le prototypage embarqué. Swift n’a jamais vraiment réussi à s’imposer dans ces domaines
En plus, Swift n’est arrivé sur Linux qu’en 2016, sur Windows en 2020, et sur FreeBSD seulement en 2025
Au milieu des années 2010, de nouveaux langages comme Go, Julia, Rust, TypeScript et Solidity arrivaient en masse, donc la plupart des gens n’avaient le temps d’en apprendre qu’un ou deux
J’espérais que Swift deviendrait un langage couvrant toute la stack, mais la réalité est autre
On a l’impression qu’Apple a gaspillé cette opportunité
Par exemple, ClearSurgery est entièrement écrit en Swift, y compris les composants temps réel sous Linux
La semaine dernière, j’ai porté le système d’exploitation xv6-riscv vers Zig, Nim, LISP et Swift
Grâce aux progrès de Swift embarqué, ça m’a semblé être un langage très productif. Les abstractions autour de l’accès mémoire étaient aussi élégantes
Mais la compilation était tellement lente que j’ai fini par me concentrer sur Nim
Je regrette qu’on ne parle pas des améliorations de vitesse de compilation de Swift
Une compilation plus lente que Rust dégrade fortement l’expérience de développement
Si on est habitué aux builds rapides de Go, Swift rend vraiment le développement itératif pénible. Le langage est excellent, mais la boucle de feedback est trop lente
Swift 6.3 inclut pour la première fois un SDK officiel pour Android
Pour Windows, il y a un billet de blog d’il y a 5 ans,
et pour Linux, un guide pour GNOME
Ce serait bien de pouvoir déployer sur plusieurs plateformes avec un seul développement, comme à l’époque d’OpenSTEP
L’amélioration des types noncopyable est la partie la plus sous-estimée de cette release
Il devient maintenant beaucoup plus réaliste de modéliser une propriété unique dans Swift
Avec l’attribut
@cde Swift 6.3, il est désormais possible d’exposer des fonctions Swift au code CMais je me demande pourquoi cela arrive si tard. Avoir ajouté l’interopérabilité C++ d’abord ressemble à une priorité étrange
En revanche, exporter Swift vers C crée facilement du spaghetti FFI, et des bugs d’ABI surviennent facilement avec les enums, la gestion de la propriété ou des valeurs nulles
Surtout si on y mêle des closures, les conventions d’appel peuvent diverger et on peut perdre une journée entière à déboguer
Avant, quand je créais une dylib Swift pour un programme C, je devais utiliser
@cdecl, donc c’est bienvenu que ce soit désormais pris en charge officiellementLes changements réels au-delà du marketing sont visibles dans le CHANGELOG et la
liste des propositions Swift Evolution
La 6.3 était surtout une release centrée sur le travail d’intégration — stdlib, interopérabilité C/C++, swift-java, système de build, etc.
SPM absorbe progressivement des fonctionnalités de Xcode, et le nouveau moteur swift-build ainsi que les modules précompilés sont aussi en expérimentation
Mais l’interaction entre SPM et Xcode reste instable, et la complexité interne continue d’augmenter
Les avancées du langage lui-même sont discrètes, mais des travaux structurels profonds sont en cours sur le contrôle de durée de vie et la coloration de la concurrence
Avec l’imbrication de multiples OS, appareils et environnements CI, les développeurs Swift sont toujours dans une situation où ils doivent trouver un équilibre au milieu des changements
swift-builddevrait devenir la valeur par défautD’après ce post du forum officiel,
Xcode l’utilise déjà en interne, mais les problèmes de performance sont sérieux
Il y a aussi cette discussion associée
Si SPM et Xcode utilisent le même moteur, cela pourrait s’améliorer, mais je n’en attends pas trop
Je me demande à quoi ressemble la toolchain dans les versions récentes de Swift. J’aimerais savoir si Swift Lint et Swift Format sont pris en charge
Pour un langage moderne, il devrait y avoir un formateur intégré et des règles de lint recommandées. Ce n’est pas seulement le langage qui compte, mais tout l’écosystème
swift formatetswift format lint, sans dépendance externe