<?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 - F#</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur la programmation en langage fonctionnel F#]]></description>
		<language>fr</language>
		<lastBuildDate>Wed, 03 Jun 2026 16:34:12 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 - F#</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Microsoft annonce que le langage de programmation F# 10 est disponible</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180520&amp;goto=newpost</link>
			<pubDate>Tue, 18 Nov 2025 11:42:02 GMT</pubDate>
			<description>*Microsoft annonce que le...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Microsoft annonce que le langage de programmation F# 10 est disponible avec .NET 10 et Visual Studio 2026, apportant des améliorations axées sur la clarté, la cohérence et les performances</font></b><br />
<br />
<b>F# 10 est désormais disponible avec .NET 10 et Visual Studio 2026. Cette version est une version améliorée axée sur la clarté, la cohérence et les performances, apportant des améliorations modestes mais significatives qui rendent votre code quotidien plus lisible et plus robuste. Avec F# 10, Microsoft poursuit sa démarche visant à simplifier le langage et à améliorer ses performances.</b><br />
<br />
F# est un langage de programmation fonctionnel, impératif et orienté objet pour la plate-forme .NET. F# est développé par Microsoft Research et son noyau est dérivé du langage OCaml, avec lequel il est fortement compatible. Ces deux langages de programmation font partie de la même famille que les langages ML. Ce langage a été conçu spécifiquement pour la plate-forme .NET, donc fortement orienté-objet. Depuis novembre 2010, Microsoft a mis à la disposition de tous les bibliothèques core et son compilateur F#, sous la licence Apache 2. <br />
<br />
Récemment, <a href="https://dotnet.developpez.com/actu/377608/Microsoft-annonce-la-derniere-version-de-son-framework-logiciel-NET-10-apportant-des-ameliorations-au-compilateur-JIT-des-ameliorations-NativeAOT-ainsi-que-l-optimisation-du-runtime/" target="_blank">Microsoft a annoncé la dernière version de son framework logiciel .NET 10</a>, apportant des améliorations au compilateur JIT, des améliorations NativeAOT, ainsi que l'optimisation du runtime. Il s'agit d'une version à support à long terme (LTS) qui devrait recevoir des mises à jour jusqu'en novembre 2028. Selon Microsoft, .NET 10 est la version la plus productive, moderne, sécurisée, intelligente et performante de .NET à ce jour.<br />
<br />
F# 10 est désormais disponible avec .NET 10 et Visual Studio 2026. Cette version est une version améliorée axée sur la clarté, la cohérence et les performances, apportant des améliorations modestes mais significatives qui rendent votre code quotidien plus lisible et plus robuste.<br />
<br />
Avec F# 10, Microsoft poursuit sa démarche visant à simplifier le langage et à améliorer ses performances. Les principales améliorations ergonomiques comprennent la suppression des avertissements dans un certain périmètre, une syntaxe plus cohérente pour les expressions de calcul et une meilleure prise en charge des accesseurs de propriétés automatiques. Cette version comprend également une mise à niveau de l'infrastructure afin d'accélérer la compilation et les outils interactifs sous la forme d'un nouveau cache de subsomption de types.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p671885d1763469720/autres-langages/langages-fonctionnels/fsharp/microsoft-annonce-langage-programmation-fsharp-10-disponible/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 20123
Taille : 31,9 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">Améliorations du langage</font></b><br />
<br />
<b><font size="3">1. Suppression des avertissements dans une portée donnée</font></b><br />
<br />
La première fonctionnalité que je souhaite présenter pour F# 10 est très demandée : la possibilité de supprimer les avertissements dans des sections de code arbitraires. Le compilateur prend désormais en charge la directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#warnon</span>, qui s'associe à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#nowarn</span></span> pour activer ou désactiver les avertissements dans une plage de code spécifique.<br />
<br />
Un exemple :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #808080;">// We know f is never called with a None.</span>
<span style="color: #0000ff;">let</span> f <span class="br0">&#40;</span>Some a<span class="br0">&#41;</span> =    <span style="color: #808080;">// creates warning 25, which we want to suppress</span>
    <span style="color: #808080;">// 2000 loc, where the incomplete match warning is beneficial</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Il est possible d'ajouter une directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#nowarn</span> 25</span> juste au-dessus de la définition de la fonction, mais sans une directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#warnon 25</span> correspondante, cela désactivera l'avertissement FS0025 dans le reste du fichier, risquant ainsi de supprimer des problèmes légitimes ailleurs.<br />
