<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Swift</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur le nouveau langage de programmation Swift d'Apple]]></description>
		<language>fr</language>
		<lastBuildDate>Mon, 01 Jun 2026 07:06:54 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Swift</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Apple publie Swift 6.3, la dernière version de son langage de programmation open source</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182874&amp;goto=newpost</link>
			<pubDate>Thu, 26 Mar 2026 09:23:48 GMT</pubDate>
			<description>*Apple publie Swift 6.3, la...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Apple publie Swift 6.3, la dernière version de son langage de programmation open source, avec le premier SDK Android officiel, une interopérabilité améliorée avec le langage C et bien plus encore</font></b><br />
<br />
<b>La version 6.3 de Swift vient d'être publiée, marquant une expansion significative du langage de programmation d'Apple vers de nouveaux domaines. Cette mise à jour apporte le premier SDK Android officiel, permettant aux développeurs de créer des applications Android natives en Swift et d'intégrer du code Swift dans des projets Kotlin ou Java. Elle renforce également l'interopérabilité avec le langage C et améliore les outils multiplateformes, la prise en charge des environnements embarqués et l'optimisation de la compilation.</b><br />
<br />
Swift est un langage de programmation compilé de haut niveau, polyvalent et multi-paradigme, créé par Chris Lattner en 2010 pour Apple Inc. et maintenu par la communauté open source. Swift se compile en code machine et utilise un compilateur basé sur LLVM. Swift a été lancé pour la première fois en juin 2014 et la chaîne d'outils Swift est intégrée à Xcode depuis la version 6 de ce dernier, sortie en septembre 2014.<br />
<br />
La version 6.3 de Swift vient d'être publiée, apportant le premier SDK officiel Swift pour Android. Cela permet aux développeurs de créer des applications Android natives en Swift, d'adapter des paquets Swift pour Android et d'intégrer du code Swift dans des projets Kotlin ou Java. Cette version étend également la portée de Swift dans les environnements embarqués et les systèmes à grande échelle grâce à une prise en charge plus large des plateformes et à des améliorations au niveau de la compilation.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675235d1774516974/systemes/apple/swift/apple-publie-swift-6-3-derniere-version-langage-programmation-open-source/swift-6.3-programmation.png/" border="0" alt="Nom : swift 6.3 programmation.png
Affichages : 7928
Taille : 240,8 Ko"  style="float: CONFIG" /></div><br />
L'une des principales nouveautés du langage est le nouvel attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@c</span>, qui permet d'exposer des fonctions et des énumérations Swift au code C au sein d'un même projet. Les développeurs peuvent attribuer des noms de symboles C personnalisés et, en combinaison avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@implementation</span>, relier des fonctions Swift à des déclarations C existantes afin d'améliorer l'interopérabilité dans les bases de code multi-langages. Swift 6.3 introduit également les sélecteurs de modules, ce qui facilite la résolution des conflits de nommage lorsque plusieurs modules importés exposent des API portant le même nom.<br />
<br />
En matière d'outils, Swift 6.3 propose un aperçu de l'intégration de Swift Build dans Swift Package Manager, pour une expérience de compilation multiplateforme plus homogène. Il ajoute également de nouveaux contrôles d'optimisation tels que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@specialize</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@inline<span class="br0">&#40;</span>always<span class="br0">&#41;</span></span>, ainsi que des améliorations concernant la prise en charge des bibliothèques de macros, la documentation des paquets et les tests. DocC prend désormais en charge la sortie au format Markdown et propose de nouvelles améliorations axées sur l'accessibilité pour la documentation.<br />
<br />
<b><font size="3">Langage et bibliothèque standard</font></b><br />
<br />
<b><font size="2">Interopérabilité avec le langage C</font></b><br />
<br />
Swift 6.3 introduit l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@c</span>, qui permet d'exposer des fonctions et des énumérations Swift au code C au sein d'un même projet. En annotant une fonction ou une énumération avec @c, les développeurs peuvent demandez à Swift d'inclure une déclaration correspondante dans l'en-tête C généré, qu'ils pourront ensuite inclure dans leurs fichiers C/C++ :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">@c
<span style="color: #0000ff;">func</span> callFromC<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// Generated C header</span>
&nbsp;
<span style="color: #0000ff;">void</span> callFromC<span style="color: black;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
Les développeurs peuvent définir un nom personnalisé à utiliser pour la déclaration C générée :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br /></div></td><td valign="top"><pre style="margin: 0">@c<span class="br0">&#40;</span>MyLibrary_callFromC<span class="br0">&#41;</span>
<span style="color: #0000ff;">func</span> callFromC<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// Generated C header</span>
&nbsp;
<span style="color: #0000ff;">void</span> MyLibrary_callFromC<span style="color: black;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@c</span> fonctionne également en association avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@implementation</span>. Cela permet aux développeurs de fournir une implémentation Swift pour une fonction déclarée dans un en-tête C :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// C header</span>
&nbsp;
<span style="color: #0000ff;">void</span> callFromC<span style="color: black;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// Implementation written in Swift</span>
&nbsp;
@c @implementation
<span style="color: #0000ff;">func</span> callFromC<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Lorsque l'on utilise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@c</span> avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@implementation</span>, Swift vérifie que la fonction Swift correspond à une déclaration préexistante dans un en-tête C, plutôt que d'inclure une déclaration C dans l'en-tête généré.<br />
<br />
<b><font size="2">Sélecteurs de modules</font></b><br />
<br />
Swift 6.3 introduit les sélecteurs de modules afin de préciser dans quel module importé Swift doit rechercher une API utilisée dans le code. Si un développeur importe plusieurs modules fournissant une API portant le même nom, les sélecteurs de modules permettent de déterminer clairement quelle API utiliser :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> ModuleA
<span style="color: #0000ff;">import</span> ModuleB
&nbsp;
<span style="color: #0000ff;">let</span> x = ModuleA::getValue<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #808080;">// Call 'getValue' from ModuleA</span>
<span style="color: #0000ff;">let</span> y = ModuleB::getValue<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #808080;">// Call 'getValue' from ModuleB</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Swift 6.3 permet également d'utiliser le nom de module Swift pour accéder aux API des bibliothèques de concurrence et de traitement des chaînes de caractères :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">let</span> task = Swift::Task <span class="br0">&#123;</span>
  <span style="color: #808080;">// async work</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b><font size="2">Contrôle des performances pour les API de bibliothèques</font></b><br />
