1 points par GN⁺ 2024-11-11 | 1 commentaires | Partager sur WhatsApp
  • Pourquoi F# 9 est important : F# 9 introduit un large ensemble d’améliorations qui rendent les programmes plus sûrs, plus robustes et plus performants

Types de référence nullable

  • F# a été conçu pour éviter null, mais null peut s’introduire lors de l’interfaçage avec des bibliothèques .NET écrites en C#
  • Désormais, F# permet de traiter de façon sûre au niveau du typage les types de référence pour lesquels null est une valeur valide
  • Exemples :
    • let notAValue: string | null = null
    • let len (str: string | null) = match str with | null -> -1 | NonNull s -> s.Length

Propriétés .Is* des discriminated unions

  • Les discriminated unions disposent désormais de propriétés générées automatiquement pour chaque cas
  • Cela permet de vérifier si une valeur correspond à un cas particulier
  • Par exemple, il est possible d’écrire person.contact.IsEmail

Les partial active patterns peuvent renvoyer un bool au lieu de unit option

  • Auparavant, les partial active patterns renvoyaient Some () en cas de correspondance, sinon None
  • Désormais, ils peuvent aussi renvoyer un bool

Préférence pour les méthodes d’extension plutôt que les propriétés intégrées quand des arguments sont fournis

  • F# résout désormais les méthodes d’extension définies avec le même nom qu’une propriété intégrée du type
  • Cela correspond à un modèle présent dans certaines bibliothèques .NET

Prise en charge des computation expressions à corps vide

  • F# prend désormais en charge les computation expressions vides
  • Exemple : let xs = seq { }
  • Cela entraîne l’appel de la méthode Zero du builder

Les directives de préprocesseur acceptent des arguments non textuels

  • Auparavant, les directives de préprocesseur destinées au compilateur n’acceptaient que des arguments de type chaîne passés entre guillemets
  • Désormais, elles peuvent recevoir des arguments de tout type
  • Exemple : #nowarn 0070

Extension de la directive #help dans fsi

  • La directive #help de F# Interactive affiche désormais la documentation de l’objet ou de la fonction fournie
  • Elle peut être utilisée sans guillemets
  • Exemple : #help List.map;;

Prise en charge du préfixe FS dans #nowarn pour désactiver des avertissements

  • Auparavant, écrire #nowarn "FS0057" produisait un message indiquant un numéro d’avertissement invalide
  • Désormais, le numéro d’avertissement est accepté même avec son préfixe

Avertissement en cas d’utilisation de l’attribut TailCall sur une fonction non récursive ou une valeur liée par let

  • F# émet désormais un avertissement si l’attribut [<TailCall>] est utilisé au mauvais endroit
  • Cela n’a pas d’impact sur le code, mais peut prêter à confusion pour les lecteurs

Application des cibles d’attributs

  • Le compilateur applique désormais correctement les AttributeTargets aux valeurs let, fonctions, déclarations de cas d’union, constructeurs implicites, structures et classes
  • Cela peut éviter des bugs, par exemple oublier d’ajouter un argument unit à des tests Xunit

Mise à jour de la bibliothèque standard

Fonctions Random pour les collections

  • Les modules List, Array et Seq reçoivent de nouvelles fonctions pour l’échantillonnage aléatoire et le mélange
  • Une version qui utilise une instance partagée de Random, implicite et thread-safe
  • Une version qui reçoit une instance Random en argument
  • Une version qui reçoit une fonction de randomisation personnalisée
  • Les fonctions disponibles sont Shuffle, Choice, Choices et Sample

Constructeur sans paramètre de CustomOperationAttribute

  • Il devient plus simple de créer des opérations personnalisées pour les builders de computation expression
  • Il n’est plus nécessaire de nommer explicitement l’opération (dans la plupart des cas, le nom correspond à celui de la méthode)

Prise en charge des collection expressions C# pour F# List et Set

  • Lorsqu’on utilise F# List et Set depuis C#, il est désormais possible de les initialiser avec des collection expressions
  • Exemple : FSharpSet<int> mySet = [ 1, 2, 3 ];

Gains de productivité pour les développeurs

Récupération du parseur

  • Des améliorations continues ont été apportées à la récupération du parseur
  • Les outils continuent ainsi de fonctionner pendant l’édition du code, même lorsqu’il n’est pas toujours syntaxiquement correct

Diagnostics

  • F# 9 comprend de nombreux messages de diagnostic nouveaux ou améliorés
  • Notamment pour les méthodes d’override ambiguës, l’utilisation de membres abstraits, ou les unions avec des champs dupliqués

Visibilité réelle

  • La manière dont F# génère les assemblys posait un problème : les membres private étaient écrits comme internal dans l’IL
  • Il est désormais possible de corriger ce comportement avec l’option du compilateur --realsig+

Améliorations des performances