<br />
Avec F# 10, vous pouvez délimiter explicitement la section, en appliquant la suppression des avertissements à une portée aussi étroite qu'une seule ligne :<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;">#nowarn</span> <span style="color: #cc66cc;">25</span>
<span style="color: #0000ff;">let</span> f <span class="br0">&#40;</span>Some x<span class="br0">&#41;</span> =    <span style="color: #808080;">// FS0025 suppressed</span>
#warnon <span style="color: #cc66cc;">25</span>
    <span style="color: #808080;">// FS0025 enabled again</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
À l'inverse, si un avertissement est désactivé globalement (par exemple, via un indicateur du compilateur), vous pouvez l'activer localement avec <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#warnon</span>. Cette directive s'appliquera alors jusqu'à ce qu'une directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#nowarn</span></span> correspondante soit rencontrée ou jusqu'à la fin du fichier.<br />
<br />
<b>Compatibilité :</b><br />
<br />
Cette fonctionnalité s'accompagne de plusieurs modifications qui améliorent la cohérence des directives <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#nowarn</span></span>/<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#warnon</span>, ce qui se traduit par un comportement plus prévisible. Cependant, il s'agit de modifications importantes qui pourraient affecter votre base de code lorsque vous passerez à F# 10. Voici quelques exemples parmi les plus susceptibles de se produire :<br />
<br />
- Les directives d'avertissement multilignes et vides ne sont plus autorisées.<br />
- Les espaces entre <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">nowarn</span> ne sont plus autorisés.<br />
- Les chaînes à triple guillemet, interpolées ou littérales ne peuvent pas être utilisées pour les numéros d'avertissement.<br />
<br />
Le comportement des scripts est également affecté. Dans les versions précédentes, une directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">#nowarn</span></span> placée n'importe où dans un script s'appliquait à l'ensemble de la compilation. Désormais, son comportement dans les scripts correspond à celui des fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.fs</span>, s'appliquant uniquement jusqu'à la fin du fichier ou jusqu'à une directive <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">#warnon</span> correspondante.<br />
<br />
<b><font size="3">2. Modificateurs d'accès sur les accesseurs de propriétés automatiques</font></b><br />
<br />
Un modèle fréquent dans la programmation orientée objet consiste à créer un état lisible publiquement mais modifiable en privé. Avant F# 10, pour y parvenir, il fallait utiliser une syntaxe de propriété explicite avec des champs de support, ce qui ajoutait beaucoup de code standard :<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;">type</span><span style="color: #800000;"> Ledger</span><span class="br0">&#40;</span><span class="br0">&#41;</span> =
    <span style="color: #339933;">[&lt;DefaultValue&gt;]</span> <span style="color: #0000ff;">val</span> <span style="color: #0000ff;">mutable</span> <span style="color: #0000ff;">private</span> _Balance: <span style="color: #0080ff;">decimal</span>
    <span style="color: #0000ff;">member</span> this.Balance <span style="color: #0000ff;">with</span> <span style="color: #0000ff;">public</span> get<span class="br0">&#40;</span><span class="br0">&#41;</span> = this._Balance <span style="color: #0000ff;">and</span> <span style="color: #0000ff;">private</span> set v = this._Balance &lt;- v</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Avec F# 10, vous pouvez appliquer des modificateurs d'accès distincts à des accesseurs de propriétés individuels. Cela vous permet de spécifier différents niveaux d'accès pour le getter et le setter d'une propriété en ligne, ce qui permet d'utiliser des modèles courants tels que des états lisibles publiquement mais modifiables en privé sans code standard verbeux.<br />
