Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

F Sharp

Un article de Wikipédia, l'encyclopédie libre.
Page d’aide sur l’homonymie

Pour les articles homonymes, voirF.

Titre correct : « F# ».

En raison de limitations techniques, la typographie souhaitable du titre n’a pu être restituée correctement.

F#
Logo.

Date de première version2002
ParadigmeFonctionnel,impératif,orienté objet
AuteurDon Syme,Microsoft Research
DéveloppeurF# Software Foundation
Dernière version10.0 (12 novembre 2025)
TypageStatique,fort,nominatif,inféré
Influencé parOCaml,C#,Haskell
Implémentations.NET Framework,Mono
LicenceLicence ApacheVoir et modifier les données sur Wikidata
Site webfsharp.org
Extension de fichierfs, fsi, fsx et fsscriptVoir et modifier les données sur Wikidata
modifier 

F# est unlangage de programmationfonctionnel,impératif etorienté objet pour la plate-forme.NET. F# est développé parMicrosoft Research et son noyau est dérivé du langageOCaml, avec lequel il est fortement compatible. Ces deux langages de programmation font partie de la même famille que leslangages 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èquescore et son compilateur F#, sous lalicence Apache 2[2].

Présentation

[modifier |modifier le code]

F# est un langage fortement typé utilisant l'inférence de types. Ce mécanisme délègue le typage des variables et des fonctions au compilateur. Néanmoins, le langage permet au développeur d'indiquer explicitement le type à la déclaration. Intégré à l'écosystème .NET, F# supporte les types primitifs de la plate-forme ainsi que ses objets. De plus il étend le système de types et permet de faire la distinction entre les types dits immuables et ceux dits modifiables. Les objets sont considérés comme des types modifiables (en place), et sont utilisés pour la mise en place du modèle de programmation objet au sein du langage. Les types immuables sont utilisés principalement lorsque l'on programme de manière fonctionnelle ; la modification d'un type immuable crée une nouvelle instance sans pour autant écraser l'ancienne.

Comme la plupart des langages dérivés deML, F# utilise par défaut le mécanisme de l'évaluation stricte. Cependant il peut, à l'instar deHaskell, mettre en œuvre l'évaluation paresseuse des expressions grâce à l'utilisation du mot-clélazy. Pour la programmation fonctionnelle, il fournit plusieurs constructions et un ensemble de types immuables : les n-uplets, des enregistrements, des types sommes et des listes[3].

Unn-uplet représente une collection de n valeurs, n ≥ 0. La valeur de n correspond à l'arité du n-uplet. Le type unit représente le n-uplet vide et dont l'unique valeur possible est (). Ce type est utilisé pour typer des fonctions qui ne prennent pas en entrée de valeur et/ou n'en renvoient pas. Le 3-uplet (ou triplet) est représenté par(A, B, C), où A, B, et C peuvent être de n'importe quel type. Un n-uplet peut être utilisé pour stocker des valeurs uniquement lorsque le nombre de valeurs est connu au moment du codage et reste constant tout au long de l'exécution.

Unenregistrement est une version spécialisée des n-uplets où les champs sont nommés, comme dans{ Nom:string; Age:int }. Les enregistrements peuvent être créés de la façon suivante :{ Nom="Toto"; Age=1 }. Le mot-cléwith est utilisé pour créer une copie de l'enregistrement :{ r with Nom="CD" } crée un nouvel enregistrement à partir d'un précédent enregistrement nommé r et dont il change la valeur du champ Nom.

Letype liste est une liste chainée qui peut se représenter soit à l'aide de la notationhead::tail (composé à l'aide de l'opérateur::, l'équivalent de l'opérateur cons des langagesLisp/Scheme), soit dans une notation abrégée :[item1; item2; item3]. Une liste vide est notée[].

La dernière sorte detype algébrique de données, lestypes sommes (qui sont, fonctionnellement, des équivalents typés des unions du langage C) peuvent être définis comme une somme de n'importe lequel des types immuables évoqués précédemment. Par exemple,

typeA=|ConstructorXofstring|ConstructorYofint

peut contenir des valeurs instanciées soit parConstructorX soit parConstructorY. Le type des valeurs retournées par les constructeurs peut lui aussi être défini.

Exemples

[modifier |modifier le code]

Voici le traditionnelhello world :

(* Ceci est un commentaire *)printfn"Hello World!"

Cet autre exemple traditionnel chez les langages fonctionnels a pour objectif de montrer la concision que l'on peut obtenir avec ce type de langages :

letrecfactoriellen=matchnwith|0->1|_->n*factorielle(n-1)

Cette variante, avec un accumulateur, met en œuvre larécursion terminale, une optimisation commune parmi les langages fonctionnels :

letfactoriellen=letrecfactorielle_recursivenaccu=matchnwith|0->accu|_->factorielle_recursive(n-1)(n*accu)factorielle_recursiven1

Annexes

[modifier |modifier le code]

Articles connexes

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]

Bibliographie

[modifier |modifier le code]

Références

[modifier |modifier le code]
  1. « https://learn.microsoft.com/en-us/dotnet/fsharp/whats-new/fsharp-10 »
  2. David Civera,« Le langage F# devient open source »,tom's HARDWARE, 8 novembre 2010.
  3. (en) « F# Language Overview »(consulté le).


v ·m
Concurrents
Déclaratifs
Fonctionnels
Impératifs
Orientés objet
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=F_Sharp&oldid=230829333 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2026 Movatter.jp