<?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 - Rust</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur Rust, langage de développement libre et open source développé par Mozilla.]]></description>
		<language>fr</language>
		<lastBuildDate>Sun, 31 May 2026 00:58:08 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 - Rust</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[Rust 1.94 introduit la nouvelle méthode array_windows, l'inclusion de configurations Cargo]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182526&amp;goto=newpost</link>
			<pubDate>Mon, 09 Mar 2026 10:55:15 GMT</pubDate>
			<description>*Le langage de programmation...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Le langage de programmation Rust 1.94 introduit la nouvelle méthode array_windows, l'inclusion de configurations Cargo et la prise en charge de TOML 1.1 dans Cargo</font></b> <br />
<br />
<b>Rust 1.94 est désormais disponible, poursuivant l'accent mis par le langage sur les performances, la sécurité des types, la concurrence et la sécurité de la mémoire. L'une des principales nouveautés est la nouvelle méthode <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">array_windows</span> pour les tranches. Outre les itérateurs, Cargo, le gestionnaire de paquets Rust, bénéficie d'une fonctionnalité de restructuration : les fichiers de configuration prennent désormais en charge la clé <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">include</span>. De plus, Cargo analyse désormais la version 1.1 de TOML dans les manifestes et les fichiers de configuration, ce qui permet d'utiliser les nouvelles fonctionnalités syntaxiques de TOML et d'améliorer la compatibilité avec les outils.</b><br />
<br />
Rust est un langage de programmation compilé multi-paradigme qui met l'accent sur la performance, la sûreté des types et la concurrence. Il assure la sécurité mémoire, ce qui signifie que toutes les références pointent vers une mémoire valide, sans nécessiter l'utilisation de techniques de gestion de la mémoire automatisée telles que le ramasse-miettes. Afin d'assurer la sécurité de la mémoire et d'empêcher une situation de compétition aux données, son « vérificateur d'emprunts » suit la durée de vie des objets de toutes les références dans un programme à la compilation.<br />
<br />
Rust 1.94 est désormais disponible, poursuivant l'accent mis par le langage sur les performances, la sécurité des types, la concurrence et la sécurité de la mémoire. L'une des principales nouveautés est la nouvelle méthode <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">array_windows</span> pour les tranches, qui offre un moyen d'itérer sur des fenêtres adjacentes de taille fixe, renvoyant des références à des tableaux de longueur constante. Cela permet un traitement plus sûr et plus performant des éléments de données groupés, particulièrement utile lorsque la longueur de la fenêtre peut être déduite au moment de la compilation.<br />
<br />
Outre les itérateurs, Cargo, le gestionnaire de paquets Rust, bénéficie d'une fonctionnalité de restructuration : les fichiers de configuration prennent désormais en charge la clé <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">include</span>. Cela permet une organisation et un partage plus clairs des détails de configuration, aidant les équipes à gérer les paramètres entre différents projets ou environnements. Il est à noter que les chemins de configuration inclus peuvent être marqués comme facultatifs, ce qui permet de s'adapter à différentes configurations entre développeurs ou scénarios de compilation. De plus, Cargo analyse désormais la version 1.1 de TOML dans les manifestes et les fichiers de configuration, ce qui permet d'utiliser les nouvelles fonctionnalités syntaxiques de TOML et d'améliorer la compatibilité avec les outils.<br />
<br />
À la suite de ces mises à jour essentielles, Rust 1.94 propose également plusieurs API stabilisées et corrige divers bogues. Ces changements visent collectivement à améliorer l'expérience quotidienne des développeurs et à prendre en charge l'évolution des bases de code.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p674844d1773055641/general-developpement/programmation-systeme/rust/rust-1-94-introduit-nouvelle-methode-array_windows-linclusion-configurations-cargo/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 5577
Taille : 18,4 Ko"  style="float: CONFIG" /></div><br />
<b>Fenêtres de tableaux</b><br />
<br />
Rust 1.94 ajoute <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">array_windows</span>, une méthode d'itération pour les tranches. Elle fonctionne comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">windows</span>, mais avec une longueur constante, de sorte que les éléments de l'itérateur sont <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&amp;<span class="br0">&#91;</span>T; N<span class="br0">&#93;</span></span> plutôt que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&amp;<span class="br0">&#91;</span>T<span class="br0">&#93;</span></span> de taille dynamique. Dans de nombreux cas, la longueur de la fenêtre peut même être déduite de la façon dont l'itérateur est utilisé !<br />
<br />
Par exemple, une partie d'une énigme de l'Advent of Code 2016 consiste à rechercher des motifs ABBA : « deux caractères différents suivis de l'inverse de cette paire, comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">xyyx</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">abba</span> ». Si nous supposons qu'il n'y a que des caractères ASCII, cela pourrait être écrit en balayant les fenêtres de la tranche d'octets comme ceci :<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;">fn</span> has_abba<span class="br0">&#40;</span>s: &amp;str<span class="br0">&#41;</span> -&gt; bool <span class="br0">&#123;</span>
    s.as_bytes<span class="br0">&#40;</span><span class="br0">&#41;</span>
        .array_windows<span class="br0">&#40;</span><span class="br0">&#41;</span>
        .any<span class="br0">&#40;</span>|<span class="br0">&#91;</span>a1, b1, b2, a2<span class="br0">&#93;</span>| <span class="br0">&#40;</span>a1 != b1<span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>a1 == a2<span class="br0">&#41;</span> &amp;&amp; <span class="br0">&#40;</span>b1 == b2<span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Le modèle d'argument de déstructuration dans cette fermeture permet au compilateur de déduire que nous voulons ici des fenêtres de 4. Si nous avions utilisé l'ancien itérateur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.windows<span class="br0">&#40;</span><span style="color: #cc66cc;">4</span><span class="br0">&#41;</span></span>, cet argument serait alors une tranche que nous devrions indexer manuellement, en espérant que la vérification des limites d'exécution soit optimisée.<br />
<br />
<b>Inclusion de la configuration Cargo</b><br />
<br />
Cargo prend désormais en charge la clé <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">include</span> dans les fichiers de configuration (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cargo/config.toml</span>), ce qui permet une meilleure organisation, un meilleur partage et une meilleure gestion des configurations Cargo entre les projets et les environnements. Ces chemins d'inclusion peuvent également être marqués <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">optional</span> s'ils ne sont pas présents dans certaines circonstances, par exemple en fonction des choix des développeurs locaux.<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="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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#</span> array of paths
include = <span class="br0">&#91;</span>
    <span style="color: #FF0000;">&quot;frodo.toml&quot;</span>,
    <span style="color: #FF0000;">&quot;samwise.toml&quot;</span>,
<span class="br0">&#93;</span>
&nbsp;
<span style="color: #339933;">#</span> inline tables <span style="color: #0000ff;">for</span> more control
include = <span class="br0">&#91;</span>
    <span class="br0">&#123;</span> path = <span style="color: #FF0000;">&quot;required.toml&quot;</span> <span class="br0">&#125;</span>,
    <span class="br0">&#123;</span> path = <span style="color: #FF0000;">&quot;optional.toml&quot;</span>, optional = <span style="color: #FF0000;">true</span> <span class="br0">&#125;</span>,
<span class="br0">&#93;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>Prise en charge de TOML 1.1 dans Cargo</b><br />
<br />
Cargo analyse désormais TOML v1.1 pour les manifestes et les fichiers de configuration. Consultez les notes de mise à jour TOML pour connaître les modifications détaillées, notamment :<br />
<br />
- Tableaux en ligne sur plusieurs lignes et avec des virgules de fin<br />
- Caractères d'échappement de chaîne <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">\xHH</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">\e</span>- Secondes facultatives dans les heures (définies sur 0)<br />
<br />
Par exemple, une dépendance comme celle-ci :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">serde = <span class="br0">&#123;</span> version = <span style="color: #FF0000;">&quot;1.0&quot;</span>, features = <span class="br0">&#91;</span><span style="color: #FF0000;">&quot;derive&quot;</span><span class="br0">&#93;</span> <span class="br0">&#125;</span></code><hr />
</div><br />
<br />
<br />
... peut désormais être écrite comme suit :<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">serde = <span class="br0">&#123;</span>
    version = <span style="color: #FF0000;">&quot;1.0&quot;</span>,
    features = <span class="br0">&#91;</span><span style="color: #FF0000;">&quot;derive&quot;</span><span class="br0">&#93;</span>,
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Notez que l'utilisation de ces fonctionnalités dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Cargo.toml</span> augmentera votre MSRV (version minimale de Rust prise en charge) de développement pour nécessiter ce nouveau parseur Cargo, et les outils tiers qui lisent le manifeste devront peut-être également mettre à jour leurs parseurs. Cependant, Cargo réécrit automatiquement les manifestes lors de la publication afin de rester compatible avec les anciens parseurs. Il est donc toujours possible de prendre en charge une MSRV antérieure pour les utilisateurs de votre crate.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://blog.rust-lang.org/2026/03/05/Rust-1.94.0/" target="_blank">Annonce Rust 1.94</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/379545/La-version-1-93-du-langage-de-programmation-Rust-est-disponible-introduisant-musl-1-2-5-des-ameliorations-de-l-allocateur-et-des-attributs-cfg-sur-les-lignes-asm/" target="_blank">La version 1.93 du langage de programmation Rust est disponible, introduisant musl 1.2.5, des améliorations de l'allocateur et des attributs cfg sur les lignes asm!</a><br />
<br />
:fleche: <a href="https://microsoft.developpez.com/actu/378682/Submerge-par-les-bugs-dans-ses-applications-la-solution-de-Microsoft-c-est-de-supprimer-tout-le-code-C-et-Cplusplus-de-ses-referentiels-d-ici-2030-pour-le-remplacer-par-Rust/" target="_blank">Submergé par les bugs dans ses applications, la solution de Microsoft c'est de supprimer tout le code C et C++ de ses référentiels d'ici 2030, pour le remplacer par Rust</a><br />
<br />
:fleche: <a href="https://intelligence-artificielle.developpez.com/actu/380556/L-IA-abaisse-les-barrieres-mais-amplifie-les-mauvais-patterns-les-donnees-Octoverse-de-GitHub-revelent-la-mecanique-silencieuse-qui-redistribue-les-parts-de-marche-entre-langages-de-programmation/" target="_blank">L'IA abaisse les barrières mais amplifie les mauvais patterns : les données Octoverse de GitHub révèlent la mécanique silencieuse qui redistribue les parts de marché entre langages de programmation</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/p674844d1773055641/general-developpement/programmation-systeme/rust/rust-1-94-introduit-nouvelle-methode-array_windows-linclusion-configurations-cargo/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Jade Emy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182526/general-developpement/programmation-systeme/rust/rust-1-94-introduit-nouvelle-methode-array_windows-l-inclusion-configurations-cargo/</guid>
		</item>
		<item>
			<title><![CDATA[Rust 1.93 apporte musl 1.2.5, des améliorations de l'allocateur et des attributs cfg sur les lignes asm!]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181709&amp;goto=newpost</link>
			<pubDate>Sun, 25 Jan 2026 03:52:20 GMT</pubDate>
			<description>*La version 1.93 du langage...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 1.93 du langage de programmation Rust est disponible, introduisant musl 1.2.5, des améliorations de l'allocateur et des attributs cfg sur les lignes asm!</font></b><br />
<br />
<b>Rust 1.93 est désormais disponible, avec des mises à jour qui concernent à la fois les développeurs et l'écosystème Rust au sens large. Dans cette version, toutes les cibles <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*-linux-musl</span> sont livrées avec la version 1.2.5 de musl, qui remplace le bundle 1.2.3 précédent. Ce changement apporte diverses corrections de bogues et améliorations. Cependant, il introduit également un changement radical qui affecte les builds musl statiques pour les développeurs x86_64, AArch64 et POWER PPC64LE.</b><br />
<br />
Rust est un langage de programmation compilé multi-paradigme qui met l'accent sur la performance, la sûreté des types et la concurrence. Il assure la sécurité mémoire (en), ce qui signifie que toutes les références pointent vers une mémoire valide, sans nécessiter l'utilisation de techniques de gestion de la mémoire automatisée telles que le ramasse-miettes. Afin d'assurer la sécurité de la mémoire et d'empêcher une situation de compétition aux données, son « vérificateur d'emprunts » suit la durée de vie des objets de toutes les références dans un programme à la compilation.<br />
<br />
Rust 1.93 est désormais disponible, avec des mises à jour qui concernent à la fois les développeurs et l'écosystème Rust au sens large. Dans cette version, toutes les cibles <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*-linux-musl</span> sont livrées avec la version 1.2.5 de musl, qui remplace le bundle 1.2.3 précédent. Ce changement apporte diverses corrections de bogues et améliorations. Cependant, il introduit également un changement radical qui affecte les builds musl statiques pour les développeurs x86_64, AArch64 et POWER PPC64LE.<br />
<br />
Outre les mises à jour de la plateforme, la bibliothèque standard Rust a subi des changements internes. Les allocateurs globaux écrits en Rust peuvent désormais utiliser en toute sécurité la macro de stockage local au thread et l'inspection des threads sans problèmes de réentrance. Cela est rendu possible en s'appuyant sur l'allocateur système pour les opérations associées.<br />
<br />
S'appuyant sur la facilité d'utilisation du langage, Rust 1.93 permet la compilation conditionnelle (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cfg</span>) pour des instructions individuelles dans des blocs d'assemblage en ligne. Auparavant, pour obtenir un contrôle fin, il fallait dupliquer des blocs <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">asm!</span></span> entiers. Désormais, les développeurs peuvent inclure des instructions de manière conditionnelle, ce qui améliore la clarté et la maintenabilité du code.<br />
<br />
À la suite de ces changements apportés au langage et à la plate-forme, Rust 1.93 stabilise également plusieurs nouvelles API dans la bibliothèque standard, offrant des fonctionnalités supplémentaires aux auteurs de crates et aux utilisateurs finaux.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p673578d1769314839/general-developpement/programmation-systeme/rust/rust-1-93-apporte-musl-1-2-5-ameliorations-l-allocateur-attributs-cfg-lignes-asm/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 4952
Taille : 18,4 Ko"  style="float: CONFIG" /></div><br />
<b>Mise à jour de musl intégré vers la version 1.2.5</b><br />
<br />
Les différentes cibles <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*-linux-musl</span> sont désormais toutes livrées avec musl 1.2.5. Cela affecte principalement les builds musl statiques pour <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">aarch64</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">powerpc64le</span> qui incluaient musl 1.2.3. Cette mise à jour comprend plusieurs corrections et améliorations, ainsi qu'un changement majeur qui affecte l'écosystème Rust.<br />
<br />
Pour l'écosystème Rust, la principale motivation de cette mise à jour est d'apporter des améliorations majeures au résolveur DNS de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">musl</span>, livré dans la version 1.2.4 et corrigé dans la version 1.2.5. Lors de l'utilisation de cibles musl pour la liaison statique, cela devrait rendre les binaires Linux portables qui effectuent des opérations réseau plus fiables, en particulier face à des enregistrements DNS volumineux et des serveurs de noms récursifs.<br />
<br />
Cependant, la version 1.2.4 s'accompagne également d'un changement radical : la suppression de plusieurs symboles de compatibilité hérités que la crate libc Rust utilisait. Une correction a été apportée dans la version 0.2.146 de libc en juin 2023 (il y a 2,5 ans), et elle a été suffisamment largement diffusée pour apporter cette modification aux cibles Rust.<br />
<br />
<b>Autoriser l'allocateur global à utiliser le stockage local au thread</b><br />
<br />
Rust 1.93 ajuste les composants internes de la bibliothèque standard afin de permettre aux allocateurs globaux écrits en Rust d'utiliser std's <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">thread_local!</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">std::thread::current</span> sans problème de réentrance, en utilisant à la place l'allocateur système.<br />
<br />
<b>Attributs <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cfg</span> sur les lignes <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">asm!</span></span></b><br />
<br />
Auparavant, si certaines parties d'une section d'assemblage en ligne devaient être <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cfg</span>, le bloc <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">asm!</span></span> complet devait être répété avec et sans cette section. Dans la version 1.93, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cfg</span> peut désormais être appliqué à des instructions individuelles dans le bloc <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">asm!</span></span><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: #0080ff;">asm!</span><span class="br0">&#40;</span> <span style="color: #808080;">// or global_asm! or naked_asm!</span>
    <span style="color: #FF0000;">&quot;nop&quot;</span>,
    <span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>cfg<span class="br0">&#40;</span>target_feature = <span style="color: #FF0000;">&quot;sse2&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></span>
    <span style="color: #FF0000;">&quot;nop&quot;</span>,
    <span style="color: #808080;">// ...</span>
    <span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>cfg<span class="br0">&#40;</span>target_feature = <span style="color: #FF0000;">&quot;sse2&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></span>
    a = <span style="color: #0000ff;">const</span> <span style="color: #cc66cc;">123</span>, <span style="color: #808080;">// only used on sse2</span>
<span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://blog.rust-lang.org/2026/01/22/Rust-1.93.0/" target="_blank">Announcing Rust 1.93.0</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ? <br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/378431/La-version-1-92-du-langage-de-programmation-Rust-est-disponible-introduisant-les-tables-de-deroulement-par-defaut-et-affinant-les-verifications-de-lints-et-d-attributs/" target="_blank">La version 1.92 du langage de programmation Rust est disponible, introduisant les tables de déroulement par défaut et affinant les vérifications de lints et d'attributs</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/378426/C-est-desormais-officiel-Rust-dans-le-noyau-Linux-sort-du-cadre-experimental-le-Rust-vient-de-faire-l-objet-d-integration-comme-partie-essentielle-du-kernel-aux-cotes-du-toujours-present-langage-C/" target="_blank">C'est désormais officiel : Rust dans le noyau Linux sort du cadre expérimental. Le Rust vient de faire l'objet d'intégration comme partie essentielle du kernel aux côtés du toujours présent langage C</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/377563/La-fondation-Rust-annonce-la-creation-d-un-fonds-pour-les-mainteneurs-afin-d-assurer-la-continuite-et-de-soutenir-les-roles-a-long-terme-des-developpeurs-qui-rendent-possible-le-langage-de-programmation-Rust/" target="_blank">La fondation Rust annonce la création d'un fonds pour les mainteneurs afin d'assurer la continuité et de soutenir les rôles à long terme des développeurs qui rendent possible le langage de programmation Rust</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/p673578d1769314839/general-developpement/programmation-systeme/rust/rust-1-93-apporte-musl-1-2-5-ameliorations-l-allocateur-attributs-cfg-lignes-asm/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181709/general-developpement/programmation-systeme/rust/rust-1-93-apporte-musl-1-2-5-ameliorations-l-allocateur-attributs-cfg-lignes-asm/</guid>
		</item>
		<item>
			<title><![CDATA[Rust 1.92 active les tables de déroulement par défaut et affine les vérifications de lints et d'attributs]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180956&amp;goto=newpost</link>
			<pubDate>Mon, 15 Dec 2025 06:43:11 GMT</pubDate>
			<description>*La version 1.92 du langage...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 1.92 du langage de programmation Rust est disponible, introduisant les tables de déroulement par défaut et affinant les vérifications de lints et d'attributs</font></b><br />
<br />
<b>Rust 1.92 est la dernière version du langage de programmation polyvalent, qui introduit des changements importants pour les développeurs. Notamment, les tables de déroulement sont désormais émises par défaut même lorsque le drapeau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span> est activé, ce qui garantit le bon fonctionnement des traces de retour en arrière dans les scénarios de panique-abandon. Les utilisateurs qui ne souhaitent pas utiliser les tables de déroulement peuvent désormais les désactiver explicitement avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cforce-unwind-tables=no</span>.</b><br />
<br />
Rust est un langage de programmation compilé multi-paradigme qui met l'accent sur la performance, la sûreté des types et la concurrence. Il assure la sécurité mémoire, ce qui signifie que toutes les références pointent vers une mémoire valide, sans nécessiter l'utilisation de techniques de gestion de la mémoire automatisée telles que le ramasse-miettes. Afin d'assurer la sécurité de la mémoire et d'empêcher une situation de compétition aux données, son « vérificateur d'emprunts » suit la durée de vie des objets de toutes les références dans un programme à la compilation. Rust a été remarqué pour son adoption rapide, selon le Stack Overflow Survey 2025, c'est le langage le plus apprécié dans ce sondage. <br />
<br />
Rust 1.92 est la dernière version du langage de programmation polyvalent, qui introduit des changements importants pour les développeurs. Notamment, les tables de déroulement sont désormais émises par défaut même lorsque le drapeau <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span> est activé, ce qui garantit le bon fonctionnement des traces de retour en arrière dans les scénarios de panique-abandon. Les utilisateurs qui ne souhaitent pas utiliser les tables de déroulement peuvent désormais les désactiver explicitement avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cforce-unwind-tables=no</span>.<br />
<br />
Suite aux améliorations continues apportées au système de types, cette version poursuit les efforts de stabilisation du type never. Deux futurs lints de compatibilité, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">never_type_fallback_flowing_into_unsafe</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dependency_on_unit_never_type_fallback</span>, sont désormais refusés par défaut, ce qui signifie que toute violation entraînera des erreurs de compilation plutôt que des avertissements ou une autorisation silencieuse.<br />
<br />
En ce qui concerne les lints, le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">unused_must_use</span> n'émet plus d'avertissement lorsque les fonctions renvoient un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span></span> ou un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ControlFlow</span>, tel que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span></span>. Cela reflète le fait que ces types d'erreurs ne peuvent pas réellement se produire, ce qui réduit les vérifications inutiles pendant le développement.<br />
<br />
Ces mises à jour fondamentales s'accompagnent de modifications importantes dans la gestion des attributs intégrés à Rust. Le compilateur traite désormais les attributs de manière plus stricte et génère des diagnostics plus clairs et plus cohérents. Par exemple, les arguments <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">macro_export</span> incorrects dans les dépendances sont désormais considérés comme des lints refusés par défaut, ce qui rend ces problèmes plus visibles lors de la compilation.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p672552d1765786136/general-developpement/programmation-systeme/rust/rust-1-92-active-tables-deroulement-defaut-affine-verifications-lints-d-attributs/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 21723
Taille : 18,4 Ko"  style="float: CONFIG" /></div><br />
Voici les principales mises à jour de la version 1.92.0 :<br />
<br />
<b>Lignes de code never type refusées par défaut</b><br />
<br />
Les équipes chargées du langage et du compilateur continuent de travailler à la stabilisation du type never. Dans cette version, les lignes de code <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">never_type_fallback_flowing_into_unsafe</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dependency_on_unit_never_type_fallback</span>, compatibles avec les versions futures, ont été refusées par défaut, ce qui signifie qu'elles provoqueront une erreur de compilation lorsqu'elles seront détectées.<br />
<br />
Il convient de noter que même si cela peut entraîner des erreurs de compilation, il s'agit toujours d'un lint ; ces lints peuvent tous être <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>allow<span class="br0">&#93;</span></span></span>. Ces lints ne se déclencheront également que lors de la compilation directe des crates concernées, et non lorsqu'elles sont compilées en tant que dépendances (bien qu'un avertissement soit signalé par Cargo dans de tels cas).<br />
<br />
Ces lints détectent le code susceptible d'être rompu par la stabilisation du type never. Il est fortement recommandé de les corriger s'ils sont signalés dans votre graphique de crate.<br />
<br />
Nous estimons qu'environ 500 crates sont concernées par ce lint. Malgré cela, nous pensons que cela est acceptable, car les lints ne constituent pas un changement radical et permettront de stabiliser le type never à l'avenir.<br />
<br />
<br />
<b><span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">unused_must_use</span> n'affiche plus d'avertissement concernant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, UninhabitedType&gt;</span></b><br />
<br />
Le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">unused_must_use</span> de Rust affiche un avertissement lorsque la valeur de retour d'une fonction est ignorée, si la fonction ou son type de retour est annoté avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>must_use<span class="br0">&#93;</span></span></span>. Par exemple, cela avertit si vous ignorez un type de retour de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span></span>, pour vous rappeler d'utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">?</span>, ou quelque chose comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.expect<span class="br0">&#40;</span>&laquo; ... &raquo;<span class="br0">&#41;</span></span>.<br />
<br />
Cependant, certaines fonctions renvoient <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span></span>, mais le type d'erreur qu'elles utilisent n'est en fait pas « habité », ce qui signifie que vous ne pouvez construire aucune valeur de ce type (par exemple, les types <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">!</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Infallible</span>).<br />
<br />
Le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">unused_must_use</span> n'affiche désormais plus d'avertissement sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, UninhabitedType&gt;</span> ou sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ControlFlow&lt;UninhabitedType, <span class="br0">&#40;</span><span class="br0">&#41;</span>&gt;</span>. Par exemple, il n'affichera pas d'avertissement sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, Infallible&gt;</span>. Cela évite d'avoir à vérifier une erreur qui ne peut jamais se produire.<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="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 /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">use</span> core::convert::Infallible;
<span style="color: #0000ff;">fn</span> can_never_fail<span class="br0">&#40;</span><span class="br0">&#41;</span> -&gt; <span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, Infallible&gt; <span class="br0">&#123;</span>
    <span style="color: #808080;">// ...</span>
    <span style="color: #FF0000;">Ok</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">fn</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    can_never_fail<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Ceci est particulièrement utile avec le modèle courant d'un trait associé à un type d'erreur, où le type d'erreur peut <i>parfois</i> être infaillible :<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="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 /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">trait</span> UsesAssocErrorType <span class="br0">&#123;</span>
    <span style="color: #0000ff;">type</span> Error;
    <span style="color: #0000ff;">fn</span> method<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; <span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, <span style="color: #0000ff;">Self</span>::Error&gt;;
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> CannotFail;
<span style="color: #0000ff;">impl</span> UsesAssocErrorType <span style="color: #0000ff;">for</span> CannotFail <span class="br0">&#123;</span>
    <span style="color: #0000ff;">type</span> Error = core::convert::Infallible;
    <span style="color: #0000ff;">fn</span> method<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; <span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, <span style="color: #0000ff;">Self</span>::Error&gt; <span class="br0">&#123;</span>
        <span style="color: #FF0000;">Ok</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> CanFail;
<span style="color: #0000ff;">impl</span> UsesAssocErrorType <span style="color: #0000ff;">for</span> CanFail <span class="br0">&#123;</span>
    <span style="color: #0000ff;">type</span> Error = std::io::Error;
    <span style="color: #0000ff;">fn</span> method<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; <span style="color: #0080ff;">Result</span>&lt;<span class="br0">&#40;</span><span class="br0">&#41;</span>, <span style="color: #0000ff;">Self</span>::Error&gt; <span class="br0">&#123;</span>
        <span style="color: #FF0000;">Err</span><span class="br0">&#40;</span>std::io::Error::other<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;something went wrong&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">fn</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    CannotFail.method<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span style="color: #808080;">// No warning</span>
    CanFail.method<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span style="color: #808080;">// Warning: unused `Result` that must be used</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>Émettre des tables de déroulement même lorsque <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span> est activé sous Linux</b><br />
<br />
Les backtraces avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span> fonctionnaient auparavant dans Rust 1.22, mais ne fonctionnaient plus dans Rust 1.23, car nous avons cessé d'émettre des tables de déroulement avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span>. Dans Rust 1.45, une solution de contournement sous la forme de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cforce-unwind-tables=yes</span> a été stabilisée.<br />
<br />
Dans Rust 1.92, les tables de déroulement seront émises par défaut même lorsque <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cpanic=abort</span> est spécifié, ce qui permettra aux backtraces de fonctionner correctement. Si les tables de déroulement ne sont pas souhaitées, les utilisateurs doivent utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Cforce-unwind-tables=no</span> pour désactiver explicitement leur émission.<br />
<br />
<b>Valider l'entrée vers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>macro_export<span class="br0">&#93;</span></span></span></b><br />
<br />
Au cours des dernières versions, de nombreux changements ont été apportés à la manière dont les attributs intégrés sont traités dans le compilateur. Cela devrait considérablement améliorer les messages d'erreur et les avertissements fournis par Rust pour les attributs intégrés et, surtout, rendre ces diagnostics plus cohérents parmi les plus de 100 attributs intégrés.<br />
<br />
Pour donner un petit exemple, dans cette version en particulier, Rust est devenu plus strict dans la vérification des arguments autorisés pour <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">macro_export</span> en mettant à niveau cette vérification vers un « lint par défaut refusé » qui sera signalé dans les dépendances.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://blog.rust-lang.org/2025/12/11/Rust-1.92.0/mais" target="_blank">Annonce Rust 1.92</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette mise à jour est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/377331/La-version-1-91-du-langage-de-programmation-Rust-est-disponible-ajoutant-la-prise-en-charge-de-niveau-1-pour-la-plateforme-Windows-ARM64-les-avertissements-de-pointeurs-bruts-et-plus-encore/" target="_blank">La version 1.91 du langage de programmation Rust est disponible, ajoutant la prise en charge de niveau 1 pour la plateforme Windows ARM64, les avertissements de pointeurs bruts, et plus encore</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/377563/La-fondation-Rust-annonce-la-creation-d-un-fonds-pour-les-mainteneurs-afin-d-assurer-la-continuite-et-de-soutenir-les-roles-a-long-terme-des-developpeurs-qui-rendent-possible-le-langage-de-programmation-Rust/" target="_blank">La fondation Rust annonce la création d'un fonds pour les mainteneurs afin d'assurer la continuité et de soutenir les rôles à long terme des développeurs qui rendent possible le langage de programmation Rust</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/378426/C-est-desormais-officiel-Rust-dans-le-noyau-Linux-sort-du-cadre-experimental-le-Rust-vient-de-faire-l-objet-d-integration-comme-partie-essentielle-du-kernel-aux-cotes-du-toujours-present-langage-C/" target="_blank">C'est désormais officiel : Rust dans le noyau Linux sort du cadre expérimental. Le Rust vient de faire l'objet d'intégration comme partie essentielle du kernel aux côtés du toujours présent langage C</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/p672552d1765786136/general-developpement/programmation-systeme/rust/rust-1-92-active-tables-deroulement-defaut-affine-verifications-lints-d-attributs/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180956/general-developpement/programmation-systeme/rust/rust-1-92-active-tables-deroulement-defaut-affine-verifications-lints-d-attributs/</guid>
		</item>
		<item>
			<title><![CDATA[[Cargo] [Thread][shared database PooledConn] value used here after move]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180700&amp;goto=newpost</link>
			<pubDate>Sat, 29 Nov 2025 16:25:22 GMT</pubDate>
			<description>Greetings !! 
 
Je suis en...</description>
			<content:encoded><![CDATA[<div>Greetings !!<br />
<br />
Je suis en train de m'arracher les dreadlocks...<br />
<br />
Voilà l'extrait du thread principal...<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 />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">let</span> connection = establish_connection<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">let</span> <span style="color: #0080ff;">mut</span> connection_handle = connection.unwrap<span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">let</span> arc_connection = Arc::new<span class="br0">&#40;</span>Mutex::new<span class="br0">&#40;</span>&amp;<span style="color: #0080ff;">mut</span> connection_handle<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">let</span> threadscope = thread::scope
<span class="br0">&#40;</span>
	|thescope|
	<span class="br0">&#123;</span>
		<span style="color: #339933;">'connexion</span>: <span style="color: #0000ff;">loop</span>
		<span class="br0">&#123;</span>
			<span style="color: #0000ff;">for</span> stream <span style="color: #0000ff;">in</span> Listener.incoming<span class="br0">&#40;</span><span class="br0">&#41;</span>
			<span class="br0">&#123;</span>
				<span style="color: #0000ff;">match</span> stream
				<span class="br0">&#123;</span>
					<span style="color: #FF0000;">Ok</span><span class="br0">&#40;</span>saloperie<span class="br0">&#41;</span> =&gt;
						<span class="br0">&#123;</span>
							<span style="color: #0000ff;">let</span> arc_stream = Arc::new<span class="br0">&#40;</span>Mutex::new<span class="br0">&#40;</span>saloperie<span class="br0">&#41;</span><span class="br0">&#41;</span>;
							<span style="color: #0080ff;">println!</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;[{:?}] Connection granted !!&quot;</span>, Local::now<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
							<span style="color: #0000ff;">let</span> rc = thescope.spawn<span class="br0">&#40;</span>|| client_handler<span class="br0">&#40;</span>arc_stream,&amp;arc_connection<span class="br0">&#41;</span><span class="br0">&#41;</span>;
							<span style="color: #0000ff;">let</span> value = rc.join<span class="br0">&#40;</span><span class="br0">&#41;</span>.unwrap<span class="br0">&#40;</span><span class="br0">&#41;</span>;
							<span style="color: #0000ff;">if</span> value.is_negative<span class="br0">&#40;</span><span class="br0">&#41;</span>
							<span class="br0">&#123;</span>
								<span style="color: #0000ff;">break</span> <span style="color: #339933;">'connexion</span>;
							<span class="br0">&#125;</span>
						<span class="br0">&#125;</span>
					<span style="color: #FF0000;">Err</span><span class="br0">&#40;</span>erreur<span class="br0">&#41;</span> =&gt;
						<span class="br0">&#123;</span>
							<span style="color: #0080ff;">eprintln!</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;Error: <span style="color: #800000;">{}</span>&quot;</span>, erreur<span class="br0">&#41;</span>;
						<span class="br0">&#125;</span>
				<span class="br0">&#125;</span> <span style="color: #808080;">// end match</span>
				<span class="br0">&#125;</span> <span style="color: #808080;">// end for</span>
			sleep<span class="br0">&#40;</span>Duration::from_millis<span class="br0">&#40;</span><span style="color: #cc66cc;">80</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
		<span class="br0">&#125;</span> <span style="color: #808080;">// end loop</span>
	<span class="br0">&#125;</span>
<span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div>J'ai déjà bien galéré pour que le compilateur ne bronche plus...<br />
Manifestement je ne maîtrise pas du tout cette boîte noire appelée &quot;borrowing&quot; et ça commence tout doucement à me ca**er les c...<br />
Je pourrais taper le handler en static mutable mais je me suis dit que je pourrais faire cela sans devoir me taper des unsafe à tout bout de champs.<br />
<br />
Du coup voilà le client_handler<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">&nbsp;
&nbsp;
<span style="color: #0000ff;">pub</span> <span style="color: #0000ff;">fn</span> client_handler<span class="br0">&#40;</span>arc_stream :Arc&lt;Mutex&lt;TcpStream&gt;&gt;, arc_connect :&amp;Arc&lt;Mutex&lt;&amp;<span style="color: #0080ff;">mut</span> PooledConn&gt;&gt; <span class="br0">&#41;</span> -&gt; i32
<span class="br0">&#123;</span>
  ...
  <span style="color: #0000ff;">let</span> res_connection = arc_connect.lock<span class="br0">&#40;</span><span class="br0">&#41;</span>;
  ...
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>Dans ce client handler je fais une première fois<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="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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">let</span> result = player_fromDB.getIDbyName<span class="br0">&#40;</span>&amp;<span style="color: #0080ff;">mut</span> res_connection.unwrap<span class="br0">&#40;</span><span class="br0">&#41;</span>, onePlayer.getString<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">if</span> result &gt; <span style="color: #cc66cc;">0</span>
<span class="br0">&#123;</span>
  <span style="color: #0080ff;">println!</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;[DB] <span style="color: #800000;">{}</span> found !!&quot;</span>,onePlayer.getString<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
  <span style="color: #808080;">// In this case some computing must be done... later.</span>
<span class="br0">&#125;</span>
<span style="color: #0000ff;">else</span>
<span class="br0">&#123;</span>
  <span style="color: #0080ff;">println!</span><span class="br0">&#40;</span><span style="color: #FF0000;">&quot;[DB] <span style="color: #800000;">{}</span> not found !!&quot;</span>,onePlayer.getString<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
 <span style="color: #808080;">// In this case the player must be inserted to the DB... later.</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>...avec une larme de joie sur la joue ça marche... je me dis &quot;c'est bon je continue&quot;...<br />
<br />
...puis je fais un peu plus loin...<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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">if</span> player_fromDB.getID<span class="br0">&#40;</span><span class="br0">&#41;</span> &gt; <span style="color: #cc66cc;">0</span>
<span class="br0">&#123;</span>
  <span style="color: #808080;">// update</span>
  player_fromDB.setScore<span class="br0">&#40;</span>onePlayer.getScoreP<span class="br0">&#40;</span><span class="br0">&#41;</span>,onePlayer.getScoreO<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
  GEN_updateDB<span class="br0">&#40;</span>player_fromDB,&amp;<span style="color: #0080ff;">mut</span> res_connection.unwrap<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div>...et là mes croyances se sont effondrées :{<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			|     let res_connection = arc_connect.lock();<br />
     |         -------------- move occurs because `res_connection` has type `Result&lt;MutexGuard&lt;'_, &amp;mut PooledConn&gt;, PoisonError&lt;...&gt;&gt;`, which does not implement the `Copy` trait<br />
...<br />
 229 |                 let result = player_fromDB.getIDbyName(&amp;mut res_connection.unwrap(), onePlayer.getString());<br />
     |                                                             -------------- -------- `res_connection` moved due to this method call<br />
     |                                                             |<br />
     |                                                             help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents<br />
...<br />
 339 |             GEN_updateDB(player_fromDB,&amp;mut res_connection.unwrap());<br />
     |                                             ^^^^^^^^^^^^^^ value used here after move
			
		<hr />
	</div>
</div>Pas moyen de cloner, pas moyen de rien...<br />
Je fais comment maintenant ???<br />
<br />
C'est tellement de la merde Rust qu'il &quot;suffisait&quot; de taper le unwrap dans une bête variable...<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">let</span> couillonade = &amp;<span style="color: #0080ff;">mut</span> res_connection.unwrap<span class="br0">&#40;</span><span class="br0">&#41;</span>;</code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>hurukan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180700/general-developpement/programmation-systeme/rust/thread-shared-database-pooledconn-value-used-here-after-move/</guid>
		</item>
		<item>
			<title><![CDATA[Les développeurs principaux de CPython proposent d'intégrer Rust]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180542&amp;goto=newpost</link>
			<pubDate>Wed, 19 Nov 2025 15:40:53 GMT</pubDate>
			<description>*Les développeurs principaux...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Les développeurs principaux de CPython proposent d'intégrer Rust afin d'améliorer la sécurité mémoire et de réduire les vulnérabilités dans le code source C de Python, ce qui suscite des débats</font></b> <br />
<br />
<b>Les développeurs principaux de CPython proposent d'intégrer Rust afin d'améliorer la sécurité de la mémoire et de réduire les vulnérabilités dans le code source basé sur C de Python. Commençant par des extensions optionnelles, Rust pourrait devenir obligatoire, ce qui susciterait des débats sur la complexité par rapport aux avantages. Cette initiative s'inscrit dans la tendance de l'industrie vers une programmation sécurisée et hautement performante.</b><br />
<br />
Rust est un langage de programmation polyvalent. Il est réputé pour l'importance qu'il accorde aux performances, à la sécurité des types, à la concurrence et à la sécurité mémoire. Rust prend en charge plusieurs paradigmes de programmation. Il a été influencé par des idées issues de la programmation fonctionnelle, notamment l'immuabilité, les fonctions d'ordre supérieur, les types de données algébriques et la correspondance de motifs. Il prend également en charge la programmation orientée objet via des structures, des énumérations, des traits et des méthodes.<br />
<br />
Rust est connu pour imposer la sécurité de la mémoire (c'est-à-dire que toutes les références pointent vers une mémoire valide) sans collecteur de mémoire conventionnel ; à la place, les erreurs de sécurité de la mémoire et les conflits d'accès aux données sont évités grâce au « vérificateur d'emprunt », qui suit la durée de vie des objets référencés au moment de la compilation.<br />
<br />
Dans une initiative qui pourrait bouleverser les fondements de l'un des langages de programmation les plus populaires au monde, deux développeurs principaux de CPython, l'implémentation de référence de Python, ont proposé d'intégrer le langage de programmation Rust dans son code source. Cette initiative, détaillée dans une discussion pré-PEP (Python Enhancement Proposal), vise à tirer parti des fonctionnalités de sécurité mémoire de Rust pour remédier aux vulnérabilités de longue date de CPython, qui est principalement écrit en C.<br />
<br />
La proposition, rédigée par les développeurs principaux de CPython Emma Twersky et Eclipse Obscura, suggère de commencer par utiliser Rust pour les modules d'extension optionnels avant d'étendre son utilisation à l'ensemble du code source de CPython. Selon le document publié sur Discussions on Python.org, Rust deviendrait à terme une dépendance obligatoire, marquant un changement significatif dans le paradigme de développement de Python.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p671937d1763571591/general-developpement/programmation-systeme/rust/developpeurs-principaux-cpython-proposent-d-integrer-rust/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 37724
Taille : 16,9 Ko"  style="float: CONFIG" /></div><br />
<b>La tentative audacieuse Rust pour renforcer le cœur de Python</b><br />
<br />
L'attrait de Rust réside dans ses garanties solides contre les bogues liés à la mémoire, un problème persistant dans les projets basés sur C comme CPython. Le pré-PEP souligne que « <i>CPython a historiquement rencontré de nombreux bogues et plantages dus à des accès mémoire invalides</i> », comme indiqué dans la section « Motivation ». En introduisant Rust, les développeurs espèrent atténuer ces risques sans sacrifier les performances.<br />
<br />
Ce n'est pas la première fois que Rust est envisagé pour améliorer des systèmes établis. Des projets tels que le noyau Linux et Chromium ont déjà intégré Rust pour le nouveau code, invoquant des avantages similaires. Une discussion en 2023 sur Discussions on Python.org a exploré la faisabilité de construire CPython avec Rust, en mettant l'accent sur la réduction des CVE (Common Vulnerabilities and Exposures).<br />
<br />
L'approche progressive décrite dans la proposition commence par autoriser Rust pour les modules d'extension, qui pourraient être compilés de manière facultative. Cela reflète les stratégies d'autres écosystèmes, tels que l'adoption progressive de Rust par Git pour les composants critiques en termes de performances. Au fil du temps, Rust s'imposerait dans les domaines clés, devenant indispensable pour la construction de CPython.<br />
<br />
<b>Réactions et débats au sein de la communauté</b><br />
<br />
Les observateurs du secteur y voient une réponse à la demande croissante de logiciels sécurisés. Une analyse décrit Rust comme le « nouveau moteur de performance » de Python, soulignant une augmentation de 22 % de l'utilisation de Rust pour les extensions Python au cours de l'année dernière.<br />
<br />
La proposition a suscité des discussions animées au sein des communautés technologiques. Des développeurs ont noté que « <i>CPython pourrait introduire Rust pour le développement de base</i> », établissant un parallèle avec l'évolution de Git. Un autre développeur a mis l'accent sur la sécurité de la mémoire, citant l'importance accordée par le pré-PEP à la réduction des plantages.<br />
<br />
Les détracteurs, cependant, s'inquiètent de la complexité supplémentaire. Un développeur a averti qu'une dépendance à Rust « <i>éliminerait effectivement le Python moderne sur plusieurs plateformes</i> », ce qui pourrait aliéner les utilisateurs de systèmes ne disposant pas d'un support Rust robuste. Une analyse a qualifié cette initiative d'« intéressante », prédisant qu'elle pourrait faire évoluer CPython de manière significative.<br />
<br />
<b>Défis techniques à relever et tendances générales du secteur</b><br />
<br />
L'intégration de Rust dans CPython n'est pas simple. Le pré-PEP reconnaît la nécessité de modifier le système de compilation et d'assurer la compatibilité avec le code C existant. Des outils tels que PyO3, qui facilitent l'interopérabilité entre Rust et Python, pourraient jouer un rôle clé. Des tentatives historiques, telles que RustPython, un interpréteur Python open source entièrement écrit en Rust, constituent des précédents. Selon sa page GitHub, RustPython prend en charge CPython 3.11 et les versions supérieures, mais ne remplace pas encore CPython. Les observateurs ont salué le potentiel de RustPython, mais soulignent les obstacles à l'intégration avec les bibliothèques externes.<br />
<br />
Cette proposition s'inscrit dans une tendance plus large à l'adoption de Rust pour les bases de code héritées. Par exemple, un projet financé par la DARPA appelé CRAM migre C++ vers Rust. Dans l'écosystème Python, des outils tels que Ruff, un linter rapide écrit en Rust, ont démontré des gains de performance. Son créateur, Charlie Marsh, affirme qu'il analyse l'ensemble de la base de code CPython en moins de 500 ms.<br />
<br />
Des enquêtes indiquent la maturation de Python, l'intégration de Rust gagnant du terrain. Un rapport indique que la science des données domine l'utilisation de Python avec 51 %, tandis que Rust émerge comme un « partenaire de performance » pour les nouveaux venus, qui représentent la moitié des développeurs.<br />
<br />
Pour les développeurs Python, cela pourrait signifier l'apprentissage de Rust pour les contributions essentielles, ce qui pourrait rendre la courbe d'apprentissage plus raide. Cependant, les partisans affirment que les avantages l'emportent sur les coûts. « <i>Rust s'est imposé comme un langage de programmation système populaire et sûr pour la mémoire</i> », indique le pré-PEP, en référence à son utilisation dans de nombreux projets.<br />
<br />
Les performances sont un autre atout. Un rapport en 2022 comparait le temps de démarrage de 10 ms de CPython à la vitesse de Rust dans des contextes sans serveur. De même, Mara Bos a annoncé des outils tels que ct_python pour générer du code Rust à partir de Python au moment de la compilation, démontrant ainsi les possibilités d'intégration transparente.<br />
<br />
<b>Perspectives d'avenir</b><br />
<br />
Alors que la proposition se rapproche du statut officiel de PEP, le Python Steering Council va se prononcer. Si elle est approuvée, elle pourrait créer un précédent pour d'autres langages, à l'instar de l'intégration de Rust dans le noyau Linux. En fin de compte, cette intégration reflète l'évolution de Python, qui est passé d'un langage de script à un outil robuste pour l'IA, la science des données et la programmation de systèmes. Avec le soutien de Rust, CPython pourrait gagner en fiabilité, attirer davantage d'entreprises et répondre aux besoins de sécurité dans un paysage numérique de plus en plus exposé aux menaces.<br />
<br />
Cette proposition rappelle <a href="https://securite.developpez.com/actu/356156/Rust-Python-Apache-Foundations-et-d-autres-annoncent-une-grande-collaboration-sur-la-cybersecurite-afin-de-creer-des-specifications-communes-pour-le-developpement-de-logiciels-securises/" target="_blank">une initiative de 2024</a>. Apache Software Foundation, Blender Foundation, OpenSSL Software Foundation, PHP Foundation, Python Software Foundation, Rust Foundation et Eclipse Foundation avaient alors annoncé conjointement leur intention de collaborer à l'établissement de spécifications communes pour le développement de logiciels sécurisés sur la base des meilleures pratiques open source existantes.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://discuss.python.org/t/how-hard-is-it-to-get-cpython-build-with-rust/22759" target="_blank">Discussion sur la faisabilité de construire CPython avec Rust</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette proposition est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://python.developpez.com/actu/333522/La-prochaine-version-de-l-interpreteur-Python-standard-CPython-va-s-accompagner-d-ameliorations-significatives-des-performances-ont-annonce-les-developpeurs-durant-la-PyCon/" target="_blank">La prochaine version de l'interpréteur Python standard, CPython, va s'accompagner d'améliorations significatives des performances ont annoncé les développeurs durant la PyCon</a><br />
<br />
:fleche: <a href="https://www.developpez.com/actu/244667/RustPython-un-interpreteur-Python-ecrit-en-Rust-et-compatible-avec-WebAssembly-est-disponible-pourrait-il-rivaliser-avec-CPython/" target="_blank">RustPython, un interpréteur Python écrit en Rust et compatible avec WebAssembly, est disponible : Pourrait-il rivaliser avec CPython ?</a><br />
<br />
:fleche: <a href="https://linux.developpez.com/actu/368891/Le-melange-de-Rust-et-de-C-dans-Linux-est-assimile-a-un-cancer-par-un-responsable-du-noyau-je-ne-veux-pas-qu-il-s-approche-d-une-enorme-base-de-code-C-que-je-dois-maintenir-dit-il-a-propos-de-Rust/" target="_blank">Le mélange de Rust et de C dans Linux est assimilé à un « cancer » par un responsable du noyau, « je ne veux pas qu'il s'approche d'une énorme base de code C que je dois maintenir », dit-il à propos de Rust</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/p671937d1763571591/general-developpement/programmation-systeme/rust/developpeurs-principaux-cpython-proposent-d-integrer-rust/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Jade Emy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180542/general-developpement/programmation-systeme/rust/developpeurs-principaux-cpython-proposent-d-integrer-rust/</guid>
		</item>
		<item>
			<title><![CDATA[[Cargo] [cargo doc] Appliquer un commentaire pour un ensemble d'instructions]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180411&amp;goto=newpost</link>
			<pubDate>Tue, 11 Nov 2025 18:44:17 GMT</pubDate>
			<description>Bonjour, je voulais savoir si...</description>
			<content:encoded><![CDATA[<div>Bonjour, je voulais savoir si il était possible, pour obtenir une documentation cohérente, de faire en sorte que<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;">// commun &agrave; Players et Matches</span>
<span style="color: #0000ff;">fn</span> getColor<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u8;
<span style="color: #0000ff;">fn</span> getScoreP<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;
<span style="color: #0000ff;">fn</span> getScoreO<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;</pre></td></tr></table></code><hr />
</div>...en niveau du sens, soit similaire à...<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; font-weight: bold;">/// commun &agrave; Players et Matches</span>
<span style="color: #0000ff;">fn</span> getColor<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u8;
<span style="color: #0000ff;">fn</span> getScoreP<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;
<span style="color: #0000ff;">fn</span> getScoreO<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;</pre></td></tr></table></code><hr />
</div>Le soucis c'est que si je consulte la documentation résultante, le commentaire ne s'applique que pour la première ligne du bloc d'instructions... ce qui est bien triste...<br />
En effet, quand je parle de &quot;sens&quot; je voudrais que &quot;commun à Players et Matches&quot; s'applique aux trois lignes d'instructions suivantes, et non pas la première et éviter de faire ceci:<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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080; font-weight: bold;">/// commun &agrave; Players et Matches</span>
<span style="color: #0000ff;">fn</span> getColor<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u8;
<span style="color: #808080; font-weight: bold;">/// commun &agrave; Players et Matches</span>
<span style="color: #0000ff;">fn</span> getScoreP<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;
<span style="color: #808080; font-weight: bold;">/// commun &agrave; Players et Matches</span>
<span style="color: #0000ff;">fn</span> getScoreO<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span><span class="br0">&#41;</span> -&gt; u128;</pre></td></tr></table></code><hr />
</div>...ce qui est vraiment affreux ^^</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>hurukan</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180411/general-developpement/programmation-systeme/rust/cargo-doc-appliquer-commentaire-ensemble-d-instructions/</guid>
		</item>
		<item>
			<title><![CDATA[La fondation Rust annonce la création d'un fonds pour les mainteneurs]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180391&amp;goto=newpost</link>
			<pubDate>Tue, 11 Nov 2025 04:08:26 GMT</pubDate>
			<description>*La fondation Rust annonce la...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La fondation Rust annonce la création d'un fonds pour les mainteneurs afin d'assurer la continuité et de soutenir les rôles à long terme des développeurs qui rendent possible le langage de programmation Rust</font></b><br />
<br />
<b>La Fondation Rust est ravie d'annoncer la création du Fonds des mainteneurs de la Fondation Rust : une nouvelle initiative visant à fournir un soutien cohérent, transparent et à long terme aux développeurs qui rendent possible le langage de programmation Rust. La Fondation Rust a la responsabilité de « mettre en lumière l'impact du soutien apporté au travail souvent invisible » qui permet au projet Rust de fonctionner. Elle a donc annoncé une nouvelle initiative visant à « fournir un soutien cohérent, transparent et à long terme aux développeurs qui rendent possible le langage de programmation Rust ».</b><br />
<br />
Rust est un langage de programmation compilé multi-paradigme qui met l'accent sur la performance, la sûreté des types et la concurrence. Il assure la sécurité mémoire, ce qui signifie que toutes les références pointent vers une mémoire valide, sans nécessiter l'utilisation de techniques de gestion de la mémoire automatisée telles que le ramasse-miettes. Afin d'assurer la sécurité de la mémoire et d'empêcher une situation de compétition aux données, son « vérificateur d'emprunts » suit la durée de vie des objets de toutes les références dans un programme à la compilation.<br />
<br />
Rust a été remarqué pour son adoption rapide. En 2024, <a href="https://rust.developpez.com/actu/358903/Enquete-Developer-Nation-Rust-est-le-langage-de-programmation-qui-connait-la-croissance-la-plus-rapide-sa-communaute-de-developpeurs-ayant-double-de-taille-au-cours-des-deux-dernieres-annees/" target="_blank">la 26ème édition de l'enquête Developer Nation de SlashData</a> a montré que la communauté Rust a doublé son nombre d'utilisateurs au cours des deux dernières années - passant de deux millions au premier trimestre 2022 à quatre millions au premier trimestre 2024 - et de 33 % rien qu'au cours des 12 derniers mois. L'enquête a noté : « <i>Le langage Rust a développé une communauté passionnée qui le défend en tant que langage à mémoire sûre pouvant offrir d'excellentes performances, mais les préoccupations en matière de cybersécurité pourraient conduire à une augmentation encore plus importante. Au cours des six derniers mois, les États-Unis et leurs partenaires internationaux ont plaidé en faveur de l'adoption de langages à mémoire sécurisée. Bien que Rust ne soit pas le seul à posséder cette capacité, ses avantages en termes de performances et de sécurité de la mémoire sont susceptibles d'entraîner une nouvelle croissance de cette communauté de développeurs</i> ».<br />
<br />
Cependant, <a href="https://programmation.developpez.com/actu/350852/L-absence-de-remuneration-dans-le-domaine-des-logiciels-open-source-est-insoutenable-d-apres-Thomas-Stringer-developpeur-logiciel/" target="_blank">l'absence de rémunération dans le domaine de l'open source décourage de plus en plus les développeurs</a>. Selon Thomas Stringer, développeur logiciel et programmeur de logiciel open source, cette situation mène à l'épuisement du mainteneur. Pour résoudre ce problème, il propose notamment que les entreprises utilisatrices de logiciels open source devraient financer ces projets. En outre, lorsqu'une entreprise ne consacre pas suffisamment de temps aux projets, c'est-à-dire donner du temps  ces propres développeurs pour qu'ils contribuent au projet open source, l'entreprise devrait compléter sa contribution par de l'argent distribué aux contributeurs indépendants.<br />
<br />
La Fondation Rust a la responsabilité de « mettre en lumière l'impact du soutien apporté au travail souvent invisible » qui permet au projet Rust de fonctionner. Elle a donc annoncé une nouvelle initiative visant à « fournir un soutien cohérent, transparent et à long terme aux développeurs qui rendent possible le langage de programmation Rust ». Il s'agit du Rust Foundation Maintainers Fund (Fonds des mainteneurs de la Fondation Rust), « une initiative que nous mettrons en place en étroite collaboration avec le Rust Project Leadership Council et les directeurs de projet afin de garantir que les décisions de financement soient prises de manière ouverte et responsable ». <br />
<br />
Voici l'annonce de la Fondation Rust :<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p671652d1762845133/general-developpement/programmation-systeme/rust/fondation-rust-annonce-creation-d-fonds-mainteneurs/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 7286
Taille : 23,3 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Annonce du Fonds des mainteneurs de la Fondation Rust</font></b><br />
<br />
Aujourd'hui, la Fondation Rust est ravie d'annoncer la création du Fonds des mainteneurs de la Fondation Rust : une nouvelle initiative visant à fournir un soutien cohérent, transparent et à long terme aux développeurs qui rendent possible le langage de programmation Rust.<br />
<br />
Cette annonce marque le début du Fonds des Mainteneurs de la Fondation Rust - une initiative que nous façonnerons en étroite collaboration avec le Conseil de Direction du Projet Rust et les Directeurs de Projet afin de s'assurer que les décisions de financement sont prises ouvertement et avec responsabilité. Dans les mois à venir, nous allons définir la structure du fonds, obtenir des contributions et travailler avec le projet Rust et la communauté pour lui donner vie. Ce travail s'appuiera sur les leçons tirées des précédentes itérations de nos subventions et bourses pour créer un cadre durable de soutien aux mainteneurs de Rust.<br />
<br />
Nell Shamrell-Harrington (présidente du conseil d'administration de la Fondation Rust) a déclaré à propos de l'annonce du fonds pour les mainteneurs de la Fondation Rust : &quot;<i>Tout projet open source - en particulier un projet aussi largement utilisé que Rust - ne peut pas évoluer, rester sécurisé ou fonctionner au niveau le plus élémentaire sans soutenir ses mainteneurs. Les mainteneurs effectuent le travail vital de révision des demandes d'extraction (qui peut être très laborieux), des mises à jour, des remaniements, et bien plus encore. Ce fonds permettra à ces mainteneurs de bénéficier du soutien dont ils ont besoin pour poursuivre ce travail vital.</i>&quot;<br />
<br />
<b>La santé et l'avenir de Rust</b><br />
<br />
La durabilité de l'open source est depuis longtemps un thème central dans notre travail et dans de nombreuses conversations récentes au sein de la communauté Rust, qu'il s'agisse de la manière dont nous soutenons collectivement l'infrastructure critique de l'open source ou de la manière dont nous permettons aux personnes qui en sont à l'origine de prospérer.<br />
<br />
Les défis liés à la durabilité de l'open source n'ont fait que s'intensifier en 2025, laissant de nombreux mainteneurs de Rust dans l'incertitude quant à la manière de poursuivre leur travail essentiel. La Fondation Rust est heureuse de développer ce nouveau fonds pour répondre directement aux besoins critiques des personnes qui construisent Rust en réponse à ce défi. Au cours des derniers mois, grâce aux discussions du conseil d'administration et aux contributions du conseil de direction, cette initiative a pris forme pour aider les mainteneurs à poursuivre leur travail vital de développement et de révision, et à planifier l'avenir.<br />
<br />
Même si la technologie évolue rapidement et que de nouvelles opportunités apparaissent, Rust reste un outil crucial pour construire des logiciels performants, sûrs et tournés vers l'avenir. Investir dans les personnes qui rendent cela possible est essentiel pour répondre à la demande croissante de ce que Rust permet. Nous considérons qu'il est de notre responsabilité de veiller à ce que les mainteneurs de Rust puissent travailler durablement et, ce faisant, de mettre en lumière l'impact du soutien apporté au travail souvent invisible qui permet au projet de fonctionner.<br />
<br />
Il n'a jamais été aussi urgent de soutenir les personnes qui sont derrière Rust. Le Fonds des mainteneurs de la Fondation Rust est notre engagement à agir sur cette urgence de manière transparente avec la collaboration continue du projet Rust.<br />
<br />
Carol Nichols au nom des directeurs du projet Rust a déclaré : &quot;<i>Nous sommes ravis que la Fondation et le Projet se soient développés pour pouvoir offrir un soutien durable aux mainteneurs de Rust directement. Plus les entreprises qui utilisent Rust peuvent contribuer au fonds des mainteneurs de la Fondation Rust, plus nous pouvons continuer à faire évoluer le langage et les outils pour le bénéfice de tous. Le projet est impatient de collaborer avec la Fondation Rust sur la meilleure façon d'aligner ce fonds sur les besoins des mainteneurs du projet.</i>&quot; <br />
<br />
<b>Approche</b><br />
<br />
En tant que gestionnaire officiel du langage de programmation Rust, la Fondation Rust a pour mission d'assurer la santé, la stabilité et la croissance de Rust - et de fournir l'infrastructure financière et administrative nécessaire à son épanouissement.<br />
<br />
Pour remplir cette mission, le Fonds des Mainteneurs de la Fondation Rust investira directement dans les personnes et les projets qui maintiennent Rust fort. Grâce à ce fonds, nous allons<br />
<br />
- Fournir un soutien fiable aux mainteneurs et contributeurs de Rust.<br />
- Collaborer avec le conseil de direction du projet Rust et les équipes de projet pour identifier les priorités à fort impact et orienter le soutien vers les mainteneurs qui y travaillent.<br />
- Fournir une visibilité sur la façon dont les fonds sont utilisés pour faire progresser Rust.<br />
<br />
Cette initiative reflète notre engagement à ce que Rust soit façonné par son personnel, guidé par une collaboration ouverte et soutenu par un réseau mondial de contributeurs et de partenaires. Le Fonds des mainteneurs de la Fondation Rust fonctionnera dans le cadre de la gouvernance partagée entre le Projet Rust et la Fondation Rust, assurant l'alignement et la supervision à tous les niveaux.<br />
<br />
Nous reconnaissons que d'autres organisations travaillent également au financement des mainteneurs, et nous considérons cela comme un reflet positif de la croissance et de la vitalité de Rust. Soutenir un travail open-source n'est pas un défi unique. Trouver les meilleurs moyens de financer la maintenance est complexe et en constante évolution - cela nécessite une collaboration entre de nombreux groupes qui se soucient de Rust et des lignes de communication ouvertes, que nous avons l'intention de mettre en place.<br />
<br />
L'approche de la Fondation Rust à l'égard de cette initiative sera guidée par notre structure : en tant qu'organisation à but non lucratif (501( C)(6)), nous opérons dans le cadre d'un mandat de transparence et de responsabilité envers le Projet Rust, la communauté linguistique et nos membres. Cela signifie que nous devons développer ce fonds en coordination avec les priorités du projet Rust, en assurant une gouvernance partagée et une viabilité à long terme.<br />
<br />
<b>Prochaines étapes</b><br />
<br />
La Fondation Rust continuera à travailler pour s'assurer que cette initiative se développe de manière transparente, responsable et efficace. Alors que nous sommes toujours en discussion sur la meilleure façon d'aligner les décisions de financement avec les priorités du Projet Rust, la Fondation souhaite s'appuyer sur le Conseil de Direction pour évaluer la santé globale du Projet et faire des recommandations sur les mainteneurs à financer en fonction des besoins identifiés.<br />
<br />
Notre objectif est simple : aider les développeurs de Rust à poursuivre leur travail essentiel avec le soutien qu'ils méritent. Cela signifie créer les conditions pour des rôles de mainteneurs à long terme et assurer la continuité pour ceux dont les efforts maintiennent la stabilité et l'évolution du langage. Grâce au Fonds des mainteneurs de la Fondation Rust, nous visons à répondre directement à ces besoins.<br />
<br />
<b><font size="3">Conclusion</font></b><br />
<br />
Cette annonce vise donc à résoudre <a href="https://open-source.developpez.com/actu/258078/L-open-source-souffre-t-il-d-un-probleme-du-travail-gratuit-Oui-selon-Havoc-Pennington/" target="_blank">le problème du &quot;travail gratuit&quot; que fait face les développeurs open source</a>. En 2019, Havoc Pennington, un ingénieur en logiciels libres (ancien ingénieur chez Red Hat), a soulevé ce problème. Il estime qu’il faut éviter de croire que l’open source est une oeuvre de charité. Lorsqu’on considère l’open source comme tel, dit-il, des problèmes sociaux à la manière de ceux qu’on rencontre dans les stages professionnels (profiter de la main-d’oeuvre gratuitement, un élargissement du fossé de l’inégalité sociale, etc.) naissent très rapidement.<br />
<br />
Ce que lui et beaucoup d'autres espèrent, c’est qu’il y ait à l'avenir beaucoup de discussions autour du sujet pour permettre à la communauté open source d’avoir un bon encadrement en qui concerne les valeurs économiques des projets open source. Cela permettra, selon lui, d’améliorer la productivité des développeurs, sauver beaucoup de projets et lever un grand nombre d'ambiguïtés qui existent autour de “l’open source”.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://rustfoundation.org/media/announcing-the-rust-foundation-maintainers-fund/" target="_blank">Annonce de la Fondation Rust</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/365520/La-Fondation-Rust-presente-son-plan-pour-accroitre-le-nombre-de-developpeurs-Rust-bien-formes-garantissant-un-ecosysteme-Rust-sain-qui-depend-d-un-nombre-croissant-developpeurs-bien-formes/" target="_blank">La Fondation Rust présente son plan pour accroître le nombre de développeurs Rust bien formés, garantissant un écosystème Rust sain qui dépend d'un nombre croissant développeurs bien formés</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/364562/La-Fondation-Rust-partage-le-projet-d-une-nouvelle-politique-plus-simple-pour-les-marques-deposees-apres-avoir-presente-ses-excuses-pour-les-bourdes-en-matiere-de-marque-qui-ont-conduit-a-la-creation-d-un-fork/" target="_blank">La Fondation Rust partage le projet d'une nouvelle politique plus simple pour les marques déposées, après avoir présenté ses excuses pour les bourdes en matière de marque qui ont conduit à la création d'un fork</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/363810/Ejecte-du-top-3-le-langage-C-recule-dans-l-indice-TIOBE-Java-et-Rust-gagnent-en-popularite-car-les-developpeurs-recherchent-des-langages-securises-et-faciles-a-apprendre/" target="_blank">Éjecté du top 3, le langage C recule dans l'indice TIOBE, Java et Rust gagnent en popularité car les développeurs recherchent des langages sécurisés et faciles à apprendre</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/p671652d1762845133/general-developpement/programmation-systeme/rust/fondation-rust-annonce-creation-d-fonds-mainteneurs/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180391/general-developpement/programmation-systeme/rust/fondation-rust-annonce-creation-d-fonds-mainteneurs/</guid>
		</item>
		<item>
			<title>La version 1.91 du langage de programmation Rust est disponible</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180228&amp;goto=newpost</link>
			<pubDate>Sat, 01 Nov 2025 05:55:29 GMT</pubDate>
			<description>*La version 1.91 du langage...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 1.91 du langage de programmation Rust est disponible, ajoutant la prise en charge de niveau 1 pour la plateforme Windows ARM64, les avertissements de pointeurs bruts, et plus encore</font></b><br />
<br />
<b>La version 1.91.0 du langage Rust est désormais disponible. Cette mise à jour inclut notamment la promotion de la cible aarch64-pc-windows-msvc au niveau de support Tier 1 (le plus élevé en matière de maintenance et de test), une nouvelle règle lint permettant d'alerter les développeurs lorsque des pointeurs bruts vers des variables locales sont renvoyés par des fonctions, ainsi que de nombreuses autres améliorations.</b><br />
<br />
Rust est un langage de programmation polyvalent réputé pour l'importance qu'il accorde aux performances, à la sécurité des types, à la concurrence et à la sécurité de la mémoire. Il prend en charge plusieurs paradigmes de programmation et a été influencé par des concepts issus de la programmation fonctionnelle, notamment l'immuabilité, les fonctions d'ordre supérieur, les types de données algébriques et la correspondance de motifs. Rust prend également en charge la programmation orientée objet via des structures, des énumérations, des traits et des méthodes. Le langage est réputé pour garantir la sécurité de la mémoire sans ramasse-miettes conventionnel. À la place, les erreurs de sécurité de la mémoire et les conflits d'accès aux données sont évités grâce au « vérificateur d'emprunts », qui suit la durée de vie des objets référencés au moment de la compilation.<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/Dz__Xx-zpyE?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
Rust 1.91 poursuit l'évolution du langage en mettant l'accent sur la facilité d'utilisation et la sécurité. Cette mise à jour fait passer la cible aarch64-pc-windows-msvc au niveau de support Tier 1, étendant ainsi le niveau le plus élevé de maintenance et de test de Rust aux développeurs utilisant des systèmes ARM 64 bits sous Windows.<br />
<br />
Outre les améliorations apportées à la plateforme, Rust 1.91 introduit un nouveau lint d'avertissement par défaut qui alerte les développeurs lorsque des pointeurs bruts vers des variables locales sont renvoyés par des fonctions. Alors que le vérificateur d'emprunt de Rust empêche déjà le renvoi de références suspendues, ce lint traite les scénarios impliquant des pointeurs bruts, que le vérificateur ne suit pas. <br />
<br />
<b><font size="3">aarch64-pc-windows-msvc est désormais une plateforme de niveau 1</font></b><br />
<br />
Le compilateur Rust prend en charge une grande variété de cibles. Afin d'indiquer clairement le niveau de support de chaque cible, l'équipe Rust utilise un système de niveaux :<br />
<br />
<ul><li style=""> Les cibles de niveau 3 sont techniquement prises en charge par le compilateur, mais aucune vérification n'est effectuée pour s'assurer que leur code se compile ou passe les tests, et aucun binaire précompilé n'est fourni dans le cadre des versions.</li><li style=""> Les cibles de niveau 2 sont garanties de fonctionner, et des binaires précompilés sont fournis. Toutefois, la suite de tests n'est pas exécutée sur ces plateformes : les binaires produits peuvent ne pas fonctionner ou contenir des bogues.</li><li style=""> Les cibles de niveau 1 offrent la garantie de prise en charge la plus élevée et la suite complète est exécutée sur ces plateformes pour chaque modification fusionnée dans le compilateur. Des binaires précompilés sont également disponibles.</li></ul><br />
Rust 1.91.0 fait passer la cible <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">aarch64-pc-windows-msvc</span> au niveau 1 de support, offrant ainsi les meilleures garanties aux utilisateurs de systèmes ARM 64 bits fonctionnant sous Windows.<br />
<br />
<b><font size="3">Ajout d'un lint pour les pointeurs bruts suspendus vers des variables locales</font></b><br />
<br />
Bien que la vérification des emprunts de Rust empêche le renvoi de références suspendues, elle ne suit pas les pointeurs bruts. Avec cette version, l'équipe Rust ajoute un lint par défaut pour les pointeurs bruts vers des variables locales renvoyées par des fonctions. Par exemple, un code tel que celui-ci :<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: #0000ff;">fn</span> f<span class="br0">&#40;</span><span class="br0">&#41;</span> -&gt; *<span style="color: #0000ff;">const</span> u8 <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let</span> x = <span style="color: #cc66cc;">0</span>;
    &amp;x
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
va maintenant produire un lint :<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="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 /></div></td><td valign="top"><pre style="margin: 0">warning: a dangling pointer will be produced because the local variable `x` will be dropped
 --&gt; src/lib.rs:<span style="color: #cc66cc;">3</span>:<span style="color: #cc66cc;">5</span>
  |
<span style="color: #cc66cc;">1</span> | <span style="color: #0000ff;">fn</span> f<span class="br0">&#40;</span><span class="br0">&#41;</span> -&gt; *<span style="color: #0000ff;">const</span> u8 <span class="br0">&#123;</span>
  |           --------- <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">type</span> of the function is `*<span style="color: #0000ff;">const</span> u8`
<span style="color: #cc66cc;">2</span> |     <span style="color: #0000ff;">let</span> x = <span style="color: #cc66cc;">0</span>;
  |         - `x` is part the function and will be dropped at the end of the function
<span style="color: #cc66cc;">3</span> |     &amp;x
  |     ^^
  |
  = note: pointers do not have a lifetime; after returning, the `u8` will be deallocated
    at the end of the function because nothing is referencing it <span style="color: #0000ff;">as</span> far <span style="color: #0000ff;">as</span> the <span style="color: #0000ff;">type</span> system is
    concerned
  = note: `<span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>warn<span class="br0">&#40;</span>dangling_pointers_from_locals<span class="br0">&#41;</span><span class="br0">&#93;</span></span>` on by default</pre></td></tr></table></code><hr />
</div>  <br />
  <br />
A noter que le code ci-dessus n'est pas dangereux, car il n'effectue aucune opération dangereuse. Seule la déréférence du pointeur brut après le retour de la fonction serait dangereuse. Les notes de version indiquent que d'autres améliorations concernant la sécurité des pointeurs bruts et du code non sécurisé sont prévues dans les versions futures.<br />
<br />
Par ailleurs, avec ces mises à jour majeures, Rust 1.91 apporte une gamme d'API nouvellement stabilisées, aidant les développeurs à accéder à davantage de fonctionnalités en toute confiance. Cette version intègre également d'autres améliorations et corrections mineures, contribuant à la stabilité globale du langage et à l'expérience utilisateur. <br />
<br />
Si vous avez déjà installé une version antérieure de Rust via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span>, vous pouvez obtenir la version 1.91.0 avec :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">$ rustup update stable</code><hr />
</div><br />
Si vous ne l'avez pas encore, vous pouvez obtenir <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span> à partir de la page appropriée du site web du langage.<br />
<br />
<b>Source :</b> <a rel="nofollow" href="https://blog.rust-lang.org/2025/10/30/Rust-1.91.0/" target="_blank">Rust 1.91.0</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Trouvez-vous les nouveautés apportées par Rust 1.91.0 utiles et pertinentes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/376122/L-equipe-de-developpement-du-langage-de-programmation-Rust-annonce-Rust-1-90-avec-LLD-comme-editeur-de-liens-par-defaut-sur-x86-64-unknown-linux-gnu/" target="_blank">L'équipe de développement du langage de programmation Rust annonce Rust 1.90 avec LLD comme éditeur de liens par défaut sur x86_64-unknown-linux-gnu</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/374590/Rust-1-89-est-desormais-disponible-et-etend-la-prise-en-charge-des-plateformes-x86-et-x86-x86-64-avec-de-nouvelles-instructions-et-fonctionnalites-de-processeur-dont-des-intrinseques-AVX-512-supplementaires/" target="_blank">Rust 1.89 est désormais disponible et étend la prise en charge des plateformes x86 et x86/x86_64 avec de nouvelles instructions et fonctionnalités de processeur, dont des intrinsèques AVX-512 supplémentaires</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180228/general-developpement/programmation-systeme/rust/version-1-91-langage-programmation-rust-disponible/</guid>
		</item>
		<item>
			<title>Cloudflare est désormais plus rapide et plus sécurisé grâce à Rust</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179636&amp;goto=newpost</link>
			<pubDate>Fri, 03 Oct 2025 09:58:00 GMT</pubDate>
			<description>*Cloudflare est désormais...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Cloudflare est désormais plus rapide et plus sécurisé grâce à Rust : l'équipe de Cloudflare partage une mise à niveau du logiciel qui offre un gain de performance de 25 %</font></b><br />
<br />
Cloudflare s'efforce sans relâche de créer et d'exploiter le réseau le plus rapide au monde. Nous suivons et rendons compte des performances de notre réseau depuis 2021 : vous pouvez consulter la dernière mise à jour <a rel="nofollow" href="https://blog.cloudflare.com/tag/network-performance-update/" target="_blank">ici</a>.<br />
<br />
La construction du réseau le plus rapide nécessite des efforts dans de nombreux domaines. Nous investissons beaucoup de temps dans notre matériel afin de disposer de machines efficaces et rapides. Nous investissons dans des accords de peering afin de pouvoir communiquer avec toutes les parties d'Internet avec un délai minimal. En outre, nous devons également investir dans les logiciels sur lesquels nous exploitons notre réseau, d'autant plus que chaque nouveau produit peut sinon ajouter un délai de traitement supplémentaire.<br />
<br />
Quelle que soit la vitesse à laquelle les messages arrivent, nous créons un goulot d'étranglement si ce logiciel met trop de temps à réfléchir à la manière de traiter et de répondre aux demandes. Aujourd'hui, nous sommes ravis de vous faire part d'une mise à niveau importante de notre logiciel qui réduit le temps médian de réponse de 10 ms et offre un gain de performance de 25 %, selon les tests de performance CDN réalisés par des tiers.<br />
<br />
Nous avons passé l'année dernière à reconstruire les principaux composants de notre système, et nous venons de réduire considérablement la latence du trafic transitant par notre réseau pour des millions de nos clients. Dans le même temps, nous avons renforcé la sécurité de notre système et réduit le temps nécessaire à la création et à la mise sur le marché de nouveaux produits. <br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670724d1759487303/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 54261
Taille : 34,1 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Par où avons-nous commencé ?</font></b><br />
<br />
Chaque requête qui arrive à Cloudflare commence un parcours à travers notre réseau. Elle peut provenir d'un navigateur chargeant une page web, d'une application mobile appelant une API ou d'un trafic automatisé provenant d'un autre service. Ces requêtes aboutissent d'abord à notre couche HTTP et TLS, puis passent dans un système que nous appelons FL, et enfin dans Pingora, qui effectue des recherches dans le cache ou récupère des données à la source si nécessaire.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670725d1759487308/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/2.jpg/" border="0" alt="Nom : 2.jpg
Affichages : 2798
Taille : 33,1 Ko"  style="float: CONFIG" /></div><br />
FL est le cerveau de Cloudflare. Une fois qu'une requête atteint FL, nous exécutons les différentes fonctionnalités de sécurité et de performance de notre réseau. Il applique la configuration et les paramètres uniques de chaque client, de l'application des règles WAF et de la protection DDoS au routage du trafic vers la plateforme de développement et R2. <br />
<br />
Créé il y a plus de 15 ans, FL est au cœur du réseau Cloudflare. Il nous permet d'offrir un large éventail de fonctionnalités, mais au fil du temps, cette flexibilité est devenue un défi. À mesure que nous ajoutions des produits, FL devenait plus difficile à maintenir, plus lent à traiter les requêtes et plus difficile à étendre. Chaque nouvelle fonctionnalité nécessitait des vérifications minutieuses de la logique existante, et chaque ajout introduisait un peu plus de latence, ce qui rendait de plus en plus difficile le maintien des performances que nous souhaitions.<br />
<br />
Vous pouvez voir à quel point FL est essentiel à notre système : nous l'avons souvent qualifié de « cerveau » de Cloudflare. C'est également l'une des parties les plus anciennes de notre système : le premier commit dans la base de code a été effectué par l'un de nos fondateurs, Lee Holloway, bien avant notre lancement initial. Nous célébrons notre 15e anniversaire cette semaine, mais ce système a vu le jour 9 mois avant cela !<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">commit 39c72e5edc1f05ae4c04929eda4e4d125f86c5ce
Author: Lee Holloway &lt;q@t60.<span class="br0">&#40;</span>none<span class="br0">&#41;</span>&gt;
Date:   Wed Jan <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">09</span>:<span style="color: #cc66cc;">57</span>:<span style="color: #cc66cc;">55</span> <span style="color: #cc66cc;">2010</span> <span style="color: #cc66cc;">-0800</span>
&nbsp;
    nginx-fl initial configuration</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Comme l'indique le commit, la première version de FL a été mise en œuvre sur la base du serveur web NGINX, avec une logique produit implémentée en PHP.  Au bout de trois ans, le système était devenu trop complexe pour être géré efficacement et trop lent pour répondre, et une réécriture presque complète du système en cours d'exécution a été effectuée. Cela a conduit à un autre commit important, cette fois-ci réalisé par Dane Knecht, qui est aujourd'hui notre directeur technique.<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">commit bedf6e7080391683e46ab698aacdfa9b3126a75f
Author: Dane Knecht
Date:   Thu Sep <span style="color: #cc66cc;">19</span> <span style="color: #cc66cc;">19</span>:<span style="color: #cc66cc;">31</span>:<span style="color: #cc66cc;">15</span> <span style="color: #cc66cc;">2013</span> <span style="color: #cc66cc;">-0700</span>
&nbsp;
    remove PHP.</pre></td></tr></table></code><hr />
</div><br />
<br />
À partir de ce moment, FL a été implémenté à l'aide de NGINX, du framework OpenResty et de LuaJIT.  Si cela a très bien fonctionné pendant longtemps, ces dernières années, le système a commencé à montrer des signes de vieillissement. Nous devions consacrer de plus en plus de temps à corriger ou à contourner des bogues obscurs dans LuaJIT. La nature hautement dynamique et non structurée de notre code Lua, qui était un avantage lorsque nous avons commencé à implémenter rapidement la logique, est devenue une source d'erreurs et de retards lorsque nous avons essayé d'intégrer de grandes quantités de logique produit complexe. Chaque fois qu'un nouveau produit était lancé, nous devions passer en revue tous les autres produits existants pour vérifier s'ils pouvaient être affectés par la nouvelle logique.<br />
<br />
Il était clair que nous devions repenser notre approche. Ainsi, en juillet 2024, nous avons effectué un premier commit pour une implémentation entièrement nouvelle et radicalement différente. Pour gagner du temps dans la recherche d'un nouveau nom, nous l'avons simplement appelée « FL2 » et avons bien sûr commencé à désigner la FL originale sous le nom de « FL1 ».<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">commit a72698fc7404a353a09a3b20ab92797ab4744ea8
Author: Maciej Lechowski
Date:   Wed Jul <span style="color: #cc66cc;">10</span> <span style="color: #cc66cc;">15</span>:<span style="color: #cc66cc;">19</span>:<span style="color: #cc66cc;">28</span> <span style="color: #cc66cc;">2024</span> <span style="color: #cc66cc;">+0100</span>
&nbsp;
    Create fl2 project</pre></td></tr></table></code><hr />
</div><br />
<br />
<b><font size="3">Rust et la modularisation rigide</font></b><br />
<br />
Nous ne partions pas de zéro. Nous avons déjà publié un article sur la façon dont nous avons remplacé un autre de nos anciens systèmes par Pingora, qui est construit dans le langage de programmation Rust, à l'aide du runtime Tokio. Nous avons également publié un <a rel="nofollow" href="https://blog.cloudflare.com/introducing-oxy/" target="_blank">article sur Oxy</a>, notre framework interne pour la création de proxys dans Rust. Nous écrivons beaucoup en Rust et nous sommes devenus assez bons dans ce domaine.<br />
<br />
Nous avons développé FL2 dans Rust, sur Oxy, et avons créé un cadre modulaire strict pour structurer toute la logique de FL2.<br />
<br />
<br />
<b><font size="3">Pourquoi Oxy ?</font></b><br />
<br />
Lorsque nous avons décidé de développer FL2, nous savions que nous ne remplacions pas simplement un ancien système, mais que nous reconstruisions les fondations mêmes de Cloudflare. Cela signifiait que nous avions besoin de plus qu'un simple proxy ; nous avions besoin d'un cadre capable d'évoluer avec nous, de gérer l'immense échelle de notre réseau et de permettre aux équipes d'avancer rapidement sans sacrifier la sécurité ou les performances. <br />
<br />
Oxy nous offre une combinaison puissante de performances, de sécurité et de flexibilité. Construit en Rust, il élimine toute une série de bogues qui affectaient notre FL1 basé sur Nginx/LuaJIT, tels que les problèmes de sécurité de la mémoire et les conflits d'accès aux données, tout en offrant des performances de niveau C. À l'échelle de Cloudflare, ces garanties ne sont pas un luxe, elles sont essentielles. Chaque microseconde gagnée par requête se traduit par des améliorations tangibles de l'expérience utilisateur, et chaque crash ou cas limite évité permet à Internet de fonctionner sans heurts. Les garanties strictes de Rust en matière de compilation s'accordent également parfaitement avec l'architecture modulaire de FL2, où nous appliquons des contrats clairs entre les modules du produit et leurs entrées et sorties.<br />
<br />
Mais le choix ne se limitait pas au langage. Oxy est le fruit d'années d'expérience dans la création de proxys haute performance. Il alimente déjà plusieurs services Cloudflare majeurs, de notre <a rel="nofollow" href="https://developers.cloudflare.com/cloudflare-one/" target="_blank">Zero Trust</a> Gateway à l'iCloud Private Relay d'Apple, nous savions donc qu'il pouvait gérer les divers modèles de trafic et combinaisons de protocoles que FL2 allait rencontrer. Son modèle d'extensibilité nous permet d'intercepter, d'analyser et de manipuler le trafic de la couche 3 à la couche 7, et même de décapsuler et de retraiter le trafic à différentes couches. Cette flexibilité est essentielle à la conception de FL2, car elle nous permet de traiter de manière cohérente tout le trafic, du HTTP au trafic IP brut, et de faire évoluer la plateforme pour prendre en charge de nouveaux protocoles et fonctionnalités sans avoir à réécrire les éléments fondamentaux.<br />
<br />
Oxy est également doté d'un ensemble complet de fonctionnalités intégrées qui nécessitaient auparavant de grandes quantités de code sur mesure. Des éléments tels que la surveillance, les rechargements logiciels, le chargement et l'échange de configurations dynamiques font tous partie du cadre. Cela permet aux équipes produit de se concentrer sur la logique métier unique de leur module plutôt que de réinventer la plomberie à chaque fois. Cette base solide nous permet d'apporter des modifications en toute confiance, de les livrer rapidement et d'être sûrs qu'elles se comporteront comme prévu une fois déployées.<br />
<br />
<br />
<b><font size="3">Redémarrages en douceur - pour que l'Internet continue de fonctionner</font></b><br />
<br />
L'une des améliorations les plus importantes apportées par Oxy concerne la gestion des redémarrages. Tout logiciel en développement et en amélioration continus devra tôt ou tard être mis à jour. Dans le cas des logiciels de bureau, c'est facile : il suffit de fermer le programme, d'installer la mise à jour et de le rouvrir. Sur le web, c'est beaucoup plus compliqué. Nos logiciels sont utilisés en permanence et ne peuvent pas simplement s'arrêter. Une requête HTTP interrompue peut empêcher le chargement d'une page, et une connexion interrompue peut vous exclure d'un appel vidéo. La fiabilité n'est pas facultative.<br />
<br />
Dans FL1, les mises à niveau impliquaient le redémarrage du processus proxy. Redémarrer un proxy signifiait mettre fin au processus dans son intégralité, ce qui interrompait immédiatement toutes les connexions actives. Cela était particulièrement pénible pour les connexions de longue durée telles que les WebSockets, les sessions de streaming et les API en temps réel. Même les mises à niveau planifiées pouvaient entraîner des interruptions visibles pour les utilisateurs, et les redémarrages imprévus lors d'incidents pouvaient être encore pires.<br />
<br />
Oxy change cela. Il comprend un mécanisme intégré de redémarrage en douceur qui nous permet de déployer de nouvelles versions sans interrompre les connexions, dans la mesure du possible. Lorsqu'une nouvelle instance d'un service basé sur Oxy démarre, l'ancienne cesse d'accepter de nouvelles connexions mais continue à servir celles qui existent déjà, permettant à ces sessions de se poursuivre sans interruption jusqu'à leur fin naturelle.<br />
<br />
Cela signifie que si vous avez une session WebSocket en cours lorsque nous déployons une nouvelle version, cette session peut se poursuivre sans interruption jusqu'à ce qu'elle se termine naturellement, plutôt que d'être interrompue par le redémarrage. Dans l'ensemble du parc Cloudflare, les déploiements sont orchestrés sur plusieurs heures, de sorte que le déploiement global est fluide et presque invisible pour les utilisateurs finaux.<br />
<br />
Nous allons encore plus loin en utilisant l'activation des sockets systemd. Au lieu de laisser chaque proxy gérer ses propres sockets, nous laissons systemd les créer et les posséder. Cela dissocie la durée de vie des sockets de celle de l'application Oxy elle-même. Si un processus Oxy redémarre ou plante, les sockets restent ouvertes et prêtes à accepter de nouvelles connexions, qui seront traitées dès que le nouveau processus sera en cours d'exécution. Cela élimine les erreurs de « connexion refusée » qui pouvaient se produire lors des redémarrages dans FL1 et améliore la disponibilité globale pendant les mises à niveau.<br />
<br />
Nous avons également créé nos propres mécanismes de coordination dans Rust pour remplacer les bibliothèques Go telles que tableflip par shellflip. Cela utilise un socket de coordination de redémarrage qui valide la configuration, génère de nouvelles instances et s'assure que la nouvelle version est en bon état avant que l'ancienne ne s'arrête. Cela améliore les boucles de rétroaction et permet à nos outils d'automatisation de détecter et de réagir immédiatement aux pannes, plutôt que de s'appuyer sur des redémarrages aveugles basés sur des signaux.<br />
<br />
<br />
<b><font size="3">Composition de FL2 à partir de modules</font></b><br />
<br />
Pour éviter les problèmes rencontrés avec FL1, nous voulions une conception où toutes les interactions entre les logiques produit seraient explicites et faciles à comprendre. <br />
<br />
Ainsi, en plus des fondations fournies par Oxy, nous avons construit une plateforme qui sépare toutes les logiques développées pour nos produits en modules bien définis. Après quelques expérimentations et recherches, nous avons conçu un système de modules qui applique des règles strictes :<br />
<br />
<ul><li style="">Aucune E/S (entrée ou sortie) ne peut être effectuée par le module.<br /></li><li style="">Le module fournit une liste de phases.<br /></li><li style="">Les phases sont évaluées dans un ordre strictement défini, qui est le même pour chaque requête.<br /></li><li style="">Chaque phase définit un ensemble d'entrées que la plateforme lui fournit et un ensemble de sorties qu'elle peut émettre.</li></ul><br />
Voici un exemple de définition d'une phase de module :<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="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 /></div></td><td valign="top"><pre style="margin: 0">Phase <span class="br0">&#123;</span>
    name: phases::SERVE_ERROR_PAGE,
    request_types_enabled: PHASE_ENABLED_FOR_REQUEST_TYPE,
    inputs: <span style="color: #0080ff;">vec!</span><span class="br0">&#91;</span>
        InputKind::IPInfo,
        InputKind::ModuleValue<span class="br0">&#40;</span>
            MODULE_VALUE_CUSTOM_ERRORS_FETCH_WORKER_RESPONSE.as_str<span class="br0">&#40;</span><span class="br0">&#41;</span>,
        <span class="br0">&#41;</span>,
        InputKind::ModuleValue<span class="br0">&#40;</span>MODULE_VALUE_ORIGINAL_SERVE_RESPONSE.as_str<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,
        InputKind::ModuleValue<span class="br0">&#40;</span>MODULE_VALUE_RULESETS_CUSTOM_ERRORS_OUTPUT.as_str<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,
        InputKind::ModuleValue<span class="br0">&#40;</span>MODULE_VALUE_RULESETS_UPSTREAM_ERROR_DETAILS.as_str<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,
        InputKind::RayId,
        InputKind::StatusCode,
        InputKind::Visitor,
    <span class="br0">&#93;</span>,
    outputs: <span style="color: #0080ff;">vec!</span><span class="br0">&#91;</span>OutputValue::ServeResponse<span class="br0">&#93;</span>,
    filters: <span style="color: #0080ff;">vec!</span><span class="br0">&#91;</span><span class="br0">&#93;</span>,
    func: phase_serve_error_page::callback,
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Cette phase concerne notre produit de page d'erreur personnalisée. Elle nécessite plusieurs éléments en entrée : des informations sur l'adresse IP du visiteur, certaines informations d'en-tête et autres informations HTTP, ainsi que certaines « valeurs de module ». Les valeurs de module permettent à un module de transmettre des informations à un autre, et elles sont essentielles pour que les propriétés strictes du système de modules fonctionnent. Par exemple, ce module a besoin de certaines informations produites par la sortie de notre produit d'erreurs personnalisées basé sur des ensembles de règles (l'entrée « <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">MODULE_VALUE_RULESETS_CUSTOM_ERRORS_OUTPUT</span> »). Ces définitions d'entrée et de sortie sont appliquées au moment de la compilation.<br />
<br />
Bien que ces règles soient strictes, nous avons constaté que nous pouvions implémenter toute la logique de nos produits dans ce cadre. L'avantage est que nous pouvons immédiatement déterminer quels autres produits sont susceptibles d'interagir entre eux.<br />
<br />
<br />
<b><font size="3">Comment remplacer un système en cours d'exécution</font></b><br />
<br />
Construire un cadre est une chose. Construire toute la logique du produit et la mettre au point de manière à ce que les clients ne remarquent rien d'autre qu'une amélioration des performances en est une autre.<br />
<br />
La base de code FL prend en charge 15 ans de produits Cloudflare et évolue constamment. Nous ne pouvions pas arrêter le développement. L'une de nos premières tâches a donc consisté à trouver des moyens de rendre la migration plus facile et plus sûre.<br />
<br />
<ul><li style=""><b>Étape 1 - Modules Rust dans OpenResty</b></li></ul><br />
La reconstruction de la logique produit dans Rust représente une distraction suffisante par rapport à la livraison des produits aux clients. Demander à toutes nos équipes de maintenir deux versions de la logique de leurs produits et de réimplémenter chaque modification une deuxième fois jusqu'à la fin de notre migration était trop demander.<br />
<br />
Nous avons donc implémenté une couche dans notre ancien FL basé sur NGINX et OpenResty qui permettait d'exécuter les nouveaux modules. Au lieu de maintenir une implémentation parallèle, les équipes pouvaient implémenter leur logique dans Rust et remplacer leur ancienne logique Lua par celle-ci, sans attendre le remplacement complet de l'ancien système.<br />
<br />
Voici, par exemple, une partie de l'implémentation du module de page d'erreur personnalisée défini précédemment (nous avons supprimé certains détails fastidieux, ce qui fait que le code ne compile pas tel quel) :<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="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 />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">pub</span><span class="br0">&#40;</span><span style="color: #0000ff;">crate</span><span class="br0">&#41;</span> <span style="color: #0000ff;">fn</span> callback<span class="br0">&#40;</span>_services: &amp;<span style="color: #0080ff;">mut</span> Services, input: &amp;Input&lt;<span style="color: #339933;">'_</span>&gt;<span class="br0">&#41;</span> -&gt; Output <span class="br0">&#123;</span>
    <span style="color: #808080;">// Rulesets produced a response to serve - this can either come from a special</span>
    <span style="color: #808080;">// Cloudflare worker for serving custom errors, or be directly embedded in the rule.</span>
    <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">let</span> <span style="color: #FF0000;">Some</span><span class="br0">&#40;</span>rulesets_params<span class="br0">&#41;</span> = input
        .get_module_value<span class="br0">&#40;</span>MODULE_VALUE_RULESETS_CUSTOM_ERRORS_OUTPUT<span class="br0">&#41;</span>
        .cloned<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <span style="color: #808080;">// Select either the result from the special worker, or the parameters embedded</span>
        <span style="color: #808080;">// in the rule.</span>
        <span style="color: #0000ff;">let</span> body = input
            .get_module_value<span class="br0">&#40;</span>MODULE_VALUE_CUSTOM_ERRORS_FETCH_WORKER_RESPONSE<span class="br0">&#41;</span>
            .and_then<span class="br0">&#40;</span>|response| <span class="br0">&#123;</span>
                handle_custom_errors_fetch_response<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;rulesets&quot;</span>, response.to_owned<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
            <span class="br0">&#125;</span><span class="br0">&#41;</span>
            .or<span class="br0">&#40;</span>rulesets_params.body<span class="br0">&#41;</span>;
&nbsp;
        <span style="color: #808080;">// If we were able to load a body, serve it, otherwise let the next bit of logic</span>
        <span style="color: #808080;">// handle the response</span>
        <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">let</span> <span style="color: #FF0000;">Some</span><span class="br0">&#40;</span>body<span class="br0">&#41;</span> = body <span class="br0">&#123;</span>
            <span style="color: #0000ff;">let</span> final_body = replace_custom_error_tokens<span class="br0">&#40;</span>input, &amp;body<span class="br0">&#41;</span>;
&nbsp;
            <span style="color: #808080;">// Increment a metric recording number of custom error pages served</span>
            custom_pages::pages_served<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;rulesets&quot;</span><span class="br0">&#41;</span>.inc<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
            <span style="color: #808080;">// Return a phase output with one final action, causing an HTTP response to be served.</span>
            <span style="color: #0000ff;">return</span> Output::from<span class="br0">&#40;</span>TerminalAction::ServeResponse<span class="br0">&#40;</span>ResponseAction::OriginError <span class="br0">&#123;</span>
                rulesets_params.status,
                source: <span style="color: #FF0000;">&quot;rulesets http_custom_errors&quot;</span>,
                headers: rulesets_params.headers,
                body: <span style="color: #FF0000;">Some</span><span class="br0">&#40;</span>Bytes::from<span class="br0">&#40;</span>final_body<span class="br0">&#41;</span><span class="br0">&#41;</span>,
            <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
La logique interne de chaque module est clairement séparée du traitement des données, avec une gestion des erreurs très claire et explicite encouragée par la conception du langage Rust.<br />
<br />
La plupart de nos modules les plus activement développés ont été traités de cette manière, ce qui a permis aux équipes de maintenir leur rythme de changement pendant notre migration.<br />
<br />
<ul><li style=""><b>Étape 2 - Tests et déploiements automatisés</b></li></ul><br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670726d1759487313/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/3.jpg/" border="0" alt="Nom : 3.jpg
Affichages : 2728
Taille : 11,3 Ko"  style="float: CONFIG" /></div><br />
Il est essentiel de disposer d'un cadre de test très puissant pour couvrir une telle migration.  Nous avons mis au point un système, baptisé en interne Flamingo, qui nous permet d'exécuter simultanément des milliers de requêtes de test de bout en bout sur nos systèmes de production et de préproduction. Les mêmes tests sont effectués sur FL1 et FL2, ce qui nous donne l'assurance que nous ne modifions pas les comportements.<br />
<br />
Chaque fois que nous déployons une modification, celle-ci est mise en œuvre progressivement à travers plusieurs étapes, avec des volumes de trafic croissants. Chaque étape est automatiquement évaluée et n'est validée que lorsque l'ensemble des tests a été exécuté avec succès, et que les mesures globales de performance et d'utilisation des ressources se situent dans des limites acceptables. Ce système est entièrement automatisé et suspend ou annule les modifications si les tests échouent.<br />
<br />
L'avantage est que nous sommes en mesure de créer et de livrer de nouvelles fonctionnalités de produit dans FL2 en moins de 48 heures, alors qu'il aurait fallu plusieurs semaines dans FL1. En fait, au moins une des annonces de cette semaine concernait un tel changement !<br />
<br />
<ul><li style=""><b>Étape 3 - Solutions de secours</b></li></ul><br />
Plus de 100 ingénieurs ont travaillé sur FL2, et nous avons plus de 130 modules. Et nous n'avons pas encore tout à fait terminé. Nous sommes encore en train de mettre la touche finale au système, afin de nous assurer qu'il reproduit tous les comportements de FL1.<br />
<br />
Alors, comment envoyer du trafic vers FL2 sans qu'il soit capable de tout gérer ? Si FL2 reçoit une requête ou une partie de la configuration d'une requête qu'il ne sait pas traiter, il abandonne et effectue ce que nous appelons une solution de repli : il transmet l'ensemble à FL1. Il le fait au niveau du réseau : il transmet simplement les octets à FL1.<br />
<br />
Outre le fait que cela nous permet d'envoyer du trafic vers FL2 sans qu'il soit entièrement complet, cela présente un autre avantage considérable. Lorsque nous avons implémenté une nouvelle fonctionnalité dans FL2, mais que nous voulons vérifier qu'elle fonctionne de la même manière que dans FL1, nous pouvons évaluer la fonctionnalité dans FL2, puis déclencher un repli. Nous sommes en mesure de comparer le comportement des deux systèmes, ce qui nous permet d'être sûrs que notre implémentation est correcte.<br />
<br />
<ul><li style=""><b>Étape 4 - Déploiement</b></li></ul><br />
Nous avons commencé à acheminer le trafic client via FL2 au début de l'année 2025 et avons progressivement augmenté le volume de trafic traité tout au long de l'année. Nous avons essentiellement observé deux graphiques : l'un montrant l'augmentation de la proportion de trafic acheminé vers FL2, et l'autre montrant la diminution de la proportion de trafic non traité par FL2 et renvoyé vers FL1.<br />
<br />
Nous avons commencé ce processus en acheminant le trafic de nos clients gratuits via le système. Nous avons pu prouver que le système fonctionnait correctement et réduire les taux de repli pour nos principaux modules. Nos MVP de la communauté Cloudflare ont joué le rôle de système d'alerte précoce, effectuant des tests de fumée et signalant les cas où ils soupçonnaient que la nouvelle plateforme pouvait être à l'origine d'un nouveau problème signalé. Leur soutien a été essentiel pour permettre à notre équipe d'enquêter rapidement, d'appliquer des correctifs ciblés ou de confirmer que le passage à FL2 n'était pas en cause.<br />
<br />
Nous sommes ensuite passés à nos clients payants, en augmentant progressivement le nombre de clients utilisant le système. Nous avons également travaillé en étroite collaboration avec certains de nos plus gros clients, qui souhaitaient bénéficier des avantages de FL2 en termes de performances, et nous les avons intégrés dès le début en échange de nombreux commentaires sur le système.<br />
<br />
À l'heure actuelle, la plupart de nos clients utilisent FL2. Il nous reste encore quelques fonctionnalités à finaliser et nous ne sommes pas tout à fait prêts à accueillir tout le monde, mais notre objectif est de désactiver FL1 d'ici quelques mois.<br />
<br />
<br />
<b><font size="3">Impact de FL2</font></b><br />
<br />
Comme nous l'avons décrit au début de cet article, FL2 est nettement plus rapide que FL1. La principale raison en est simplement que FL2 effectue moins de tâches. Vous avez peut-être remarqué dans l'exemple de définition de module une ligne<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">    filters: <span style="color: #0080ff;">vec!</span><span class="br0">&#91;</span><span class="br0">&#93;</span>,</code><hr />
</div><br />
<br />
Chaque module est capable de fournir un ensemble de filtres qui contrôlent s'ils s'exécutent ou non. Cela signifie que nous n'exécutons pas la logique pour chaque produit pour chaque requête — nous pouvons très facilement sélectionner uniquement l'ensemble de modules requis. Le coût supplémentaire pour chaque nouveau produit que nous développons a disparu.<br />
<br />
Une autre raison importante expliquant ces meilleures performances est que FL2 est une base de code unique, implémentée dans un langage axé sur les performances. En comparaison, FL1 était basé sur NGINX (écrit en C), combiné à LuaJIT (Lua et couches d'interface C), et contenait également de nombreux modules Rust.  Dans FL1, nous avons consacré beaucoup de temps et de mémoire à convertir les données de la représentation requise par un langage à celle requise par un autre.<br />
<br />
En conséquence, nos mesures internes montrent que FL2 utilise moins de la moitié du CPU de FL1 et beaucoup moins de la moitié de la mémoire. C'est un énorme avantage : nous pouvons consacrer le CPU à offrir de plus en plus de fonctionnalités à nos clients !<br />
<br />
<br />
<b><font size="3">Comment mesurer si nous nous améliorons ?</font></b><br />
<br />
À l'aide de nos propres outils et de benchmarks indépendants tels que CDNPerf, nous avons mesuré l'impact de FL2 lors de son déploiement sur le réseau. Les résultats sont clairs : les sites web répondent en moyenne 10 ms plus rapidement, soit une augmentation de 25 % des performances.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p670727d1759487318/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/4.jpg/" border="0" alt="Nom : 4.jpg
Affichages : 1318
Taille : 50,0 Ko"  style="float: CONFIG" /></div><br />
<br />
<b><font size="3">Sécurité</font></b><br />
<br />
FL2 est également plus sécurisé que FL1 de par sa conception. Aucun système logiciel n'est parfait, mais le langage Rust nous apporte d'énormes avantages par rapport à LuaJIT. Rust dispose de solides contrôles de mémoire lors de la compilation et d'un système de types qui évite de nombreuses erreurs. En combinant cela avec notre système de modules rigide, nous pouvons effectuer la plupart des changements en toute confiance.<br />
<br />
Bien sûr, aucun système n'est sûr s'il est mal utilisé. Il est facile d'écrire du code en Rust qui provoque une corruption de la mémoire. Pour réduire les risques, nous maintenons des contrôles et des vérifications rigoureux lors de la compilation, ainsi que des normes de codage, des tests et des processus de révision stricts.<br />
<br />
Nous suivons depuis longtemps une politique selon laquelle tout crash inexpliqué de nos systèmes doit faire l'objet d'une enquête prioritaire. Nous n'allons pas assouplir cette politique, même si la cause principale des nouveaux crashes dans FL2 est jusqu'à présent due à des défaillances matérielles. La réduction massive du taux de ces crashes nous donnera le temps de mener à bien ces enquêtes.<br />
<br />
<br />
<b><font size="3">Quelle est la prochaine étape ?</font></b><br />
<br />
Nous consacrerons le reste de l'année 2025 à achever la migration de FL1 vers FL2, et nous désactiverons FL1 début 2026. Nous constatons déjà les avantages en termes de performances pour les clients et de rapidité de développement, et nous sommes impatients de les offrir à tous nos clients.<br />
<br />
Il nous reste un dernier service à migrer complètement. La case « HTTP &amp; TLS Termination » du schéma tout en haut est également un service NGINX, et nous sommes en train de le réécrire en Rust. Cette migration progresse bien et devrait être terminée au début de l'année prochaine.<br />
<br />
Une fois que tout sera modulaire, écrit en Rust, testé et mis à l'échelle, nous pourrons vraiment commencer à optimiser ! Nous réorganiserons et simplifierons la manière dont les modules se connectent entre eux, étendrons la prise en charge du trafic non HTTP comme le RPC et les flux, et bien plus encore. <br />
<br />
Si vous souhaitez participer à cette aventure, consultez notre page Carrières pour connaître les postes à pourvoir. Nous sommes toujours à la recherche de nouveaux talents pour nous aider à construire un Internet meilleur.<br />
<br />
<b>Auteurs</b> : Richard Boulton, Steve Goldsmith, Maurizio Abba, Matthew Bullock<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://blog.cloudflare.com/20-percent-internet-upgrade/" target="_blank">&quot;Cloudflare just got faster and more secure, powered by Rust&quot;</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://mongodb.developpez.com/actu/374830/Comment-nous-avons-remplace-Elasticsearch-et-MongoDB-par-HorizonDB-avec-Rust-et-RocksDB-pour-ameliorer-les-performances-par-Radar/" target="_blank">Comment nous avons remplacé Elasticsearch et MongoDB par HorizonDB avec Rust et RocksDB pour améliorer les performances, par Radar</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/340173/Cplusplus-vs-Rust-une-comparaison-pratique-de-la-vitesse-de-compilation-et-de-test-des-deux-langages-de-programmation-par-Matthew-Glazar-ingenieur-en-genie-logiciel/" target="_blank">C++ vs Rust : une comparaison pratique de la vitesse de compilation et de test des deux langages de programmation, par Matthew Glazar, ingénieur en génie logiciel</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/358903/Enquete-Developer-Nation-Rust-est-le-langage-de-programmation-qui-connait-la-croissance-la-plus-rapide-sa-communaute-de-developpeurs-ayant-double-de-taille-au-cours-des-deux-dernieres-annees/" target="_blank">Enquête Developer Nation : Rust est le langage de programmation qui connaît la croissance la plus rapide. Sa communauté de développeurs ayant doublé de taille au cours des deux dernières années</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/p670724d1759487303/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/1.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670725d1759487308/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/2.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670726d1759487313/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/3.jpg/" alt="" />&nbsp;<img class="attach" src="https://www.developpez.net/forums/attachments/p670727d1759487318/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/4.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Jade Emy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179636/general-developpement/programmation-systeme/rust/cloudflare-desormais-plus-rapide-plus-securise-grace-rust/</guid>
		</item>
		<item>
			<title><![CDATA[L'équipe de développement du langage de programmation Rust annonce Rust 1.90]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179458&amp;goto=newpost</link>
			<pubDate>Wed, 24 Sep 2025 14:25:53 GMT</pubDate>
			<description><![CDATA[*L'équipe de développement du...]]></description>
			<content:encoded><![CDATA[<div><b><font size="4">L'équipe de développement du langage de programmation Rust annonce Rust 1.90 avec LLD comme éditeur de liens par défaut sur x86_64-unknown-linux-gnu</font></b><br />
<br />
<b>L'équipe de développement du langage de programmation Rust annonce Rust 1.90. Dans cette version, LLD est désormais l'éditeur de liens par défaut sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-unknown-linux-gnu</span>, Cargo ajoute la prise en charge native de la publication d'espaces de travail, ainsi que la rétrogradation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-apple-darwin</span> au niveau 2 avec les outils hôtes.</b><br />
<br />
L'équipe Rust est heureuse d'annoncer la sortie d'une nouvelle version de Rust, la 1.90. Rust est un langage de programmation qui permet à tout un chacun de créer des logiciels fiables et efficaces. Si vous avez déjà installé une version précédente de Rust via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span>, vous pouvez obtenir la version 1.90.0 avec : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$ rustup update stable</span>. Si vous ne l'avez pas encore, vous pouvez obtenir <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span> sur la page appropriée sur le site web de Rust. <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/kEtNlTV14Ms?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
<b>LLD est désormais l'éditeur de liens par défaut sur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-unknown-linux-gnu</span></b><br />
<br />
La cible <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-unknown-linux-gnu</span> utilisera désormais le lieur LLD pour lier les crates Rust par défaut. Cela devrait améliorer les performances de liaison par rapport au lieur Linux par défaut (BFD), en particulier pour les binaires volumineux, les binaires contenant beaucoup d'informations de débogage et les reconstructions incrémentielles.<br />
<br />
Dans la grande majorité des cas, LLD devrait être rétrocompatible avec BFD, et vous ne devriez constater aucune différence autre qu'une réduction du temps de compilation. Cependant, si vous rencontrez de nouveaux problèmes avec l'éditeur de liens, vous pouvez toujours le désactiver à l'aide du drapeau du compilateur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-C linker-features=-lld</span>. Vous pouvez l'ajouter à la variable d'environnement <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">RUSTFLAGS</span> habituelle ou au fichier de configuration <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.cargo/config.toml</span> d'un projet, comme suit :<br />
<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"><span class="br0">&#91;</span>target.x86_64-unknown-linux-gnu<span class="br0">&#93;</span>
rustflags = <span class="br0">&#91;</span><span style="color: #FF0000;">&quot;-Clinker-features=-lld&quot;</span><span class="br0">&#93;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b>Cargo ajoute la prise en charge native de la publication d'espaces de travail</b><br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cargo publish --workspace</span> est désormais pris en charge, publiant automatiquement toutes les crates d'un espace de travail dans le bon ordre (en suivant les dépendances entre elles).<br />
<br />
Cela était déjà possible depuis longtemps à l'aide d'outils externes ou en classant manuellement les publications individuelles, mais cette fonctionnalité est désormais intégrée à Cargo.<br />
<br />
L'intégration native permet à la vérification de publication de Cargo d'exécuter une compilation sur l'ensemble des crates à publier comme si elles étaient déjà publiées, y compris pendant les simulations. Notez que les publications ne sont toujours pas atomiques : des erreurs réseau ou des pannes côté serveur peuvent encore entraîner une publication partielle de l'espace de travail.<br />
<br />
<br />
<b>Rétrogradation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-apple-darwin</span> au niveau 2 avec les outils hôtes</b><br />
<br />
GitHub va bientôt cesser de fournir gratuitement des runners macOS x86_64 pour les dépôts publics. Apple a également annoncé son intention de mettre fin à la prise en charge de l'architecture x86_64.<br />
<br />
Conformément à ces changements, à partir de Rust 1.90, l'équipe Rust a rétrogradé la cible <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">x86_64-apple-darwin</span> du niveau 1 avec outils hôtes au niveau 2 avec outils hôtes. Cela signifie que la cible, y compris les outils tels que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustc</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cargo</span>, sera garantie de se compiler, mais ne sera pas garantie de passer la suite de tests automatisés.<br />
<br />
Pour les utilisateurs, ce changement n'aura pas d'impact immédiat. Les compilations de la bibliothèque standard et du compilateur continueront d'être distribuées par le projet Rust pour être utilisées via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span> ou d'autres méthodes d'installation tant que la cible restera au niveau 2. À terme, il est probable que la réduction de la couverture des tests pour cette cible entraîne des dysfonctionnements ou une perte de compatibilité sans autre annonce.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://blog.rust-lang.org/2025/09/18/Rust-1.90.0/" target="_blank">Annonce Rust 1.90</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette annonce est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/374590/Rust-1-89-est-desormais-disponible-et-etend-la-prise-en-charge-des-plateformes-x86-et-x86-x86-64-avec-de-nouvelles-instructions-et-fonctionnalites-de-processeur-dont-des-intrinseques-AVX-512-supplementaires/" target="_blank">Rust 1.89 est désormais disponible et étend la prise en charge des plateformes x86 et x86/x86_64 avec de nouvelles instructions et fonctionnalités de processeur, dont des intrinsèques AVX-512 supplémentaires</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/365520/La-Fondation-Rust-presente-son-plan-pour-accroitre-le-nombre-de-developpeurs-Rust-bien-formes-garantissant-un-ecosysteme-Rust-sain-qui-depend-d-un-nombre-croissant-developpeurs-bien-formes/" target="_blank">La Fondation Rust présente son plan pour accroître le nombre de développeurs Rust bien formés, garantissant un écosystème Rust sain, qui dépend d'un nombre croissant développeurs bien formés</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/365134/La-communaute-Rust-reconnait-que-le-langage-n-est-pas-securise-au-travers-d-une-recente-annonce-de-lancement-d-une-initiative-de-verification-de-7500-fonctions-non-sures-de-la-bibliotheque-standard-Rust/" target="_blank">La communauté Rust reconnaît que le langage n'est pas sécurisé au travers d'une récente annonce de lancement d'une initiative de vérification de 7500 fonctions non sûres de la bibliothèque standard Rust</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179458/general-developpement/programmation-systeme/rust/l-equipe-developpement-langage-programmation-rust-annonce-rust-1-90-a/</guid>
		</item>
		<item>
			<title><![CDATA[Brian Kernighan, informaticien de renom et co-créateur d'Unix, s'exprime après avoir testé le langage Rust]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178970&amp;goto=newpost</link>
			<pubDate>Mon, 01 Sep 2025 21:48:49 GMT</pubDate>
			<description>*Brian Kernighan, co-créateur...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Brian Kernighan, co-créateur d'Unix, s'exprime après avoir testé le langage Rust : « je ne pense pas qu'il va remplacer C tout de suite »</font></b><br />
<b><font size="1">il juge l’écosystème de Rust « incompréhensiblement vaste et lent »</font></b><br />
<br />
<b>Brian Kernighan, co-créateur d'Unix, a partagé ses réflexions sur les langages modernes tels que Rust, les distributions Linux et les descendants d'Unix. Il a souligné que <a href="https://intelligence-artificielle.developpez.com/actu/361077/" target="_blank">les solides fonctionnalités de sécurité mémoire de Rust font des vagues dans la communauté</a>, offrant aux développeurs un moyen d'écrire du code plus sûr. Toutefois, après l'avoir testé, Brian Kernighan juge l’écosystème de Rust « incompréhensiblement vaste et lent ». Il n'a écrit qu'un seul programme en Rust, mais rapporte une expérience pénible. Son avis contraste avec celui d'autres figures de l'industrie, comme Linus Torvalds, créateur du noyau Linus.</b><br />
<br />
Brian Kernighan, 83 ans, est un informaticien canadien de renom connu pour avoir coécrit le premier livre sur le langage de programmation C (avec Dennis Ritchie). Il est également le co-créateur des langages Awk, avec Alfred Aho et Peter Weinberger, et AMPL. Il a travaillé aux Bell Labs et a contribué au développement d'Unix aux côtés des créateurs d'Unix, Ken Thompson et Dennis Ritchie. Il est aussi connu pour d'autres travaux pionniers dans l'informatique.<br />
<br />
En 1969, il obtient un doctorat d'électrotechnique à l'université de Princeton, où en 2004, il occupe un poste de professeur. « J'enseigne toujours à Princeton. Je n'ai pas encore pris ma retraite ! », a-t-il déclaré récemment, devant un public réuni au InfoAge Science and History Museums de Wall, dans le New Jersey.<br />
<br />
Brian Kernighan avait été invité à prendre la parole lors du festival « Vintage Computer East ». Lors de l'événement, il a partagé ses réflexions sur ce qu'il pense du monde d'aujourd'hui, avec son abandon du langage C au profit de langages de programmation plus sûrs pour la mémoire. Il a mis l'accent sur le langage Rust, qu'il a utilisé pour écrire un programme. Mais alors que Rust jouit d'une popularité croissant, Brian Kernighan n'a pas du tout été séduit.<br />
<br />
<b><font size="3">Brian Kernighan critique vivement les performances du langage Rust</font></b><br />
<br />
« Pensez-vous que Rust ait un quelconque intérêt à remplacer C ? Ou s'agit-il simplement d'un énorme battage médiatique qui finira par s'essouffler ? », a demandé un membre du public. Dans un monde qui évolue depuis des années vers des langages plus sûrs pour la mémoire, la réponse d'un fervent défenseur du langage de programmation C depuis plus d'un demi-siècle promettait d'être tout simplement emblématique. Il s'est montré très très critique.<br />
<br />
Brian Kernighan a trouvé son expérience avec Rust « pénible ». Selon lui, les mécanismes imposés par Rust pour garantir la sécurité mémoire sont trop lourds, surtout dans un programme où la gestion de la mémoire n’était pas un problème majeur. Il décrit son unique essai comme « une douleur », et juge l’écosystème du langage — avec ses crates, sa complexité et la lenteur de la compilation — comme « incompréhensiblement vaste et lent ».<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/WEb_YL1K1Qg?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
« Ohhh, Rust », a déclaré Brian Kernighan, sous les rires du public. « Je n'ai écrit qu'un seul programme en Rust, vous devez donc prendre tout cela avec beaucoup de recul. Et j'ai trouvé cela pénible. Je n'arrivais tout simplement pas à comprendre les mécanismes nécessaires pour assurer la sécurité de la mémoire, dans un programme où la mémoire n'était même pas un problème ! ». Sa plus grande critique semble concerner ses performances de Rust.<br />
<br />
« Et le compilateur était lent, le code qui en ressortait était lent... », a-t-il déclaré. « Quand j'ai essayé de comprendre ce qui se passait, le langage avait changé depuis la dernière fois que quelqu'un avait publié une description ! Il m'a donc fallu plusieurs jours pour écrire un programme qui, dans d'autres langages, aurait pris peut-être cinq minutes... »<br />
<br />
Le 15 mai 2025, le compte Twitter officiel du projet <a href="https://rust.developpez.com/actu/372204/" target="_blank">FFmpeg a publié un message acerbe à l'encontre de Rust</a> qui dit : « [Rust] est tellement bon que l'on peut être payé 20 000 $ pour le rendre aussi rapide que C ». Cette remarque visait l'initiative de Prossimo, qui a proposé une prime de 20 000 $ à quiconque parviendrait à rendre son décodeur AV1, rav1d, aussi rapide que dav1d, une implémentation en C largement reconnue pour sa rapidité. <br />
<br />
Cette déclaration a ravivé le débat sur les compromis entre sécurité mémoire, performance et coût dans le développement de systèmes critiques. Il s'agit d'un débat de longue date dans la communauté des développeurs. Certains chérissent les performances brutes, tandis que d'autres préfèrent la sécurité.<br />
<br />
<b><font size="3">Les limites du jugement de Brian Kernighan concernant le langage Rust</font></b><br />
<br />
Dans l'ensemble, Brian Kernighan avait eu une mauvaise expérience. Il reconnaît qu’il n’a écrit qu’un seul programme en Rust et conseille de prendre ses critiques avec prudence. Il précise que son expérience reste personnelle et ne doit pas être vue comme un rejet définitif du langage. Cela dit, il ne considère pas Rust comme un remplaçant du C : « je suis probablement trop cynique. Mais je ne pense pas qu'il va remplacer C tout de suite, en tout cas ».<br />
<br />
La position de Brian Kernighan sur Rust contraste avec celle de Linus Torvalds, créateur du noyau Linux. Linus Torvalds est favorable à l'introduction de Rust dans le noyau Linus, ce qui constitue l’un des changements techniques les plus significatifs de ces dernières années. Le langage de programmation Rust, réputé pour sa sécurité mémoire et sa modernité par rapport au langage C, a suscité un débat très intense parmi des développeurs du noyau.<br />
<br />
Depuis l'annonce de la prise en charge expérimentale de Rust dans le noyau Linux, plusieurs mainteneurs ont exprimé des inquiétudes quant à l'impact de ce changement. Parmi eux, Christoph Hellwig a pris une position ferme contre l'utilisation de Rust, mettant en avant des arguments relatifs à la complexité et à la fragmentation du développement du noyau. Les critiques craignent que le mélange de Rust et du C ne rende Linux impossible à maintenir.<br />
<br />
Face aux préoccupations soulevées, <a href="https://linux.developpez.com/actu/369391/" target="_blank">Linus Torvalds a clarifié sa position sur Rust</a>. Il a affirmé qu'il n'est pas question d'imposer Rust aux mainteneurs qui ne souhaitent pas travailler avec ce langage. Linus Torvalds a expliqué que les mainteneurs ne seront pas contraints d'interagir avec du code Rust s'ils n'en voient pas l’utilité. Cependant, cela ne signifie pas qu'ils ont le droit de bloquer son intégration dans des domaines où il est jugé bénéfique.<br />
<br />
Linus Torvalds a précisé que la demande d’intégration d’un module en Rust, qui était à l’origine du débat, n’avait aucune incidence directe sur le code existant maintenu par Christoph Hellwig. Dès lors, il n’était pas justifié que ce dernier cherche à bloquer l’évolution du noyau dans ce sens.<br />
<br />
Linus Torvalds a également insisté sur un principe fondamental du développement de Linux : le pragmatisme et la flexibilité. Selon lui, l'objectif n'est pas d'obliger quiconque à travailler avec Rust, mais de permettre à ceux qui veulent l’utiliser de le faire sans contraintes excessives. L'année dernière, <a href="https://rust.developpez.com/actu/361919/" target="_blank">Linus Torvalds a exprimé sa déception face au faible taux d'adoption de Rust</a>, les principaux mainteneurs du noyau étant plus habitués au langage C.<br />
<br />
<b><font size="3">Pourquoi Rust dans le noyau Linux ?</font></b><br />
<br />
L'adoption de Rust dans le noyau Linux repose sur plusieurs motivations majeures :<br />
<br />
<ul><li style=""><b>sécurité mémoire améliorée</b> : l’un des principaux atouts de Rust est sa gestion de la mémoire sécurisée par conception. Contrairement au C, qui repose sur une gestion explicite de la mémoire (et donc sujet à des erreurs comme les dépassements de tampon et les accès à des pointeurs invalides), Rust empêche ces erreurs à la compilation. Cela permet de réduire la surface d’attaque du noyau, particulièrement pour les pilotes et modules de bas niveau ;</li><li style=""><b>fiabilité et modernité</b> : Rust introduit des concepts modernes, tels que le système de propriété et l’emprunt de mémoire, qui facilitent l’écriture de code robuste. Pour un projet aussi critique que le noyau Linux, cela peut se traduire par une réduction significative des bogues et des failles de sécurité ;</li><li style=""><b>un développement plus modulaire</b> : Rust permet de développer des modules et pilotes isolés qui peuvent coexister avec du code en C sans nécessiter une réécriture complète du noyau. Cela signifie que les développeurs peuvent progressivement tester et adopter Rust sans perturber le fonctionnement global de Linux ;</li><li style=""><b>l’adoption croissante dans l’industrie</b> : de grandes entreprises technologiques, comme Google, Microsoft et Meta, soutiennent l'utilisation de Rust pour des composants critiques de bas niveau. Google, par exemple, a déjà commencé à utiliser Rust dans le noyau Android pour renforcer la sécurité.</li></ul><br />
<br />
Il faut noter que l'adoption de Rust soulève des défis :<br />
<br />
<ul><li style=""><b>apprentissage du langage</b> : certains mainteneurs ne sont pas familiers avec Rust, et il faudra du temps pour qu’une partie significative de la communauté Linux se l’approprie ;</li><li style=""><b>support des outils et chaînes de compilation</b> : bien que Rust dispose d’un excellent écosystème, son intégration au sein des infrastructures existantes du noyau nécessite un travail supplémentaire ;</li><li style=""><b>équilibre entre conservatisme et innovation</b> : Linux a toujours été un projet où le pragmatisme prime sur la mode technologique. Torvalds veut s’assurer que Rust apporte une véritable valeur ajoutée avant de l’étendre plus largement.</li></ul><br />
<br />
<b><font size="3">Brian Kernighan revient sur son passage au sein des laboratoires Bell</font></b><br />
<br />
Au cours de son intervention, Brian Kernighan a évoqué avec émotion l'ambiance générale qui régnait chez Bell Labs, la qualifiant de coopérative, collégiale et agréable... « C'était très agréable de passer du temps avec ces gens ». Mais il a ajouté qu'après l'arrivée de Microsoft Windows, « le monde de la technologie avait complètement changé » et que beaucoup d'efforts, d'attention et de talents avaient commencé à se concentrer sur le monde des PC... <br />
<br />
Il se souvient que « les bonnes idées et les personnes talentueuses se sont en quelque sorte éloignées, dans une certaine mesure, voire beaucoup, d'Unix ». Et « l'accent était beaucoup plus mis sur l'interaction », car Microsoft fabriquait des produits grand public (qui n'étaient pas destinés à « une population technique »). Il a toutefois rappelé à l'auditoire que le monde avait ensuite assisté au développement de Linux, qui perpétue l'héritage d'Unix.<br />
<br />
Que pense-t-il donc de la démocratisation d'Unix aujourd'hui ? Les utilisateurs de Mac/iPhone utilisent les descendants d'Unix sans même le savoir. Le projet s'éloigne ainsi de la philosophie originale libre et open source. « Je pense que vous avez mis le doigt dessus », a répondu Brian Kernighan, « quand vous avez dit que la plupart des gens ne le savent pas... ».<br />
<br />
Il a fait remarquer que les iPhone fonctionnent avec une « version d'Unix assez évoluée », tandis que les téléphones Android fonctionnent avec une version différente de Linux sous-jacente... « De mon point de vue, en tant que personne qui a été vaguement impliquée dans les débuts et qui possède un téléphone, je trouve cela intrigant. Et je trouve aussi assez irritant qu'il y ait en dessous un système avec lequel je pourrais faire des choses, mais auquel je n'ai pas accès ! », a-t-il déclaré.<br />
<br />
Son public a de nouveau ri et applaudi... Un participant a même souligné que « Brian Kernighan a effectivement été impliqué dans le logiciel pendant toute la durée de vie du logiciel en tant que produit commercial ». Mais cela signifie aussi qu'il a vécu pour voir sa commercialisation et sa productisation.<br />
<br />
Il a également été invité à répondre à la question suivante : « avez-vous des commentaires pertinents sur l'état actuel des logiciels tels qu'ils existent aujourd'hui... ? » Brian Kernighan a souri malicieusement — tandis que son public riait à nouveau — lorsque l'interlocuteur ajouta : « en dix mots maximum, si possible ! ».<br />
<br />
« La plupart sont nuls... ! », répondit-il sous les applaudissements du public. « Malheureusement, c'est tout à fait vrai ». Il a ajouté à l'intention de son interlocuteur : « je pourrais développer, mais peut-être hors ligne... ». <br />
<br />
<b><font size="3">Brian Kernighan contre le vibe coding</font></b><br />
<br />
Au cours de sa présentation, Brian Kernighan a déclaré que l'un des héritages d'Unix réside dans « les programmes qui écrivent des programmes ». « Un compilateur crée un langage d'assemblage... ? C'est un programme qui écrit un programme... Et une fois que vous avez compris le principe, les programmes qui écrivent des programmes font du bon travail. Ils le font souvent mieux que les humains », a expliqué l'informaticien.<br />
<br />
Mais ensuite, en entendant ses propres mots, il a rapidement ajouté une mise en garde. « Je passerai sur ce qui se passe avec les grands modèles de langage... » Alors que le public riait, il a poursuivi : « parce que mes quelques tentatives dans ce domaine ont en quelque sorte invalidé ce que je viens de dire ! ».<br />
<br />
Avec l'essor d'outils d'IA tels que ChatGPT, il est désormais possible de décrire un programme en langage naturel et de demander au modèle d'IA de le traduire en code fonctionnel, souvent sans comprendre comment le code fonctionne. Andrej Karpathy, ancien chercheur d'OpenAI, a donné un nom à cette pratique : le « vibe coding ». Elle gagne du terrain dans les milieux technologiques. Google a même déclaré générer 25 % de son code par IA.<br />
<br />
David Farley pour sa part affirme que <a href="https://programmation.developpez.com/actu/374842/" target="_blank">le vibe coding est la pire idée dans l'ingénierie logicielle</a> en 2025. Dette technique et illusion de productivité sont des facteurs que le développeur doit intégrer de façon plus aigüe lorsqu’il opte pour l’utilisation de l’IA aux fins de codage. En gros, l’intervention de personnes avec un bagage conséquent en développement informatique demeure nécessaire comme le souligne <a href="https://programmation.developpez.com/actu/370665/-Vibe-Coding-vs-Realite-par-Cendyne/" target="_blank">Cendyne sur Developpez.com</a> :<br />
<br />
« Le &quot;Vibe Coding&quot; peut vous permettre d'obtenir un concept fonctionnel à 80 %. Mais pour produire quelque chose de fiable et de sûr, qui vaille la peine de dépenser de l'argent, vous aurez besoin d'humains expérimentés pour faire le travail difficile qui n'est pas possible avec les modèles d'aujourd'hui ».<br />
<br />
Alors que la conférence touchait à sa fin, quelqu'un a demandé à Brian Kernighan de donner un conseil aux futures générations de programmeurs. C'est une question à laquelle il a déjà répondu, et sa première réaction a été de reconnaître que « la réponse à cette question, la vraie réponse, est je ne sais pas ».<br />
<br />
Source : Brian Kernighan, cocréateur d'Unix<br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Que pensez-vous du retour d'expérience de Brian Kernighan sur le langage Rust ?<br />
:fleche: Brian Kernighan juge l’écosystème de Rust « incompréhensiblement vaste et lent ». Êtes-vous de cet avis ?<br />
:fleche: Pensez-vous que la complexité apparente de Rust est un obstacle réel à son adoption, ou bien seulement une difficulté passagère pour les nouveaux venus ?<br />
:fleche: Selon vous, un langage de programmation doit-il viser d’abord la simplicité d’usage ou la robustesse et la sécurité ?<br />
:fleche: L’avis d’un pionnier comme Brian Kernighan a-t-il encore du poids pour juger les langages modernes, ou bien son expérience est-elle trop marquée par d’autres époques ?<br />
:fleche: Selon vous, Rust pourra-t-il un jour remplacer le langage C dans les systèmes critiques, ou restera-t-il un langage de niche ?<br />
:fleche: Avez-vous déjà essayé d’apprendre Rust ? Si oui, quelles difficultés avez-vous rencontrées ?<br />
:fleche: Préférez-vous travailler avec des langages plus permissifs (comme C, Python) ou plus stricts (comme Rust, Haskell) ?<br />
:fleche: Que pensez-vous de l'état du projet Unix aujourd'hui ?<br />
<br />
<b>Voir aussi</b><br />
<br />
:fleche: <a href="https://linux.developpez.com/actu/369391/" target="_blank">Linus Torvalds clarifie sa position concernant l'intégration du code Rust dans le noyau Linux, affirmant qu'il n'est pas question d'imposer Rust aux mainteneurs qui ne souhaitent pas travailler avec ce langage</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/374842/" target="_blank">Le vibe coding est la pire idée en 2025, d'après David Farley qui jette un regard sur cette tendance à accepter du code généré par l'IA, souvent sans le comprendre</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/372204/" target="_blank">FFmpeg : « Rust est tellement bon qu'on peut être payé 20 000 $ pour le rendre aussi rapide que le C », le framework multimédia écrit en C réagi avec sarcasme à une initiative de Prossimo</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Mathis Lucas</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178970/general-developpement/programmation-systeme/rust/brian-kernighan-informaticien-renom-co-createur-d-unix-s-exprime-apres-teste-langage-rust/</guid>
		</item>
		<item>
			<title>Rust 1.89 est désormais disponible et étend la prise en charge des plateformes x86 et x86/x86_64</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2178588&amp;goto=newpost</link>
			<pubDate>Wed, 13 Aug 2025 16:20:34 GMT</pubDate>
			<description>*Rust 1.89 est désormais...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Rust 1.89 est désormais disponible et étend la prise en charge des plateformes x86 et x86/x86_64 avec de nouvelles instructions et fonctionnalités de processeur, dont des intrinsèques AVX-512 supplémentaires</font></b><br />
<br />
<b>Rust 1.89 est maintenant disponible, étendant le support des plateformes x86 et x86/x86_64 avec de nouvelles instructions et fonctionnalités de processeur, y compris des intrinsèques AVX-512 supplémentaires. Les principales nouveautés et améliorations apportées par la version 1.89.0 stable de Rust sont présentés dans ce qui suit.</b> <br />
<br />
L'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">target_feature</span> ajoute le support de SHA512, SM3, SM4, KL, et WIDEKL, donnant aux développeurs un meilleur accès aux capacités des processeurs modernes directement à partir du code Rust.<br />
<br />
La mise à jour stabilise également plusieurs API, introduit des avertissements (lints) pour les syntaxes de durée de vie (lifetime) non concordantes, et autorise le caractère underscore (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span>) comme argument dans les paramètres génériques const.<br />
<br />
La prise en charge des plateformes change également, la cible x86_64-apple-darwin passant au niveau 2, Apple et GitHub ayant réduit la prise en charge de macOS x86_64. Cette version comprend en outre des améliorations mineures du compilateur et des outils qui améliorent l'expérience globale de développement.<br />
<br />
Si vous avez une version précédente de Rust installée via <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span>, vous pouvez obtenir la version 1.89.0 avec :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">$ rustup update stable</code><hr />
</div><br />
Si vous ne l'avez pas encore, vous pouvez obtenir <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rustup</span> à partir de la page appropriée sur le site web de Rust.<br />
<br />
<b><font size="3">Arguments explicitement inférés des génériques const</font></b><br />
<br />
Rust supporte maintenant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span> comme argument des paramètres génériques const, en inférant la valeur du contexte environnant :<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;">pub</span> <span style="color: #0000ff;">fn</span> all_false&lt;<span style="color: #0000ff;">const</span> LEN: usize&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span> -&gt; <span class="br0">&#91;</span>bool; LEN<span class="br0">&#93;</span> <span class="br0">&#123;</span>
  <span class="br0">&#91;</span><span style="color: #FF0000;">false</span>; <span style="color: #cc66cc;">_</span><span class="br0">&#93;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
De la même manière que pour les règles concernant les cas où <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span> est autorisé en tant que type, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span> n'est pas autorisé en tant qu'argument des paramètres génériques const lorsqu'il se trouve dans une signature :<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"><span style="color: #808080;">// This is not allowed</span>
<span style="color: #0000ff;">pub</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">fn</span> all_false&lt;<span style="color: #0000ff;">const</span> LEN: usize&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span> -&gt; <span class="br0">&#91;</span>bool; <span style="color: #cc66cc;">_</span><span class="br0">&#93;</span> <span class="br0">&#123;</span>
  <span class="br0">&#91;</span><span style="color: #FF0000;">false</span>; LEN<span class="br0">&#93;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #808080;">// Neither is this</span>
<span style="color: #0000ff;">pub</span> <span style="color: #0000ff;">const</span> ALL_FALSE: <span class="br0">&#91;</span>bool; <span style="color: #cc66cc;">_</span><span class="br0">&#93;</span> = all_false::&lt;<span style="color: #cc66cc;">10</span>&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span>;</pre></td></tr></table></code><hr />
</div><br />
<b><font size="3">Avertissements pour les syntaxes lifetime non concordantes</font></b><br />
<br />
L'élision des lifetimes dans les signatures de fonctions est un aspect ergonomique du langage Rust, mais il peut aussi être un point d'achoppement pour les nouveaux venus comme pour les experts. Ceci est particulièrement vrai lorsque les lifetimes sont déduites dans des types où il n'est pas syntaxiquement évident qu'une durée de vie soit présente :<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: #808080;">// The returned type `std::slice::Iter` has a lifetime, </span>
<span style="color: #808080;">// but there's no visual indication of that.</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">// Lifetime elision infers the lifetime of the return </span>
<span style="color: #808080;">// type to be the same as that of `scores`.</span>
<span style="color: #0000ff;">fn</span> items<span class="br0">&#40;</span>scores: &amp;<span class="br0">&#91;</span>u8<span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt; std::slice::Iter&lt;u8&gt; <span class="br0">&#123;</span>
   scores.iter<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
Un code comme celui-ci produira désormais un avertissement par défaut :<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="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 /></div></td><td valign="top"><pre style="margin: 0">warning: hiding a lifetime that<span style="color: #339933;">'s</span> elided elsewhere is confusing
 --&gt; src/lib.rs:<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">18</span>
  |
<span style="color: #cc66cc;">1</span> | <span style="color: #0000ff;">fn</span> items<span class="br0">&#40;</span>scores: &amp;<span class="br0">&#91;</span>u8<span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt; std::slice::Iter&lt;u8&gt; <span class="br0">&#123;</span>
  |                  ^^^^^     -------------------- the same lifetime is hidden here
  |                  |
  |                  the lifetime is elided here
  |
  = help: the same lifetime is referred to <span style="color: #0000ff;">in</span> inconsistent ways, making the signature confusing
  = note: `<span style="color: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>warn<span class="br0">&#40;</span>mismatched_lifetime_syntaxes<span class="br0">&#41;</span><span class="br0">&#93;</span></span>` on by default
help: <span style="color: #0000ff;">use</span> `<span style="color: #339933;">'_</span>` <span style="color: #0000ff;">for</span> <span style="color: #0000ff;">type</span> paths
  |
<span style="color: #cc66cc;">1</span> | <span style="color: #0000ff;">fn</span> items<span class="br0">&#40;</span>scores: &amp;<span class="br0">&#91;</span>u8<span class="br0">&#93;</span><span class="br0">&#41;</span> -&gt; std::slice::Iter&lt;<span style="color: #339933;">'_</span>, u8&gt; <span class="br0">&#123;</span>
  |                                             +++</pre></td></tr></table></code><hr />
</div><br />
L'équipe Rust a d'abord tenté d'améliorer cette situation en 2018 dans le cadre du groupe de lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">rust_2018_idioms</span>, mais de nombreux commentaires sur le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elided_lifetimes_in_paths</span> ont montré qu'il s'agissait d'un marteau trop émoussé, car il avertit des durées de vie qui n'ont pas d'importance pour la compréhension de la fonction :<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="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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">use</span> std::fmt;
&nbsp;
<span style="color: #0000ff;">struct</span> Greeting;
&nbsp;
<span style="color: #0000ff;">impl</span> fmt::Display <span style="color: #0000ff;">for</span> Greeting <span class="br0">&#123;</span>
    <span style="color: #0000ff;">fn</span> fmt<span class="br0">&#40;</span>&amp;<span style="color: #FF0000;">self</span>, f: &amp;<span style="color: #0080ff;">mut</span> fmt::Formatter<span class="br0">&#41;</span> -&gt; fmt::Result <span class="br0">&#123;</span>
        <span style="color: #808080;">//                -----^^^^^^^^^ expected lifetime parameter</span>
        <span style="color: #808080;">// Knowing that `Formatter` has a lifetime does not help the programmer</span>
        <span style="color: #FF0000;">&quot;howdy&quot;</span>.fmt<span class="br0">&#40;</span>f<span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
L'équipe a alors réalisé que la confusion qu'elle souhaitait éliminer se produisait lorsque les deux règles d'inférence d'élision de la durée de vie reliaient la fonction<br />
<br />
<ol class="decimal"><li style=""> les règles d'inférence d'élision de durée de vie <i>connectent</i> une durée de vie d'entrée à une durée de vie de sortie<br /></li><li style=""> il n'est pas syntaxiquement évident qu'une durée de vie existe</li></ol><br />
Deux éléments de la syntaxe Rust indiquent l'existence d'une durée de vie : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&amp;</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #FF0000;">'</span></span> étant subdivisé en durée de vie déduite <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">'_</span></span> et en durées de vie nommées <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">'a</span></span>. Lorsqu'un type utilise une durée de vie nommée, l'élision de durée de vie ne déduira pas de durée de vie pour ce type. En utilisant ces critères, il est possible de construire trois groupes :<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p669443d1755101869/general-developpement/programmation-systeme/rust/rust-1-89-desormais-disponible-etend-prise-charge-plateformes-x86-x86-x86_64/rust-1.89.png/" border="0" alt="Nom : rust 1.89.PNG
Affichages : 9940
Taille : 20,4 Ko"  style="float: CONFIG" /></div><br />
Le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">mismatched_lifetime_syntaxes</span> vérifie que les entrées et les sorties d'une fonction appartiennent au même groupe. Pour l'exemple motivant ci-dessus, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&amp;<span class="br0">&#91;</span>u8<span class="br0">&#93;</span></span> appartient au deuxième groupe alors que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">std::slice::Iter&lt;u8&gt;</span> appartient au premier groupe. On dira que les durées de vie du premier groupe sont cachées.<br />
<br />
Parce que les durées de vie en entrée et en sortie appartiennent à des groupes différents, le lint avertira de cette fonction, réduisant ainsi la confusion sur le fait qu'une valeur a une durée de vie significative qui n'est pas visuellement évidente.<br />
<br />
Le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">mismatched_lifetime_syntaxes</span> remplace le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elided_named_lifetimes</span>, qui faisait quelque chose de similaire pour les durées de vie nommées spécifiquement.<br />
<br />
Les travaux futurs sur le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">elided_lifetimes_in_paths</span> ont pour but de le diviser en sous-lints plus ciblés afin d'avertir éventuellement sur un sous-ensemble d'entre eux.<br />
<br />
<b><font size="3">Plus de fonctionnalités cibles x86</font></b><br />
<br />
L'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">target_feature</span> prend désormais en charge les fonctionnalités cibles <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sha512</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sm3</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">sm4</span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">kl</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">widekl</span> sur x86. En outre, un certain nombre d'intrinsèques et de caractéristiques cibles <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">avx512</span> sont également prises en charge sur x86 :<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: #339933;">#</span><span style="color: #339933;"><span class="br0">&#91;</span>target_feature<span class="br0">&#40;</span>enable = <span style="color: #FF0000;">&quot;avx512bw&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></span>
<span style="color: #0000ff;">pub</span> <span style="color: #0000ff;">fn</span> cool_simd_code<span class="br0">&#40;</span><span style="color: #808080; font-weight: bold;">/* .. */</span><span class="br0">&#41;</span> -&gt; <span style="color: #808080; font-weight: bold;">/* ... */</span> <span class="br0">&#123;</span>
    <span style="color: #808080; font-weight: bold;">/* ... */</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<b><font size="3">Doctests intercompilés</font></b><br />
<br />
Les doctests seront désormais testés lors de l'exécution de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">cargo test --doc --target other_target</span>, ce qui peut entraîner un certain nombre de ruptures dues au fait que des doctests qui auraient dû échouer sont désormais testés.<br />
<br />
Les tests qui échouent peuvent être désactivés en annotant le doctest avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ignore-&lt;target&gt;</span> (docs) :<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; font-weight: bold;">/// ```ignore-x86_64</span>
<span style="color: #808080; font-weight: bold;">/// panic!(&quot;something&quot;)</span>
<span style="color: #808080; font-weight: bold;">/// ```</span>
<span style="color: #0000ff;">pub</span> <span style="color: #0000ff;">fn</span> my_function<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 />
<b><font size="3"><i>i128</i> et <i>u128</i> dans les fonctions <i>extern &quot;C&quot;</i></font></b><br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">i128</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">u128</span> ne déclenchent plus le lint <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">improper_ctypes_definitions</span>, ce qui signifie que ces types peuvent être utilisés dans des fonctions <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C&quot;</span></span> sans avertissement. Cela s'accompagne de quelques mises en garde :<br />
<br />
<ul><li style=""> Les types Rust sont ABI- et layout-compatibles avec (unsigned) <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">__int128</span> en C lorsque le type est disponible.<br /></li><li style=""> Sur les plateformes où <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">__int128</span> n'est pas disponible, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">i128</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">u128</span> ne sont pas nécessairement alignés avec un type C.<br /></li><li style=""> <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">i128</span> n'est <i>pas nécessairement</i> compatible avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_BitInt<span class="br0">&#40;</span><span style="color: #cc66cc;">128</span><span class="br0">&#41;</span></span> sur n'importe quelle plateforme, parce que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_BitInt<span class="br0">&#40;</span><span style="color: #cc66cc;">128</span><span class="br0">&#41;</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">__int128</span> peuvent ne pas avoir la même ABI (comme c'est le cas sur x86-64).</li></ul><br />
<b>Source :</b> <a rel="nofollow" href="https://blog.rust-lang.org/2025/08/07/Rust-1.89.0/" target="_blank">Rust 1.89.0</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Quel est votre avis sur le sujet ?<br />
:fleche: Trouvez-vous les nouveautés apportées par Rust 1.89 utiles et pertinentes ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/365346/La-version-1-83-du-langage-de-programmation-Rust-est-disponible-introduisant-de-nouvelles-capacites-constantes-de-nouvelles-fonctions-stables-et-des-API-stabilisees/" target="_blank">La version 1.83 du langage de programmation Rust est disponible, introduisant de nouvelles capacités constantes, de nouvelles fonctions stables et des API stabilisées</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/353963/La-version-1-76-0-de-Rust-le-langage-de-programmation-compile-multi-paradigme-est-disponible-et-apporte-une-nouvelle-documentation-sur-la-compatibilite-ABI-ainsi-que-d-autres-ameliorations/" target="_blank">La version 1.76.0 de Rust, le langage de programmation compilé multi-paradigme, est disponible, et apporte une nouvelle documentation sur la compatibilité ABI, ainsi que d'autres améliorations</a><br />
<br />
:fleche: <a href="https://rust.developpez.com/actu/364844/La-Fondation-Rust-publie-un-nouveau-document-pour-ameliorer-l-interoperabilite-entre-Rust-et-Cplusplus-apres-le-lancement-de-l-Interop-Initiative-en-fevrier-2024-avec-une-contribution-de-1-million-de-de-Google/" target="_blank">La Fondation Rust publie un nouveau document pour améliorer l'interopérabilité entre Rust et C++, après le lancement de l'« Interop Initiative » en février 2024 avec une contribution de 1 million de $ de Google</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/p669443d1755101869/general-developpement/programmation-systeme/rust/rust-1-89-desormais-disponible-etend-prise-charge-plateformes-x86-x86-x86_64/rust-1.89.png/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2138/general-developpement/programmation-systeme/rust/">Rust</category>
			<dc:creator>Anthony</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2178588/general-developpement/programmation-systeme/rust/rust-1-89-desormais-disponible-etend-prise-charge-plateformes-x86-x86-x86_64-a/</guid>
		</item>
	</channel>
</rss>