<br />
Vous pouvez désormais réécrire ce qui précède 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 /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">type</span><span style="color: #800000;"> Ledger</span><span class="br0">&#40;</span><span class="br0">&#41;</span> =
    <span style="color: #0000ff;">member</span> <span style="color: #0000ff;">val</span> Balance = <span style="color: #cc66cc;">0</span>m <span style="color: #0000ff;">with</span> <span style="color: #0000ff;">public</span> get, <span style="color: #0000ff;">private</span> set</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>À noter :</b><br />
<br />
Vous pouvez placer un modificateur d'accès soit avant le nom de la propriété (s'appliquant aux deux accesseurs), soit avant les accesseurs individuels, mais pas les deux simultanément.<br />
<br />
De plus, cette fonctionnalité ne s'étend pas aux fichiers de signature (.fsi). La signature correcte pour l'exemple <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Ledger</span> ci-dessus serait :<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;">type</span><span style="color: #800000;"> Ledger</span><span class="br0">&#40;</span><span class="br0">&#41;</span> =
    <span style="color: #0000ff;">member</span> Balance : <span style="color: #0080ff;">decimal</span>
    <span style="color: #0000ff;">member</span> <span style="color: #0000ff;">private</span> Balance : <span style="color: #0080ff;">decimal</span> <span style="color: #0000ff;">with</span> set</pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b><font size="3">3. Paramètres facultatifs ValueOption</font></b><br />
<br />
Les paramètres facultatifs peuvent désormais utiliser une représentation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ValueOption&lt;<span style="color: #800000; font-style:italic;">'T</span>&gt;</span> basée sur une structure. En appliquant l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">[&lt;Struct&gt;]</span></span> à un paramètre facultatif, vous pouvez demander au compilateur d'utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ValueOption&lt;<span style="color: #800000; font-style:italic;">'T</span>&gt;</span> au lieu du type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">option</span> basé sur une référence. Cela évite une allocation de mémoire pour le wrapper d'option, ce qui est avantageux dans le code où les performances sont critiques.<br />
<br />
Les versions précédentes de F# utilisaient toujours le type <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">option</span> alloué dans le tas pour les paramètres facultatifs, même lorsque le paramètre était absent. Dans les scénarios à haut débit ou la création d'objets en boucle interne, cela imposait une pression inutile sur le GC. Les développeurs travaillant sur du code sensible aux performances n'avaient aucun moyen d'éviter ces allocations :<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;">// Prior to F# 10: always uses reference option</span>
<span style="color: #0000ff;">type</span> X<span class="br0">&#40;</span><span class="br0">&#41;</span> =
    <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">member</span> M<span class="br0">&#40;</span>?x : <span style="color: #0080ff;">string</span><span class="br0">&#41;</span> =
        <span style="color: #0000ff;">match</span> x <span style="color: #0000ff;">with</span>
        | Some v -&gt; printfn <span style="color: #FF0000;">&quot;Some %s&quot;</span> v
        | None -&gt; printfn <span style="color: #FF0000;">&quot;None&quot;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Vous pouvez désormais utiliser l'attribut <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">[&lt;Struct&gt;]</span></span> sur un paramètre facultatif pour tirer parti de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ValueOption</span> basé sur une structure et éliminer les allocations lorsque l'argument est absent :<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;">type</span> X<span class="br0">&#40;</span><span class="br0">&#41;</span> =
    <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">member</span> M<span class="br0">&#40;</span><span style="color: #339933;">[&lt;Struct&gt;]</span> ?x : <span style="color: #0080ff;">string</span><span class="br0">&#41;</span> =
        <span style="color: #0000ff;">match</span> x <span style="color: #0000ff;">with</span>
        | ValueSome v -&gt; printfn <span style="color: #FF0000;">&quot;ValueSome %s&quot;</span> v
        | ValueNone -&gt; printfn <span style="color: #FF0000;">&quot;ValueNone&quot;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Choisissez cette option basée sur une structure pour les petites valeurs ou les types fréquemment construits où la pression d'allocation est importante. Utilisez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">option</span> par défaut basée sur les références lorsque vous vous appuyez sur des aides de correspondance de modèles existantes, que vous avez besoin d'une sémantique de référence ou lorsque la différence de performances est négligeable. Cette fonctionnalité renforce la parité avec d'autres constructions du langage F# qui prennent déjà en charge <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ValueOption</span>.<br />