<br />
Swift 6.3 introduit de nouveaux attributs qui permettent aux auteurs de bibliothèques de contrôler plus finement les optimisations du compilateur pour les clients de leurs API :<br />
<br />
<ul><li style=""> Spécialisation des fonctions : fournit des implémentations pré-spécialisées d'une API générique pour des types concrets courants à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@specialize</span>.</li><li style=""> Inlining : garantit l'inlining — une optimisation du compilateur qui développe le corps d'une fonction au point d'appel — pour les appels directs à une fonction avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@inline<span class="br0">&#40;</span>always<span class="br0">&#41;</span></span>. Cet attribut ne doit être utilisé que si les avantages de l'inlining l'emportent sur l'augmentation éventuelle de la taille du code.</li><li style=""> Visibilité de l'implémentation d'une fonction : exposition de l'implémentation d'une fonction dans une bibliothèque ABI-stable aux clients à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">@export<span class="br0">&#40;</span>implementation<span class="br0">&#41;</span></span>. Cela permet à la fonction de bénéficier d'un plus grand nombre d'optimisations du compilateur.</li></ul><br />
<b><font size="3">Améliorations apportées aux paquets et à la compilation</font></b><br />
<br />
Swift 6.3 inclut une version préliminaire de Swift Build intégrée à Swift Package Manager. Cette version préliminaire offre un moteur de compilation unifié sur toutes les plateformes prises en charge, pour une expérience de développement multiplateforme plus cohérente. <br />
<br />
Swift 6.3 apporte également les améliorations suivantes au gestionnaire de paquets Swift :<br />
<br />
<ul><li style=""> Syntaxe Swift précompilée pour les bibliothèques de macros partagées : extraire le code d'implémentation des macros partagées dans une bibliothèque prenant en charge les binaires précompilés Swift Syntax dans les bibliothèques utilisées exclusivement par des macros.</li><li style=""> Documentation héritée flexible : contrôler si la documentation héritée est incluse dans les plugins de commande qui génèrent des graphiques de symboles.</li><li style=""> Caractéristiques détectables des paquets : identifier les caractéristiques prises en charge par un paquet à l'aide de la nouvelle commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">swift package show-traits</span>.</li></ul><br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675236d1774516988/systemes/apple/swift/apple-publie-swift-6-3-derniere-version-langage-programmation-open-source/swift-6.3-programmation-1.png/" border="0" alt="Nom : swift 6.3 programmation 1.png
Affichages : 605
Taille : 205,9 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Mises à jour de la bibliothèque principale</font></b><br />
<br />
<b><font size="2">Swift Testing</font></b><br />
<br />
Swift Testing bénéficie de plusieurs améliorations, notamment en matière d'avertissements, d'annulation des tests et de pièces jointes sous forme d'images.<br />
<br />
<ul><li style=""> Problèmes de type « avertissement » : indiquer le niveau de gravité d'un problème de test à l'aide du nouveau paramètre <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">severity</span> de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Issue.record</span>. Les développeurs peuvent enregistrer un problème en tant qu'avertissement à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Issue.record<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Un &eacute;v&eacute;nement suspect s'est produit&quot;</span>, severity: .warning<span class="br0">&#41;</span></span>. Cela apparaît dans les résultats du test, mais ne marque pas le test comme un échec.</li><li style=""> Annulation d'un test : annuler un test (et sa hiérarchie de tâches) après son lancement à l'aide de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">try</span> Test.cancel<span class="br0">&#40;</span><span class="br0">&#41;</span></span>. Cette fonctionnalité est utile pour ignorer des arguments individuels d'un test paramétré ou pour réagir à des conditions survenant pendant un test qui indiquent qu'il ne doit pas se poursuivre.</li><li style=""> Pièces jointes d'images : joindre des images de formats courants pendant un test sur les plateformes Apple et Windows. Cette fonctionnalité est accessible via plusieurs nouveaux modules de superposition à importation croisée avec des frameworks d'interface utilisateur tels que UIKit.</li></ul><br />
<b><font size="2">DocC</font></b><br />
<br />
Swift 6.3 ajoute trois nouvelles fonctionnalités expérimentales à DocC :<br />
<br />
<ul><li style=""> Sortie Markdown : générer des versions Markdown des pages de documentation en plus du JSON standard, pour les symboles, les articles et les tutoriels. Cette fonctionnalité peut être testée en passant l'option <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--enable-experimental-markdown-output</span> à la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">docc convert</span>.</li><li style=""> Contenu HTML statique par page : intégrer un résumé HTML léger de chaque page — comprenant le titre, la description, la disponibilité, les déclarations et la discussion — directement dans le fichier index.html, à l'intérieur d'une balise <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;noscript&gt;</span>. Cela améliore la visibilité auprès des moteurs de recherche et l'accessibilité pour les lecteurs d'écran, sans nécessiter de JavaScript. Cette fonctionnalité peut être testée en passant les options <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--transform-<span style="color: #0000ff;">for</span>-<span style="color: #0000ff;">static</span>-hosting</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--experimental-transform-<span style="color: #0000ff;">for</span>-<span style="color: #0000ff;">static</span>-hosting-with-content</span> à la commande <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">docc convert</span>.</li><li style=""> Annotations des blocs de code : de nouvelles options de mise en forme pour les blocs de code sont disponibles, notamment <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">nocopy</span> pour désactiver la copie dans le presse-papiers, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">highlight</span> pour mettre en surbrillance des lignes spécifiques par leur numéro, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">showLineNumbers</span> pour afficher les numéros de ligne, et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">wrap</span> pour renvoyer à la ligne les lignes trop longues en fonction de la largeur de colonne. Ces options peuvent être spécifiées sous forme de liste séparée par des virgules après le nom du langage, sur la ligne d'ouverture des accolades :</li></ul><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">```swift, nocopy
<span style="color: #0000ff;">let</span> config = loadDefaultConfig<span class="br0">&#40;</span><span class="br0">&#41;</span>
```</pre></td></tr></table></code><hr />
</div><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0"> ```swift, highlight=<span class="br0">&#91;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">3</span><span class="br0">&#93;</span>
<span style="color: #0000ff;">let</span> name = <span style="color: #FF0000;">&quot;World&quot;</span>       <span style="color: #808080;">// highlighted</span>
<span style="color: #0000ff;">let</span> greeting = <span style="color: #FF0000;">&quot;Hello&quot;</span>
<span style="color: #0080ff;">print</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;<span style="color: #800000;">\(greeting)</span>, <span style="color: #800000;">\(name)</span>!&quot;</span><span class="br0">&#41;</span>  <span style="color: #808080;">// highlighted</span>
```</pre></td></tr></table></code><hr />
</div><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0">```swift, showLineNumbers, wrap=<span style="color: #cc66cc;">80</span>
<span style="color: #0000ff;">func</span> example<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span style="color: #808080;">/* ... */</span> <span class="br0">&#125;</span>
```</pre></td></tr></table></code><hr />
</div><br />
<br />
DocC valide les indices de ligne et signale les options non reconnues. Les nouvelles annotations de blocs de code peuvent être testées avec l'option <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--enable-experimental-code-block-annotations</span>.<br />
<br />
<b><font size="3">Plateformes et environnements</font></b><br />
<br />
<b><font size="2">Swift embarqué</font></b><br />
<br />
Swift Embedded bénéficie de nombreuses améliorations dans Swift 6.3, allant d'une interopérabilité renforcée avec le langage C et d'une meilleure prise en charge du débogage à des avancées significatives vers un modèle de liaison complet.<br />
<br />
<b><font size="2">Android</font></b><br />
<br />
Swift 6.3 inclut la première version officielle du SDK Swift pour Android. Grâce à ce SDK, les développeurs peuvent commencer à créer des applications Android natives en Swift, mettre à jour leurs paquets Swift pour prendre en charge la compilation pour Android, et utiliser Swift Java et Swift Java JNI Core pour intégrer du code Swift dans des applications Android existantes écrites en Kotlin/Java. Il s'agit d'une étape importante qui ouvre de nouvelles perspectives pour le développement multiplateforme en Swift.<br />
<br />
« Swift est conçu pour être le langage de prédilection à tous les niveaux de la pile logicielle. Que vous développiez du micrologiciel embarqué, des services à l'échelle d'Internet ou des applications mobiles complètes, Swift offre des garanties de sécurité solides, un contrôle des performances lorsque vous en avez besoin, ainsi que des fonctionnalités de langage et des API riches en expressivité. Swift 6.3 rend ces avantages plus accessibles sur l'ensemble de la pile », a déclaré l'équipe Swift.<br />
<br />
<b>Source :</b> <a rel="nofollow" href="https://www.swift.org/blog/swift-6.3-released/" target="_blank">Swift 6.3</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Que pensez-vous des nouveautés proposées par cette version de Swift ? Les trouvez-vous utiles et intéressantes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/375905/Apple-publie-Swift-6-2-la-derniere-version-de-son-langage-de-programmation-open-source-avec-une-concurrence-simplifiee-une-securite-amelioree-la-prise-en-charge-de-WebAssembly-et-bien-plus-encore/" target="_blank">Apple publie Swift 6.2, la dernière version de son langage de programmation open source, avec une concurrence simplifiée, une sécurité améliorée, la prise en charge de WebAssembly et bien plus encore</a><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/362800/Swift-6-la-nouvelle-version-majeure-du-langage-de-programmation-Swift-est-disponible-avec-une-nouvelle-bibliotheque-Swift-Testing-et-une-prise-en-charge-etendue-de-Linux-et-de-Windows/" target="_blank">Swift 6, la nouvelle version majeure du langage de programmation Swift, est disponible, avec une nouvelle bibliothèque Swift Testing et une prise en charge étendue de Linux et de Windows</a><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/293633/En-route-vers-Swift-6-l-equipe-en-charge-du-developpement-de-Swift-devoile-la-nouvelle-feuille-de-route-du-projet/" target="_blank">En route vers Swift 6 : l'équipe en charge du développement de Swift dévoile la nouvelle feuille de route du projet</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p675235d1774516974/systemes/apple/swift/apple-publie-swift-6-3-derniere-version-langage-programmation-open-source/swift-6.3-programmation.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p675236d1774516988/systemes/apple/swift/apple-publie-swift-6-3-derniere-version-langage-programmation-open-source/swift-6.3-programmation-1.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1980/systemes/apple/swift/">Swift</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182874/systemes/apple/swift/apple-publie-swift-6-3-derniere-version-langage-programmation-open-source/</guid>
		</item>
		<item>
			<title>Apple publie Swift 6.2, avec une concurrence simplifiée, une sécurité améliorée et le support de WebAssembly</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179314&amp;goto=newpost</link>
			<pubDate>Wed, 17 Sep 2025 10:44:27 GMT</pubDate>
			<description>*Apple publie Swift 6.2, la...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Apple publie Swift 6.2, la dernière version de son langage de programmation open source, avec une concurrence simplifiée, une sécurité améliorée, la prise en charge de WebAssembly et bien plus encore</font></b><br />
<br />
<b>Apple a officiellement lancé Swift 6.2, la prochaine étape majeure dans l'évolution de son puissant langage de programmation. Cette version introduit de nouvelles fonctionnalités, améliore la gestion de la concurrence, renforce l'interopérabilité entre les langages et optimise les performances à grande échelle. Cette mise à jour apporte également des changements significatifs qui auront une incidence sur la manière dont les développeurs structureront et écriront leur code à l'avenir, qu'ils créent des applications dans l'écosystème Apple ou qu'ils intègrent Swift dans des environnements côté serveur et multiplateformes.</b><br />
<br />
Swift est un langage de programmation compilé, polyvalent, multi-paradigme et de haut niveau, créé par Chris Lattner en 2010 pour Apple Inc. et maintenu par la communauté open source. Swift compile en code machine et utilise un compilateur basé sur LLVM. Le langage a été lancé pour la première fois en juin 2014 et la chaîne d'outils Swift est intégrée à Xcode depuis la version 6 de Xcode, sortie en septembre 2014.<br />
<br />
Swift 6.2 introduit des mises à jour axées sur la programmation concurrente, les performances et l'amélioration des outils de développement. Cette version rend la programmation concurrente plus accessible en utilisant par défaut un fonctionnement à thread unique et en proposant des fonctions asynchrones intuitives, ce qui permet aux développeurs d'écrire du code concurrent sécurisé avec moins de code standard. <br />
<br />
Parallèlement, Swift 6.2 optimise les performances sans sacrifier la sécurité, permettant ainsi un code de bas niveau avec une exécution prévisible et une surcharge minimale.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/7MGLTYxIlXs?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Suite à ces améliorations du langage, l'extension officielle Swift pour Visual Studio Code a été vérifiée et est désormais distribuée par Swift.org. Afin d'aider les équipes à effectuer les mises à niveau, de nouveaux outils de migration permettent aux projets d'adopter les fonctionnalités du langage à venir. <br />
<br />
L'expérience des développeurs est encore améliorée grâce à des temps de compilation nettement plus rapides, en particulier pour les projets utilisant des API basées sur des macros. Les développeurs bénéficient d'un débogage amélioré du code concurrent dans LLDB et de nouvelles options pour gérer les avertissements du compilateur au niveau du groupe de diagnostic.<br />
<br />
S'appuyant sur les améliorations apportées à l'écosystème, les mises à jour de la bibliothèque Swift 6.2 comprennent un nouveau package Subprocess, des améliorations de la bibliothèque Foundation et de nouvelles API destinées à prendre en charge des modèles de codage plus sûrs. <br />
<br />
Enfin, Swift 6.2 ajoute également la prise en charge de WebAssembly, permettant aux applications Swift clientes et serveurs de cibler Wasm et de se déployer sur des navigateurs ou d'autres environnements compatibles.<br />
<br />
<b><font size="3">Concurrence accessible</font></b><br />
<br />
Swift 6.2 facilite la programmation concurrente grâce à une série de modifications visant à réduire les codes standard et à permettre d'écrire plus naturellement du code concurrent sécurisé :<br />
<br />
<ul><li style=""> <b>Monothread par défaut :</b> les développeurs peuvent exécuter leur code sur le thread principal sans annotations @MainActor explicites à l'aide de la nouvelle option permettant d'isoler le code vers l'acteur principal par défaut. Cette option est idéale pour les scripts, le code d'interface utilisateur et d'autres cibles exécutables.</li><li style=""> <b>Fonctions asynchrones intuitives :</b> écrire du code asynchrone sans accès simultané à un état modifiable. Auparavant, les méthodes asynchrones non isolées basculaient toujours vers l'exécuteur global qui gère le pool de threads simultanés, ce qui rendait difficile l'écriture de méthodes asynchrones pour les types de classes sans erreurs de sécurité liées aux conflits de données. Dans Swift 6.2, il est possible de migrer vers une fonctionnalité à venir où les fonctions asynchrones s'exécutent dans le contexte d'exécution de l'appelant, même lorsqu'elles sont appelées sur l'acteur principal.</li><li style=""> <b>Activer la concurrence avec @concurrent :</b> introduire du code qui s'exécute simultanément à l'aide du nouvel attribut @concurrent. Cela permet de préciser clairement quand on souhaite que le code reste sérialisé sur l'acteur et quand il peut s'exécuter en parallèle.</li></ul><br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// In '-default-isolation MainActor' mode</span>
&nbsp;
<span style="color: #0000ff;">struct</span> Image <span class="br0">&#123;</span>
  <span style="color: #808080;">// The image cache is safe because it's protected</span>
  <span style="color: #808080;">// by the main actor.</span>
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">var</span> cachedImage: <span class="br0">&#91;</span>URL: Image<span class="br0">&#93;</span> = <span class="br0">&#91;</span>:<span class="br0">&#93;</span>
&nbsp;
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">func</span> create<span class="br0">&#40;</span>from url: URL<span class="br0">&#41;</span> async <span style="color: #0000ff;">throws</span> -&gt; Image <span class="br0">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">let</span> image = cachedImage<span class="br0">&#91;</span>url<span class="br0">&#93;</span> <span class="br0">&#123;</span>
      <span style="color: #0000ff;">return</span> image
    <span class="br0">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">let</span> image = <span style="color: #0000ff;">try</span> await fetchImage<span class="br0">&#40;</span>at: url<span class="br0">&#41;</span>
&nbsp;
    cachedImage<span class="br0">&#91;</span>url<span class="br0">&#93;</span> = image
    <span style="color: #0000ff;">return</span> image
  <span class="br0">&#125;</span>
&nbsp;
  <span style="color: #808080;">// Fetch the data from the given URL and decode it.</span>
  <span style="color: #808080;">// This is performed on the concurrent thread pool to</span>
  <span style="color: #808080;">// keep the main actor free while decoding large images.</span>
  @concurrent
  <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">func</span> fetchImage<span class="br0">&#40;</span>at url: URL<span class="br0">&#41;</span> async <span style="color: #0000ff;">throws</span> -&gt; Image <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let</span> <span class="br0">&#40;</span>data, _<span class="br0">&#41;</span> = <span style="color: #0000ff;">try</span> await URLSession.shared.data<span class="br0">&#40;</span>from: url<span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> await decode<span class="br0">&#40;</span>data: data<span class="br0">&#41;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Ensemble, ces améliorations permettent d'écrire du code sans conflit d'accès aux données avec moins de surcharge d'annotation, offrent un comportement plus prévisible pour le code asynchrone, tout en permettant d'introduire la concurrence lorsque cela est nécessaire.<br />
<br />
<b><font size="3">Programmation de systèmes sécurisés</font></b>  <br />
<br />
Swift 6.2 comprend des fonctionnalités conçues pour optimiser les performances sans compromettre la sécurité. Ces fonctionnalités aident à écrire du code sécurisé de bas niveau avec des performances prévisibles et une surcharge minimale.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">InlineArray</span> est un nouveau tableau de taille fixe avec stockage en ligne pour les éléments, qui peuvent être stockés dans la pile ou directement dans d'autres types sans allocation supplémentaire dans le tas. Le développeur peut introduire un tableau en ligne en écrivant la taille entre crochets avant l'élément, ou en utilisant la syntaxe abrégée :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">struct</span> Game <span class="br0">&#123;</span>
  <span style="color: #808080;">// Shorthand for InlineArray&lt;40, Sprite&gt;</span>
  <span style="color: #0000ff;">var</span> bricks: <span class="br0">&#91;</span><span style="color: #cc66cc;">40</span> of Sprite<span class="br0">&#93;</span>
&nbsp;
  <span style="color: #0000ff;">init</span><span class="br0">&#40;</span>_ brickSprite: Sprite<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    bricks = .<span style="color: #0000ff;">init</span><span class="br0">&#40;</span>repeating: brickSprite<span class="br0">&#41;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Le nouveau type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Span</span> offre un accès direct et sécurisé à la mémoire contiguë. <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Span</span> garantit la sécurité de la mémoire en s'assurant que celle-ci reste valide pendant son utilisation. Ces garanties sont vérifiées lors de la compilation, sans surcoût d'exécution, et éliminent les problèmes de sécurité de la mémoire inhérents aux pointeurs, tels que les bogues de type « use-after-free ».<br />
<br />
Swift 6.2 améliore ses capacités pour les projets de bas niveau et critiques en matière de sécurité au-delà des nouvelles API :<br />
<br />
<ul><li style=""> <b>Swift embarqué :</b> Swift embarqué inclut désormais l'ensemble des API String de Swift, tous les types pour les protocoles contraints par classe, ainsi que les nouveaux types <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">InlineArray</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Span</span>.</li><li style=""> <b>Interopérabilité C++ sécurisée :</b> les projets qui combinent Swift et C++ peuvent tirer parti des abstractions sécurisées de Swift, telles que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Span</span> pour les API C++, grâce à des annotations d'en-tête.</li><li style=""> <b>Sécurité mémoire stricte en option :</b> Swift assure la sécurité mémoire depuis sa création, tout en permettant l'utilisation de constructions non sécurisées telles que les pointeurs non sécurisés lorsque cela est nécessaire, par exemple lors de l'utilisation d'une API C qui accepte les pointeurs. Swift 6.2 introduit la sécurité mémoire stricte optionnelle, qui signale les utilisations de constructions non sécurisées afin que le développeur puisse les remplacer par des alternatives sécurisées ou les reconnaître explicitement dans le code source. Il s'agit d'une option facultative, car la majorité des projets n'ont pas besoin d'un tel niveau de sécurité. La sécurité mémoire stricte est réservée aux projets ayant les exigences de sécurité les plus élevées.</li></ul><br />
<b><font size="3">Workflows rationalisés</font></b> <br />
<br />
Au-delà des améliorations du langage, Swift 6.2 fluidifie le cycle quotidien d'itération consistant à éditer, compiler et déboguer le code.<br />
<br />
<b><font size="2">Extension Swift pour VS Code</font></b><br />
<br />
L'extension Swift pour VS Code est désormais officiellement vérifiée et distribuée par Swift.org. La dernière version de l'extension comprend :<br />
<br />
<ul><li style=""> Indexation en arrière-plan par défaut : écrire du code grâce à des fonctionnalités d'édition rapides et toujours à jour, telles que le saut vers la définition et la complétion de code.</li><li style=""> Débogage LLDB intégré : parcourir le code Swift, définir des points d'arrêt et inspecter l'état à l'aide de LLDB directement dans VS Code.</li><li style=""> Panneau de projet Swift : naviguer parmi les cibles, les dépendances et les tâches d'un projet Swift dans la vue Explorateur.</li><li style=""> Aperçu DocC en live : prévisualiser la documentation rendue côte à côte avec le code, la mise à jour se fait en live pendant la saisie.</li></ul><br />
Ces améliorations apportées au flux de travail facilitent le travail sur les projets Swift dans l'environnement de votre choix grâce à des outils de premier ordre.<br />
<br />
<b><font size="2">Contrôle précis des avertissements</font></b><br />
<br />
Swift 6.2 améliore la gestion des avertissements du compilateur en permettant un contrôle au niveau des groupes de diagnostics. Un groupe de diagnostics est une catégorie d'avertissements identifiée par un nom. Il est possible de spécifier le comportement souhaité des avertissements dans un groupe de diagnostics dans un manifeste de package Swift à l'aide de la méthode treatWarning sur SwiftSetting, ou de promouvoir tous les avertissements en erreurs à l'aide de la méthode treatAllWarnings. Par exemple, il est possible de promouvoir tous les avertissements en erreurs, à l'exception des avertissements concernant l'utilisation d'API obsolètes :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td valign="top"><pre style="margin: 0">.target<span class="br0">&#40;</span>
  name: <span style="color: #FF0000;">&quot;MyLibrary&quot;</span>,
  swiftSettings: <span class="br0">&#91;</span>
    .treatAllWarnings<span class="br0">&#40;</span><span style="color: #0000ff;">as</span>: .error<span class="br0">&#41;</span>,
    .treatWarning<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;DeprecatedDeclaration&quot;</span>, <span style="color: #0000ff;">as</span>: .warning<span class="br0">&#41;</span>,
  <span class="br0">&#93;</span>
<span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b><font size="2">Performances de compilation des macros</font></b><br />
<br />
Swift 6.2 améliore considérablement les temps de compilation des projets qui utilisent des API basées sur des macros. Auparavant, le système de compilation devait d'abord récupérer et compiler le paquet swift-syntax à partir du code source avant de compiler le projet macro, ce qui allongeait considérablement les temps de compilation, en particulier dans les environnements CI. SwiftPM prend désormais en charge les dépendances swift-syntax précompilées, éliminant ainsi complètement une étape de compilation coûteuse.<br />
<br />
<b><font size="2">Débogage asynchrone amélioré</font></b> <br />
<br />
Swift 6.2 facilite considérablement le suivi de ce qui se passe dans le code concurrent lors du débogage avec LLDB :  Exécution asynchrone robuste : exécution fiable des fonctions asynchrones dans LLDB, même lorsque l'appel asynchrone nécessite un changement de thread.<br />
<br />
<ul><li style=""> Exécution de la commande « step-in » dans les fonctions asynchrones : exécution fiable de la commande « step-in » dans les fonctions asynchrones, même lorsque l'appel asynchrone nécessite un changement de thread.</li><li style=""> Affichage du contexte de la tâche : visualiser la tâche sur laquelle s'exécute un morceau de code lorsqu'il est arrêté à un point d'arrêt et lors de l'affichage de la trace de retour pour le thread actuel.</li><li style=""> Tâches nommées : attribution de noms lisibles par l'utilisateur lors de la création de tâches, qui apparaissent dans le contexte de la tâche dans les outils de débogage et de profilage.</li></ul><br />
<b><font size="2">Migration vers les fonctionnalités à venir</font></b> <br />
<br />
Swift 6.2 comprend des outils de migration pour permettre l'adoption des fonctionnalités à venir du langage :<br />
<br />
<ul><li style=""> Identifier les incompatibilités de source : identifier les modèles de code qui ne compileront plus ou modifieront leur comportement lorsque la fonctionnalité à venir sera activée, grâce aux avertissements générés par les outils de migration.</li><li style=""> Automatiser les modifications de code : appliquer des correctifs pour mettre à jour le code afin de préserver son comportement existant.</li></ul><br />
Cela simplifie le processus d'activation des fonctionnalités à venir en éliminant la tâche fastidieuse des modifications manuelles du code. <br />
<br />
<b><font size="3">Mises à jour des bibliothèques principales</font></b><br />
<br />
Que vous gériez des processus externes, réagissiez à des changements d'état ou écriviez des suites de tests, les bibliothèques Swift 6.2 évoluent pour vous aider à écrire un code plus propre et plus sûr.<br />
<br />
<b><font size="2">Sous-processus</font></b><br />
<br />
Swift 6.2 introduit un nouveau package Subprocess qui offre une API simplifiée et adaptée à la concurrence pour lancer et gérer des processus externes. Cela inclut des API construites avec async/await, un contrôle précis de l'exécution des processus, une configuration spécifique à la plateforme, et plus encore — idéal pour les scripts, l'automatisation et les tâches côté serveur :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">import</span> Subprocess
&nbsp;
<span style="color: #0000ff;">let</span> swiftPath = FilePath<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;/usr/bin/swift&quot;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">let</span> result = <span style="color: #0000ff;">try</span> await run<span class="br0">&#40;</span>
  .path<span class="br0">&#40;</span>swiftPath<span class="br0">&#41;</span>,
  arguments: <span class="br0">&#91;</span><span style="color: #FF0000;">&quot;--version&quot;</span><span class="br0">&#93;</span>
<span class="br0">&#41;</span>
&nbsp;
<span style="color: #0000ff;">let</span> swiftVersion = result.standardOutput</pre></td></tr></table></code><hr />
</div><br />
<br />
<b><font size="2">Foundation</font></b><br />
<br />
Dans Swift 6.2, la bibliothèque Foundation comprend une API NotificationCenter moderne qui utilise des types de notification concrets au lieu de s'appuyer sur des chaînes de caractères et des dictionnaires non typés pour les noms et les charges utiles des notifications. Cela signifie que vous pouvez définir une structure de notification avec des propriétés stockées, et que les observateurs peuvent utiliser le type sans indexation et conversion dynamique sujettes à des erreurs. Les types de notification spécifient également s'ils sont publiés de manière synchrone sur l'acteur principal ou de manière asynchrone via une conformité à MainActorMessage ou AsyncMessage, ce qui élimine les erreurs de concurrence lors de l'utilisation des notifications de l'acteur principal.<br />
<br />
<b><font size="2">Observation</font></b><br />
<br />
Swift 6.2 permet la diffusion en continu des changements d'état transactionnels des types observables à l'aide du nouveau type de séquence asynchrone Observations. Les mises à jour incluent tous les changements synchrones apportés aux propriétés observables, et la transaction se termine au prochain await qui suspend. Cela évite les mises à jour redondantes de l'interface utilisateur, améliore les performances et garantit que votre code réagit à un instantané cohérent de la valeur.<br />
<br />
<b><font size="2">Tests Swift</font></b><br />
<br />
Les tests Swift dans Swift 6.2 ajoutent de nouvelles API pour améliorer l'expressivité des tests et de leurs résultats :<br />
<br />
<ul><li style=""> Les tests de sortie permettent de vérifier que le code se termine dans des conditions spécifiques, telles qu'une condition préalable non remplie. Les tests de sortie s'exécutent dans un nouveau processus et vérifient que le comportement de sortie correspond aux attentes du développeur, ce qui lui permet d'exercer des chemins d'échec critiques comme il le ferait dans n'importe quel autre test.</li><li style=""> Les pièces jointes permettent à un développeur d'inclure des informations supplémentaires dans les résultats des tests, notamment des chaînes de caractères, des images, des journaux et d'autres artefacts, qui apparaissent dans les rapports de test ou sont enregistrés sur le disque. Il est ainsi plus facile de diagnostiquer les défaillances à l'aide de preuves concrètes, qu'il s'agisse d'une capture d'écran de l'état de l'interface utilisateur, d'une charge utile JSON ou d'une trace des étapes ayant conduit au problème.</li><li style=""> Les noms d'affichage des identifiants bruts permettent de personnaliser les noms des fonctions de test et des types de suites avec moins de code :</li></ul><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">  -@Test<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;square() returns x * x&quot;</span><span class="br0">&#41;</span>
  -<span style="color: #0000ff;">func</span> squareIsXTimesX<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
  +@Test <span style="color: #0000ff;">func</span> `square<span class="br0">&#40;</span><span class="br0">&#41;</span> returns x * x`<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
     #expect<span class="br0">&#40;</span>square<span class="br0">&#40;</span><span style="color: #cc66cc;">4</span><span class="br0">&#41;</span> == <span style="color: #cc66cc;">4</span> * <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>
   <span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<b><font size="3">Prise en charge de WebAssembly</font></b><br />
