한국   대만   중국   일본 
F Sharp ? Wikipedia Aller au contenu

F Sharp

Un article de Wikipedia, l'encyclopedie libre.

F#
Logo.

Date de premiere version 2002
Paradigme Fonctionnel , imperatif , oriente objet
Auteur Don Syme, Microsoft Research
Developpeur F# Software Foundation
Derniere version 8.0 (14 novembre 2023)
Typage Statique , fort , nominatif , infere
Influence par OCaml , C# , Haskell
Implementations .NET Framework , Mono
Licence Licence Apache Voir et modifier les données sur Wikidata
Site web fsharp.org
Extension de fichier fs, fsi, fsx et fsscript Voir et modifier les données sur Wikidata

F# est un langage de programmation fonctionnel , imperatif et oriente objet pour la plate-forme .NET . F# est developpe par Microsoft Research et son noyau est derive du langage OCaml , avec lequel il est fortement compatible. Ces deux langages de programmation font partie de la meme famille que les langages ML .

Ce langage a ete concu specifiquement pour la plate-forme .NET , donc fortement oriente-objet. Depuis novembre 2010, Microsoft a mis a la disposition de tous les bibliotheques core et son compilateur F#, sous la licence Apache 2 [ 2 ] .

Presentation [ modifier | modifier le code ]

F# est un langage fortement type utilisant l' inference de types . Ce mecanisme delegue le typage des variables et des fonctions au compilateur. Neanmoins, le langage permet au developpeur d'indiquer explicitement le type a la declaration. Integre a l'ecosysteme .NET, F# supporte les types primitifs de la plate-forme ainsi que ses objets. De plus il etend le systeme de types et permet de faire la distinction entre les types dits immuables et ceux dits modifiables. Les objets sont consideres comme des types modifiables (en place), et sont utilises pour la mise en place du modele de programmation objet au sein du langage. Les types immuables sont utilises principalement lorsque l'on programme de maniere fonctionnelle ; la modification d'un type immuable cree une nouvelle instance sans pour autant ecraser l'ancienne.

Comme la plupart des langages derives de ML , F# utilise par defaut le mecanisme de l' evaluation stricte . Cependant il peut, a l'instar de Haskell , mettre en œuvre l' evaluation paresseuse des expressions grace a l'utilisation du mot-cle 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 ] .

Un n-uplet represente une collection de n valeurs, n ≥ 0. La valeur de n correspond a l'arite du n-uplet. Le type unit represente le n-uplet vide et dont l'unique valeur possible est (). Ce type est utilise pour typer des fonctions qui ne prennent pas en entree de valeur et/ou n'en renvoient pas. Le 3-uplet (ou triplet) est represente par (A, B, C) , ou A, B, et C peuvent etre de n'importe quel type. Un n-uplet peut etre utilise pour stocker des valeurs uniquement lorsque le nombre de valeurs est connu au moment du codage et reste constant tout au long de l'execution.

Un enregistrement est une version specialisee des n-uplets ou les champs sont nommes, comme dans { Nom:string; Age:int } . Les enregistrements peuvent etre crees de la facon suivante : { Nom="Toto"; Age=1 } . Le mot-cle with est utilise pour creer une copie de l'enregistrement : { r with Nom="CD" } cree un nouvel enregistrement a partir d'un precedent enregistrement nomme r et dont il change la valeur du champ Nom.

Le type liste est une liste chainee qui peut se representer soit a l'aide de la notation head::tail (compose a l'aide de l'operateur :: , l'equivalent de l'operateur cons des langages Lisp / Scheme ), soit dans une notation abregee : [item1; item2; item3] . Une liste vide est notee [] .

La derniere sorte de type algebrique de donnees , les types sommes (qui sont, fonctionnellement, des equivalents types des unions du langage C) peuvent etre definis comme une somme de n'importe lequel des types immuables evoques precedemment. Par exemple,

type
 A
 =
 
   |
 ConstructorX
 of
 string

   |
 ConstructorY
 of
 int

peut contenir des valeurs instanciees soit par ConstructorX soit par ConstructorY . Le type des valeurs retournees par les constructeurs peut lui aussi etre defini.

Exemples [ modifier | modifier le code ]

Voici le traditionnel hello 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 :

let
 rec
 factorielle
 n
 =

    match
 n
 with

    |
 0
 ->
 1

    |
 _
 ->
 n
 *
 factorielle
 (
n
 -
 1
)

Cette variante, avec un accumulateur, met en œuvre la recursion terminale , une optimisation commune parmi les langages fonctionnels :

let
 factorielle
 n
 =

    let
 rec
 factorielle_recursive
 n
 accu
 =

        match
 n
 with

        |
 0
 ->
 accu

        |
 _
 ->
 factorielle_recursive
 (
n
 -
 1
)
 (
n
 *
 accu
)

    factorielle_recursive
 n
 1

Annexes [ modifier | modifier le code ]

Articles connexes [ modifier | modifier le code ]

Liens externes [ modifier | modifier le code ]

Bibliographie [ modifier | modifier le code ]

  • (en) Antonio Cisternino , Adam Granicz et Don Syme , Expert F# 3.0 , Apress, , 3 e   ed. , 638  p. ( ISBN   978-1-4302-4650-3 )
  • (en) Robert Pickering , Foundations of F# , Apress, , 360  p. ( ISBN   978-1-59059-757-6 )
  • (en) Jon Harrop ( pref.  Don Syme), F# for scientists , Wiley-Interscience, , 368  p. ( ISBN   978-0-470-24211-7 )
  • (en) Tomas Petricek et Jon Skeet ( pref.  Mads Torgersen), Functional Programming for the Real World : With Examples in F# and C# , Manning Publications, , 529  p. ( ISBN   978-1-933988-92-4 )
  • (en) Chris Smith , Programming F# : A comprehensive guide for writing simple code to solve complex problems , O'Reilly , , 2 e   ed. , 471  p. ( ISBN   978-1-4493-2029-4 )
  • (en) Ted Neward , Aaron Erickson , Talbott Crowell et Rick Minerich , Professional F# 2.0 , Wrox, , 432  p. ( ISBN   978-0-470-52801-3 )

References [ modifier | modifier le code ]

  1. ≪  Release 16.8  ≫, (consulte le )
  2. David Civera, ≪ Le langage F# devient open source ≫ , tom's HARDWARE , 8 novembre 2010.
  3. (en) ≪  F# Language Overview  ≫ (consulte le ) .