<br />
<b><font size="3">4. Prise en charge des appels en queue dans les expressions de calcul</font></b><br />
<br />
Les constructeurs d'expressions de calcul (par exemple, les coroutines ou autres constructeurs implémentés avec des machines à états reprenables) peuvent désormais opter pour des optimisations d'appels en queue. Lors du désucrage, le compilateur reconnaît lorsqu'une expression telle que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">return!</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">yield!</span></span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">do!</span></span> apparaît en position de queue et, lorsque le constructeur fournit des méthodes spéciales, achemine ces appels vers les points d'entrée optimisés.<br />
<br />
Si un générateur implémente :<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ReturnFromFinal</span>, le compilateur l'appellera pour un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">return!</span></span> en queue (en revenant à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ReturnFrom</span> si la variante finale est absente).<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">YieldFromFinal</span>, le compilateur l'appellera pour un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">yield!</span></span> en queue (en revenant à <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">YieldFrom</span> s'il est absent).<br />
<br />
- Pour un <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">do!</span></span> terminal, le compilateur préférera <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ReturnFromFinal</span>, puis <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">YieldFromFinal</span>, avant de revenir à la voie <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Bind</span> normale.<br />
<br />
Ces membres <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*Final</span> sont facultatifs et existent uniquement pour permettre l'optimisation : ils permettent aux constructeurs de court-circuiter les continuations ou de renoncer prématurément aux ressources. Les constructeurs qui ne fournissent pas ces membres conservent leur sémantique existante inchangée.<br />
<br />
Exemples :<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">coroutine <span class="br0">&#123;</span>
    <span style="color: #0000ff;">yield!</span> subRoutine<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #808080;">// tail position -&gt; YieldFromFinal if available</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><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 />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">coroutine <span class="br0">&#123;</span>
    <span style="color: #0000ff;">try</span>
        <span style="color: #0000ff;">yield!</span> subRoutine<span class="br0">&#40;</span><span class="br0">&#41;</span> <span style="color: #808080;">// not tail -&gt; normal YieldFrom</span>
    <span style="color: #0000ff;">finally</span> <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 />
<b>Compatibilité :</b><br />
<br />
Cette modification peut être préjudiciable si un constructeur définit déjà des membres avec ces noms. Dans la plupart des cas, elle est rétrocompatible : les constructeurs existants continuent de fonctionner sans modification lorsqu'ils sont compilés avec F# 10. Les anciens compilateurs ignoreront simplement les nouvelles méthodes <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*Final</span>, de sorte que les constructeurs qui doivent rester compatibles avec les versions antérieures du compilateur ne doivent pas supposer que ces méthodes seront invoquées.<br />
<br />
<b><font size="3">5. Liaisons typées dans les expressions de calcul sans parenthèses</font></b><br />
<br />
Une incohérence de longue date dans la syntaxe des annotations de type pour les liaisons d'expressions de calcul a été résolue. Vous pouvez désormais ajouter des annotations de type aux liaisons <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">let!</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">use!</span></span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">and</span>!</span> sans mettre l'identifiant entre parenthèses.<br />
<br />
Les versions précédentes de F# exigeaient des parenthèses pour les annotations de type dans les liaisons d'expressions de calcul. Par exemple, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">let!</span> <span class="br0">&#40;</span>x: <span style="color: #0080ff;">int</span><span class="br0">&#41;</span> = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span></span> était valide, mais la forme plus naturelle <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">let!</span> x: <span style="color: #0080ff;">int</span> = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span></span> provoquait une erreur. Cela obligeait les développeurs à utiliser des parenthèses visuellement encombrantes, même pour des annotations de type simples :<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">async <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let!</span> <span class="br0">&#40;</span>a: <span style="color: #0080ff;">int</span><span class="br0">&#41;</span> = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">and</span>! <span class="br0">&#40;</span>b: <span style="color: #0080ff;">int</span><span class="br0">&#41;</span> = fetchB<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">use!</span> <span class="br0">&#40;</span>d: MyDisposable<span class="br0">&#41;</span> = acquireAsync<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> a + b
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Vous pouvez désormais écrire des annotations de type sans parenthèses, conformément au style des liaisons <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">let</span></span> ordinaires :<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">async <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let!</span> a: <span style="color: #0080ff;">int</span> = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">and</span>! b: <span style="color: #0080ff;">int</span> = fetchB<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">use!</span> d: MyDisposable = acquireAsync<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> a + b
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b><font size="3">6. Autoriser _ dans les liaisons use!</font></b><br />
<br />
Les versions précédentes de F# rejetaient le modèle de suppression dans les liaisons <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">use!</span></span>, même lorsque la valeur de la ressource elle-même n'était jamais référencée. Cette incohérence avec les liaisons <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">use</span></span> ordinaires obligeait les développeurs à créer des identifiants jetables tels que <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">_ignored</span> uniquement pour satisfaire le compilateur.<br />
<br />
Le modèle de suppression (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span>) fonctionne désormais dans les liaisons <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">use!</span></span> au sein des expressions de calcul. F# 10 vous permet d'utiliser <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">_</span> directement lors de la liaison de ressources asynchrones dont les valeurs ne sont nécessaires que pour la gestion de la durée de vie, sans être obligé de fournir un identifiant nommé.<br />
<br />
Vous pouvez désormais utiliser directement le modèle discard, ce qui clarifie votre intention et correspond au comportement de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">use</span></span> :<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">counterDisposable <span class="br0">&#123;</span>
    <span style="color: #0000ff;">use!</span> _ = <span style="color: #0000ff;">new</span> Disposable<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #808080;">// logic</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b><font size="3">7. Rejet des modules pseudo-imbriqués dans les types</font></b><br />