<br />
Swift 6.2 prend désormais en charge WebAssembly, également connu sous le nom de Wasm. WebAssembly est une plateforme de machine virtuelle axée sur la portabilité, la sécurité et les performances élevées. Les développeurs peuvent désormais créer des applications client et serveur pour Wasm et les déployer sur le navigateur ou d'autres environnements d'exécution.<br />
<br />
<b>Source :</b> <a rel="nofollow" href="https://developer.apple.com/swift/whats-new/" target="_blank">Apple</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Que pensez-vous de cette version du langage de programmation Swift ?<br />
:fleche: Trouvez-vous les améliorations apportées par cette version cohérentes et pertinentes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/362800/Swift-6-la-nouvelle-version-majeure-du-langage-de-programmation-Swift-est-disponible-avec-une-nouvelle-bibliotheque-Swift-Testing-et-une-prise-en-charge-etendue-de-Linux-et-de-Windows/" target="_blank">Swift 6, la nouvelle version majeure du langage de programmation Swift, est disponible, avec une nouvelle bibliothèque Swift Testing et une prise en charge étendue de Linux et de Windows</a><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/293633/En-route-vers-Swift-6-l-equipe-en-charge-du-developpement-de-Swift-devoile-la-nouvelle-feuille-de-route-du-projet/" target="_blank">En route vers Swift 6 : l'équipe en charge du développement de Swift dévoile la nouvelle feuille de route du projet</a><br />
<br />
:fleche: <a href="https://swift.developpez.com/actu/352903/Apple-recrute-des-developpeurs-de-compilateurs-pour-ameliorer-l-interoperabilite-entre-Swift-et-Cplusplus/" target="_blank">Apple recrute des développeurs de compilateurs pour améliorer l'interopérabilité entre Swift et C++</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1980/systemes/apple/swift/">Swift</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179314/systemes/apple/swift/apple-publie-swift-6-2-concurrence-simplifiee-securite-amelioree-support-webassembly/</guid>
		</item>
		<item>
			<title>Apple migre son service de surveillance des mots de passe de Java vers Swift pour optimiser les performances</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2177621&amp;goto=newpost</link>
			<pubDate>Thu, 19 Jun 2025 20:50:01 GMT</pubDate>
			<description>*Apple migre son service de...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Apple migre son service de surveillance des mots de passe de Java vers Swift et obtient une augmentation de 40 % des performances</font></b><br />