Vérification d’égalité optimisée

  • La vérification d’égalité est désormais plus rapide et réduit les allocations mémoire

Partage de champs dans les discriminated unions de type struct

  • Si plusieurs cas d’une DU struct possèdent des champs de même nom et de même type, ils peuvent partager le même emplacement mémoire
  • Cela réduit l’empreinte mémoire de la structure

Optimisation des plages d’entiers

  • Le compilateur génère désormais du code optimisé pour davantage d’instances des expressions start..finish et start..step..finish
  • Auparavant, l’optimisation ne s’appliquait que lorsque le type était int/int32 et que le pas était la constante 1 ou -1
  • Désormais, tous les types entiers et d’autres valeurs de pas sont aussi optimisés

Optimisation de for x in xs -> ... dans les compréhensions List/Array

  • for x in xs -> ... a été optimisé dans les compréhensions List et Array
  • En particulier pour Array, avec jusqu’à 10x de gain de vitesse et une réduction des allocations à environ 1/3 ou 1/4

Améliorations des outils

Live Buffer dans Visual Studio

  • C’était auparavant une fonctionnalité optionnelle, mais elle est désormais activée par défaut
  • Le compilateur en arrière-plan de l’IDE fonctionne maintenant avec le buffer vivant du fichier
  • Il n’est plus nécessaire d’enregistrer le fichier sur disque pour appliquer les modifications

Analyseur et correctif pour supprimer les parenthèses inutiles

  • Des parenthèses supplémentaires sont parfois utilisées pour la clarté, mais elles ne sont parfois que du bruit
  • Visual Studio propose désormais un correctif de code pour les supprimer

Prise en charge des visualiseurs personnalisés pour F# dans Visual Studio

  • Les visualiseurs du débogueur de Visual Studio fonctionnent désormais dans les projets F#

Affichage de l’aide de signature au milieu d’un pipeline

  • Auparavant, aucune aide de signature n’était fournie lorsqu’une fonction au milieu d’un pipeline avait déjà reçu des paramètres curryfiés complexes, comme des lambdas
  • Désormais, une infobulle de signature est affichée pour le paramètre suivant

1 commentaires

 
GN⁺ 2024-11-11
Avis Hacker News
  • F# est ma langue préférée depuis que je l’ai découverte à l’université. Elle dispose de fonctionnalités en avance sur C#, et même si C# les adopte aussi, cela reste difficile à cause des problèmes de compatibilité. F# reste un excellent langage, compatible avec l’écosystème .NET, et peut offrir des performances équivalentes à C# avec moins de boilerplate

  • F# est l’un des meilleurs produits que Microsoft ait sortis depuis Excel, et il a transformé .NET en plateforme raisonnable

  • Nous avons beaucoup investi dans le projet Phosphor basé sur F#, mais nous avons fini par tout réécrire en Typescript et en Rust. Nous avons essayé de préserver la sûreté de typage entre différentes technologies via la bibliothèque Fable, mais les problèmes d’interopérabilité entre bibliothèques et la gestion des dépendances étaient difficiles. Je pense que F# n’est adapté que lorsqu’il existe une séparation frontend/backend traditionnelle

    • Parmi les technologies que nous utilisons en interne actuellement, les plus intéressantes sont la bibliothèque Effect et Moonbit. Moonbit ressemble à une version moderne de F# sans dépendance à MS/.NET, et il est prometteur comme langage adapté à un monde centré sur l’IA
  • Dans un cours de cryptographie où l’on pouvait choisir un langage utilisant .NET, les devoirs que j’ai écrits en F# étaient plus lisibles que ceux des autres. Je ne peux pas utiliser davantage F#, car presque 100 % du travail en data science se fait en Python

  • Travailler en F# me manque, mais je continue de suivre les mises à jour. Les outils étaient assez bons malgré la taille de la communauté et le manque d’intérêt de Microsoft. Le plus gros problème était la précision de la couverture des tests de code

  • J’ai récemment essayé F#, et venant de Python, j’aime le fait de pouvoir utiliser un REPL. J’aimerais créer un petit projet de backend web cet hiver pour mieux connaître le langage et l’écosystème. J’ai entendu de bonnes choses sur Oxpecker pour la partie http

  • Je me demande comment fonctionne la gestion des versions de F#. Il y a beaucoup d’améliorations de qualité, mais cela ne semble pas nécessiter de changement de version majeure. Je me demande si c’est pour aligner la numérotation sur .NET9

  • Je me demande où en est F# comme alternative à C# pour créer des applications GUI sous Windows, et s’il existe des entreprises qui l’utilisent dans ce but

  • Je n’ai jamais essayé F#, mais j’ai trouvé un site qui semble être une bonne ressource : fsharpforfunandprofit.com

  • Je me demande quel est l’état de F# sur Linux/MacOS. Je voudrais savoir si c’est réservé à Windows, ou si cela donne l’impression d’un langage pleinement pris en charge