<br />
La validation structurelle a été renforcée dans cette version afin de rejeter le placement trompeur de modules dans les types. F# 10 génère désormais une erreur lorsqu'une déclaration <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">module</span></span> apparaît indentée au même niveau structurel dans une définition de type, ce qui évite une source courante de confusion concernant la portée des modules.<br />
<br />
Les versions précédentes de F# acceptaient les déclarations <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">module</span></span> indentées dans les définitions de types, mais ces modules étaient en fait créés comme des éléments frères du type plutôt que d'être imbriqués dans celui-ci. Ce modèle d'indentation induisait souvent les développeurs en erreur en leur faisant croire qu'ils avaient créé un module imbriqué, ce qui entraînait un comportement de portée inattendu :<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;">type</span> U =
    | A
    | B
    <span style="color: #0000ff;">module</span> M = <span style="color: #808080;">// Silently created a sibling module, not nested</span>
        <span style="color: #0000ff;">let</span> f <span class="br0">&#40;</span><span class="br0">&#41;</span> = <span class="br0">&#40;</span><span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Désormais, ce modèle génère l'erreur FS0058, vous obligeant à clarifier votre intention avec un placement correct des modules :<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;">type</span> U =
    | A
    | B
&nbsp;
<span style="color: #0000ff;">module</span> M =
    <span style="color: #0000ff;">let</span> f <span class="br0">&#40;</span><span class="br0">&#41;</span> = <span class="br0">&#40;</span><span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b><font size="3">8. Avertissement de dépréciation pour seq omis</font></b><br />