<b><font size="1">avec une réduction de 85 % du nombre de lignes de code</font></b><br />
<br />
<b>Apple a annoncé avoir migré avec son service de surveillance des mots de passe de Java à Swift. L'équipe responsable a ajouté que cette migration a permis une augmentation de débit de 40 % et une réduction de 50 % de l'utilisation de la capacité de Kubernetes. La réécriture a permis de résoudre les problèmes de latence du ramasse-miettes de Java et de consommation élevée de la mémoire, Swift offrant des temps de réponse inférieurs à la milliseconde et des capacités de démarrage à froid plus rapides. Elle aurait également permis de réduire de 85 % le nombre de lignes de code tout en gérant des milliards de requêtes quotidiennes pour la détection des brèches.</b><br />
<br />
Le service de surveillance des mots de passe d'Apple est intégré dans l'écosystème plus large de l'application « Mot de passe ». Il vérifie en toute sécurité si les informations d'identification sauvegardées d'un utilisateur sont apparues dans des violations de données connues, sans révéler des informations privées à Apple. Il traite des milliards de demandes par jour, en effectuant des comparaisons cryptographiques à l'aide de protocoles préservant la vie privée.<br />
<br />
<b><font size="3">Les problèmes techniques liés à l'ancienne version du service</font></b><br />
<br />
Initialement écrit en Java, le service présentait des limites de performance et de gestion de la mémoire. Selon l'équipe d'Apple, en dépit des optimisations avancées de la machine virtuelle Java (JVM), l'outil ne répondait pas de manière optimale aux exigences croissantes de mise à l'échelle et de rapidité. Selon l'équipe d'Apple, la collecte de déchets provoquait des temps de pause imprévisibles en cas de charge, ce qui dégradait la cohérence de la latence.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p668226d1750365975/systemes/apple/swift/apple-migre-service-surveillance-mots-passe-java-vers-swift-optimiser-performances/resource-utilization.png/" border="0" alt="Nom : resource utilization.png
Affichages : 58021
Taille : 21,2 Ko"  style="float: CONFIG" /></div><br />
Les frais généraux de démarrage (initialisation de la JVM, chargement des classes et compilation juste à temps (JIT)) ralentissaient la capacité du système à évoluer en temps réel. En outre, l'empreinte mémoire du service, qui atteint souvent des dizaines de gigaoctets par instance, réduit l'efficacité de l'infrastructure et augmente les coûts d'exploitation. Selon l'équipe d'Apple, la réécriture du service avait pour but de parvenir aux résultats suivants :<br />
<br />
<ul><li style="">optimiser les performances et l'évolutivité du service ;<br /></li><li style="">réduire le délai de démarrage des instances ;<br /></li><li style="">contourner les limites posées par la gestion de la mémoire en Java (notamment le ramasse-miettes) ;<br /></li><li style="">profiter de la syntaxe expressive et de la sécurité offerte par le langage Swift.<br />
</li></ul><br />
<br />
« Pendant des années, nous avons utilisé Java pour alimenter des services critiques à grande échelle en raison de sa stabilité et de ses performances éprouvées. Mais l'approche de gestion de la mémoire de Java ne correspond plus à nos exigences croissantes et à nos objectifs d'efficacité », a écrit l'équipe. <br />
<br />
<b><font size="3">Les raisons qui ont motivé le choix de Swift pour la réécriture</font></b><br />
<br />
Développé à l'origine comme un langage côté client pour les plateformes Apple, Swift s'est depuis étendu à des cas d'utilisation côté serveur. L'équipe d'ingénieurs d'Apple a choisi Swift non seulement pour son alignement sur l'écosystème, mais aussi pour sa capacité à offrir des performances constantes dans les environnements à forte intensité de calcul. La réécriture s'est également appuyée sur Vapor, un framework Web Swift très répandu.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p668225d1750365903/systemes/apple/swift/apple-migre-service-surveillance-mots-passe-java-vers-swift-optimiser-performances/password-monitoring-service.png/" border="0" alt="Nom : password monitoring service.png
Affichages : 10848
Taille : 48,8 Ko"  style="float: CONFIG" /></div><br />
D'autres paquets personnalisés ont été mis en œuvre pour gérer les opérations sur la courbe elliptique, l'audit cryptographique et les intergiciels spécifiques au domaine de la surveillance des mots de passe. « Au lieu de simplement augmenter les ressources matérielles, nous recherchions un langage plus efficace pour soutenir notre croissance tout en réduisant la charge des serveurs », a expliqué l'équipe d'Apple dans un récent billet de blogue.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			<div>
				Envoyé par <strong>L'équipe d'Apple</strong>
				
			</div>
			<div class="message"><br />