<br />
Un avertissement de dépréciation apparaît désormais pour les expressions de séquence nues qui omettent le constructeur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">seq</span></span>. F# 10 vous avertit lorsque vous utilisez des accolades de plage nues telles que <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span class="br0">&#123;</span> <span style="color: #cc66cc;">1.</span>.<span style="color: #cc66cc;">10</span> <span class="br0">&#125;</span></span> ou des formes similaires, vous encourageant à utiliser la forme explicite <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">seq</span> <span class="br0">&#123;</span> ... <span class="br0">&#125;</span></span> pour plus de cohérence avec le modèle d'expression de calcul plus large.<br />
<br />
Historiquement, F# autorisait une syntaxe spéciale « sequence comprehension lite » dans laquelle le mot-clé <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">seq</span></span> pouvait être omis. Cela divergeait du fonctionnement des autres expressions de calcul et créait une incohérence dans le langage :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span class="br0">&#123;</span> <span style="color: #cc66cc;">1.</span>.<span style="color: #cc66cc;">10</span> <span class="br0">&#125;</span> |&gt; List.ofSeq  <span style="color: #808080;">// implicit sequence</span></code><hr />
</div><br />
<br />
<br />
Désormais, le compilateur signale ce modèle et encourage l'utilisation de la forme explicite qui clarifie la sémantique :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0080ff;">seq</span> <span class="br0">&#123;</span> <span style="color: #cc66cc;">1.</span>.<span style="color: #cc66cc;">10</span> <span class="br0">&#125;</span> |&gt; List.ofSeq</code><hr />
</div><br />
<br />
<br />
Il s'agit actuellement d'un avertissement, et non d'une erreur, ce qui vous laisse le temps de mettre à jour votre base de code. La forme explicite <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0080ff;">seq</span></span> améliore la clarté du code et sa cohérence avec d'autres expressions de calcul. Les versions futures de F# pourraient en faire une erreur, nous vous recommandons donc d'adopter la syntaxe explicite lors de la mise à jour du code.<br />
<br />
<b><font size="3">9. Application des cibles d'attributs</font></b><br />
<br />
La validation des cibles d'attributs sera appliquée dans cette version à toutes les constructions du langage. F# 10 vérifie que les attributs ne sont appliqués qu'à leurs cibles prévues en vérifiant les <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">AttributeTargets</span> dans les valeurs liées à let, les fonctions, les cas d'union, les constructeurs implicites, les structures et les classes.<br />
<br />
Les versions précédentes de F# autorisaient silencieusement l'application incorrecte d'attributs à des cibles incompatibles. Cela provoquait des bogues subtils, tels que l'ignorance des attributs de test lorsque vous oubliez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span class="br0">&#40;</span><span class="br0">&#41;</span></span> pour créer une fonction ou l'inefficacité des directives d'analyseur, ce qui entraînait des divergences CI déroutantes :<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: #339933;">[&lt;Fact&gt;]</span>
<span style="color: #0000ff;">let</span> <span style="color: black;">``this is not a function``</span> =  <span style="color: #808080;">// Silently ignored, not a test!</span>
    Assert.True<span class="br0">&#40;</span><span style="color: #0000ff;">false</span><span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Désormais, le compilateur applique les cibles d'attributs et génère un avertissement lorsque les attributs sont mal appliqués :<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;">[&lt;Fact&gt;]</span>
<span style="color: #808080;">//^^^^ - warning FS0842: This attribute cannot be applied to property, field, return value. Valid targets are: method</span>
<span style="color: #0000ff;">let</span> <span style="color: black;">``works correctly``</span> =
    Assert.True<span class="br0">&#40;</span><span style="color: #0000ff;">true</span><span class="br0">&#41;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