Avant de chercher un langage de remplacement, nous avons cherché des moyens d'ajuster la JVM pour obtenir les performances requises. Le ramasse-miettes G1 de Java a atténué certaines limites des ramasse-miettes précédents en introduisant des fonctionnalités telles que des temps de pause prévisibles, une collecte basée sur les régions et un traitement simultané.<br />
<br />
Cependant, même avec ces avancées, la gestion du ramasse-miettes à grande échelle reste un défi en raison de problèmes tels que les pauses GC prolongées sous des charges élevées, l'augmentation de la charge de travail liée aux performances et la complexité du réglage fin pour des charges de travail diverses.<br /></div>
			
		<hr />
	</div>
</div>La gestion déterministe de la mémoire de Swift, basée sur le comptage des références plutôt que sur la collecte des déchets, a éliminé les pics de latence causés par les pauses de la collecte des déchets. Cette cohérence s'est avérée essentielle pour un système à faible latence à l'échelle. Après la réécriture, Apple a signalé des temps de latence inférieurs à la milliseconde dans le 99,9e percentile et une baisse spectaculaire de l'utilisation de la mémoire.<br />
<br />
<b><font size="3">Gains techniques et opérationnels obtenus après la réécriture</font></b><br />
<br />
Selon l'équipe, la migration vers Swift s’est révélée très bénéfique. Les instances Swift consommaient des centaines de mégaoctets, contre des dizaines de gigaoctets avec Java. Les temps de démarrage se sont également améliorés. Sans surcharge d'initialisation de la JVM ni échauffement JIT, les services Swift peuvent démarrer à froid plus rapidement, ce qui répond aux exigences d'Apple en matière de mise à l’échelle automatique globale.<br />
<br />
Concrètement, le débit du service a augmenté de 40&#8201;%, la consommation mémoire a diminué de près de moitié, et la capacité de traitement par instance a été nettement améliorée. En parallèle, le code source est devenu beaucoup plus concis, avec environ 85&#8201;% de lignes de code en moins comparé à l'implémentation Java, ce qui facilite la maintenance et la lecture. Ce qui fait écho aux critiques de longue date selon lesquelles Java est un langage verbeux.<br />
<br />
Cette migration marque un tournant. Swift démontre qu'il est capable de soutenir des services cloud à très grande échelle, bien au-delà de son usage traditionnel côté client. Cela illustre aussi la volonté d'Apple de rationaliser ses technologies internes autour de langages plus modernes et mieux adaptés à ses besoins spécifiques. Selon l'équipe, la sécurité est un autre domaine dans lequel Swift adopte une approche distinctive par rapport à Java.<br />
<br />
« Lorsque vous réécrivez un produit dans une nouvelle pile, vous le créez pratiquement à partir de zéro. Vous faites les choses correctement et vous n'apportez pas tout le patchwork et la dette technique. C'est ce qui a provoqué cette accélération. Ce n'est pas le changement de langue », a écrit un critique.<br />
<br />
<b><font size="3">Conclusion</font></b><br />
<br />
La migration d'Apple reflète une tendance plus large : le passage à des langages orientés vers la performance pour des services fonctionnant à une très grande échelle. Meta utilise Rust depuis longtemps, depuis des systèmes de gestion de code source ultraperformants jusqu'aux langages de programmation pour la blockchain. Netflix a introduit Rend, un proxy haute performance écrit en Go, pour prendre le relais d'un client basé sur Java interagissant avec Memcached.<br />
<br />
AWS s'appuie de plus en plus sur Rust dans les services où les performances déterministes et la faible utilisation des ressources améliorent l'efficacité de l'infrastructure. Bien que cela ne signifie pas que Java et les langages similaires sont en déclin, il est de plus en plus évident qu'à l'extrémité supérieure des exigences de performance, les entreprises et les ingénieurs logiciels constatent que les runtimes à usage général ne suffisent plus désormais.<br />
<br />
L'année dernière, <a href="https://web.developpez.com/actu/361360/" target="_blank">le navigateur Ladybird a annoncé qu'il commencera à utiliser le langage Swift au lieu de C++</a>. Selon le développeur Andreas Kling, Swift offre une sécurité contre la course à la mémoire et aux données, et est un langage moderne avec une ergonomie solide. Il possède une meilleure interopérabilité avec le C++ pour une adoption progressive. L'équipe a déclaré qu'elle adoptera Swift après la sortie de Swift 6 de sa phase bêta.<br />
<br />
Source : <a rel="nofollow" href="https://www.swift.org/blog/swift-at-apple-migrating-the-password-monitoring-service-from-java/" target="_blank">billet de blogue de l'équipe d'Apple</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Que pensez-vous des gains de performances obtenus après la migration du service de Java vers Swift ?<br />
:fleche: L'industrie adopte de plus en plus des langages orientés vers la performance et la sécurité de la mémoire comme Rust et Swift. Qu'en pensez-vous ?<br />
<br />
<b>Voir aussi</b><br />
<br />
:fleche: <a href="https://java.developpez.com/actu/370217/" target="_blank">Oracle annonce la disponibilité de Java 24, apportant des améliorations en matière de performance, de stabilité et de sécurité à la plateforme pour permettre aux entreprises d'accélérer leur croissance</a><br />
<br />
:fleche: <a href="https://web.developpez.com/actu/361360/" target="_blank">Le navigateur Ladybird commencera à utiliser le langage Swift au lieu de C++ cet automne, car Swift offre une sécurité de la mémoire et est également un langage moderne avec une ergonomie solide</a><br />
<br />
:fleche: <a href="https://linux.developpez.com/actu/372925/" target="_blank">Au-delà de Docker : Apple dévoile discrètement &quot;Container&quot;, un framework Swift open source pour faciliter l'exécution de containers Linux sur macOS et améliorer la performance et la sécurité</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p668225d1750365903/systemes/apple/swift/apple-migre-service-surveillance-mots-passe-java-vers-swift-optimiser-performances/password-monitoring-service.png/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p668226d1750365975/systemes/apple/swift/apple-migre-service-surveillance-mots-passe-java-vers-swift-optimiser-performances/resource-utilization.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1980/systemes/apple/swift/">Swift</category>
			<dc:creator>Mathis Lucas</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2177621/systemes/apple/swift/apple-migre-service-surveillance-mots-passe-java-vers-swift-optimiser-performances/</guid>
		</item>
	</channel>
</rss>