<b>Compatibilité :</b><br />
<br />
Il s'agit d'un changement radical qui peut révéler des problèmes auparavant silencieux dans votre base de code. Les erreurs précoces empêchent les problèmes de découverte de tests et garantissent que les attributs tels que les analyseurs et les décorateurs prennent effet comme prévu.<br />
<br />
<br />
<b><font size="3">Amélioration de FSharp.Core – prise en charge de and! dans les expressions de tâche</font></b><br />
<br />
Cette version apporte une seule amélioration à la bibliothèque FSharp.Core : la prise en charge de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">and</span>!</span> dans l'expression de calcul <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">task</span>.<br />
<br />
L'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">task</span> est un moyen courant de travailler avec des flux de travail asynchrones dans F#, en particulier lorsque l'interopérabilité avec C# est requise. Cependant, jusqu'à récemment, il n'existait aucun moyen concis d'attendre plusieurs tâches simultanément dans une expression de calcul.<br />
<br />
Vous avez peut-être commencé avec un code qui attendait les calculs de manière séquentielle :<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;">// Awaiting sequentially</span>
task <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let!</span> a = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">let!</span> b = fetchB<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> combineAB a b
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Si vous vouliez ensuite le modifier pour les attendre simultanément, vous utilisiez généralement <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Task.WhenAll</span> :<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;">// Use explicit Task combinator to await concurrently</span>
task <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let</span> ta = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">let</span> tb = fetchB<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">let!</span> results = Task.WhenAll<span class="br0">&#40;</span><span class="br0">&#91;</span>| ta; tb |<span class="br0">&#93;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> combineAB ta.Result tb.Result
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Avec F# 10, vous pouvez à la place écrire une version plus idiomatique en utilisant <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">and</span>!</span> :<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">task <span class="br0">&#123;</span>
    <span style="color: #0000ff;">let!</span> a = fetchA<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">and</span>! b = fetchB<span class="br0">&#40;</span><span class="br0">&#41;</span>
    <span style="color: #0000ff;">return</span> combineAB a b
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<br />
Cela combine la sémantique du deuxième extrait avec la simplicité du premier.<br />
<br />
<br />
<b><font size="3">Performances et outils</font></b><br />
<br />
<b>Cache de subsomption de types</b><br />
<br />
Cette version introduit également un nouveau cache de subsomption de types afin d'accélérer la vérification des types et d'améliorer la réactivité de l'EDI, en particulier dans les projets comportant des hiérarchies de types complexes. Dans F# 10, le compilateur mémorise les résultats des vérifications de relations de types, ce qui réduit les calculs redondants et améliore les performances globales du compilateur et des outils.<br />
<br />
Auparavant, le compilateur F# effectuait de manière répétée des vérifications de subsomption coûteuses lorsqu'il traitait des hiérarchies de types volumineuses, telles que celles impliquant de nombreuses primitives numériques ou de nombreuses implémentations d'interface. Cela pouvait entraîner une latence notable lors de l'inférence de types et des opérations de l'IDE, en particulier dans les solutions volumineuses ou lors de longues sessions d'édition, consommant ainsi davantage de CPU et de mémoire.<br />
<br />
Désormais, le nouveau cache de subsomption de types stocke les résultats de ces vérifications. Lorsque le compilateur doit déterminer si un type peut être utilisé à la place d'un autre, il consulte d'abord le cache. Cette mémorisation évite de recalculer les mêmes relations de types, ce qui accélère la compilation et rend IntelliSense plus réactif.<br />
<br />
Aucune modification du code n'est nécessaire pour bénéficier de cette amélioration ; les gains de performances sont automatiques.<br />
<br />
<br />
<b>Meilleur rognage par défaut</b><br />
<br />
F# 10 supprime un problème de longue date lié au rognage des assemblages F# : vous n'avez plus besoin de gérer manuellement un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ILLink.Substitutions.xml</span> uniquement pour supprimer les gros blobs de ressources de métadonnées F# (données de signature/optimisation) qui ne sont pas nécessaires lors de l'exécution dans l'application finale.<br />
<br />
Lorsque vous publiez avec le rognage activé (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">PublishTrimmed=<span style="color: #0000ff;">true</span></span>), la compilation F# génère désormais automatiquement un fichier de substitutions qui cible les ressources F# réservées aux outils. Résultat : une sortie plus petite par défaut, moins de code standard et un risque de maintenance en moins.<br />
<br />
Si vous avez besoin d'un contrôle manuel complet, vous pouvez toujours ajouter votre propre fichier de substitutions. La génération automatique peut être désactivée à l'aide d'une propriété, comme suit : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;DisableILLinkSubstitutions&gt;<span style="color: #0000ff;">false</span>&lt;/DisableILLinkSubstitutions&gt;</span>.<br />
<br />
<br />
<b>Compilation parallèle en préversion</b><br />
<br />
Une mise à jour intéressante pour les utilisateurs de F# qui cherchent à réduire les temps de compilation de leurs projets est la stabilisation progressive des fonctionnalités de compilation parallèle. À partir de .NET 10, trois fonctionnalités : la vérification des types basée sur les graphes, la génération parallèle de code IL et l'optimisation parallèle sont regroupées sous la propriété de projet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ParallelCompilation</span>.<br />
<br />
Actuellement, ce paramètre est activé par défaut pour les projets qui utilisent <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">LangVersion=Preview</span>, et ils prévoient de l'activer pour tout le monde dans .NET 11. Toutefois, si vous souhaitez désactiver cette fonctionnalité tout en continuant à profiter des autres fonctionnalités de prévisualisation, définissez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">ParallelCompilation</span> sur false.<br />
<br />
<br />
<b>Mode de vérification de type uniquement pour les scripts</b><br />
<br />
F# est un excellent langage de script, et nous voulons nous assurer que les outils prennent également en charge ce cas d'utilisation. C'est pourquoi ils ont étendu l'indicateur de compilation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--typecheck-only</span> afin qu'il fonctionne également pour les scripts <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.fsx</span>, où il est sans doute le plus utile. Dans F# 9 et les versions antérieures, il n'existait aucun moyen simple de valider la syntaxe et l'exactitude des types d'un script sans exécuter le code, ce qui produisait souvent des effets secondaires.<br />
<br />
Avec cette version, vous pouvez simplement utiliser l'indicateur <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--typecheck-only</span> lors de l'appel de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">fsi</span> pour vérifier le type du script sans l'exécuter. Cette fonctionnalité facilite l'ajout de portes CI qui permettront de détecter la détérioration des scripts dans votre base de code.<br />
<br />
<b>Avertissement concernant un problème connu</b> : il existe un bug connu qui limite considérablement les avantages de l'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">--typecheck-only</span> avec des scripts qui en incluent d'autres via #load. Dans ce cas, la vérification des types se terminera prématurément après le traitement du premier fichier source chargé. Cependant, le correctif a déjà été implémenté et sera inclus dans la prochaine version 10.0.200.<br />
<br />
<br />
<b>Conclusion</b><br />
<br />
F# est développé dans le cadre d'une collaboration entre la Fondation .NET, la Fondation F# Software, leurs membres et d'autres contributeurs, dont Microsoft. La communauté F# est impliquée à toutes les étapes de l'innovation, de la conception, de la mise en œuvre et de la livraison. Le travail sur F# 11 est déjà en cours : amélioration des performances, amélioration du langage et mise à niveau des outils.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://devblogs.microsoft.com/dotnet/introducing-fsharp-10/" target="_blank">Présentation de F# 10</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette présentation 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://dotnet.developpez.com/actu/364576/F-9-est-disponible-avec-des-ameliorations-pour-rendre-les-programmes-plus-surs-plus-resistants-et-plus-performants-notamment-les-types-de-reference-annulables-et-la-mise-a-jour-de-la-bibliotheque-standard/" target="_blank">F# 9 est disponible avec des améliorations pour rendre les programmes plus sûrs, plus résistants et plus performants, notamment les types de référence annulables et la mise à jour de la bibliothèque standard</a><br />
<br />
:fleche: <a href="https://visualstudio.developpez.com/actu/377594/Microsot-annonce-que-Visual-Studio-2026-est-disponible-l-EDI-apporte-des-ameliorations-en-termes-de-performances-une-experience-utilisateur-repensee-et-une-avancee-dans-le-developpement-base-sur-l-IA/" target="_blank">Microsot annonce que Visual Studio 2026 est disponible : l'EDI apporte des améliorations en termes de performances, une expérience utilisateur repensée et une avancée dans le développement basé sur l'IA</a><br />
<br />
:fleche: <a href="https://dotnet.developpez.com/actu/377739/Microsoft-presente-les-nouvelles-fonctionnalites-de-C-14-qui-devraient-permettre-aux-developpeurs-C-de-beneficier-de-certaines-des-ameliorations-de-performances-offertes-par-NET-10/" target="_blank">Microsoft présente les nouvelles fonctionnalités de C# 14 qui devraient permettre aux développeurs C# de bénéficier de certaines des améliorations de performances offertes par .NET 10</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/p671885d1763469720/autres-langages/langages-fonctionnels/fsharp/microsoft-annonce-langage-programmation-fsharp-10-disponible/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1046/autres-langages/langages-fonctionnels/fsharp/">F#</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180520/autres-langages/langages-fonctionnels/fsharp/microsoft-annonce-langage-programmation-fsharp-10-disponible/</guid>
		</item>
	</channel>
</rss>
