F Sharp

F Sharp
Page d'aide sur l'homonymie Pour les articles homonymes, voir F.
F#
Apparu en 2002 (dernière révision en 2010)
Auteur Don Syme, Microsoft Research
Dernière version 2.0 (12 avril 2010) [+/−]
Paradigme fonctionnel, impératif, orienté objet
Typage statique, fort, nominatif, inféré
Influencé par OCaml, C#, Haskell
Implémentations .NET Framework, Mono
Site web Microsoft Research : F#

F# est un langage de programmation fonctionnel, impératif et orienté objet pour la plate-forme .NET. F# est développé par Microsoft Research dont le noyau est dérivé du langage OCaml (avec lequel il est fortement compatible). Ces deux langages de programmation font partie de la famille des langages ML.

F# est aussi performant que les langages C#, C++/CLI [réf. nécessaire]. C'est un langage qui a été conçu spécifiquement pour la plate-forme .NET et est 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.

Sommaire

Présentation

F# est un langage fortement typé utilisant l'inférence de type. 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 plateforme ainsi que ses objets. De plus il étend le système de type 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 tous les langages dérivé de ML, F# utilise par défaut le mécanisme de l'évaluation stricte. Cependant il peut, à l'instar d'Haskell, 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[1].

Un n-uplet représente une collection de n valeurs, n >= 0. La valeur 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.

Un enregistrement est une version spécialisée des n-uplets où les champs sont nommés, comme par exemple 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.

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

La dernière sorte de type algébrique de données, les types 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,

type A = 
   | ConstructorX of string
   | ConstructorY of int

peut contenir des valeurs instanciées soit par ConstructorX, soit par ConstructorY. Le type des valeurs retournés par les constructeurs peut lui aussi être défini.

Exemples

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 factorial n =
    match n with
    | 0 -> 1
    | _ -> n * factorial (n - 1)

Cette variante met en œuvre la récursion terminale, une optimisation commune parmi les langages fonctionnels :

let factorial n =
    let rec recursive_factorial n acc =
        match n with
        | 0 -> acc
        | _ -> recursive_factorial (n - 1) (n * acc)
    recursive_factorial n 1

Voir aussi

Notes

  1. F# Language Overview. Consulté le 2007-12-14

Livres

  • (en) Expert F# 2.0 - Antonio Cisternino, Adam Granicz, Don Syme - 2010 - Apress
  • (en) Foundations of F# - Robert Pickering - 2007 - Apress
  • (en) F# for scientists - Jon Harrop - 2008 - Wiley-Interscience
  • (en) Functional Programming for the Real World: With Examples in F# and C# - Tomas Petricek, Jon Skeet - 2009 - Manning Publications
  • (en) Programming F# - Chris Smith - 2010 - O'Reilly
  • (en) Professional F# 2.0 - Ted Neward, Aaron Erickson, Talbott Crowell, Rick Minerich - 2010 - Wrox

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article F Sharp de Wikipédia en français (auteurs)

Игры ⚽ Поможем написать курсовую

Regardez d'autres dictionnaires:

  • Sharp (surname) — Sharp is a surname. Sharp is cognate to the German dd. scharf . It is also akin to words which have the sense of scraping, e.g. Latin la. scrobis ditch , Russian ru. skresti to scrape .* Abraham Sharp (1651 1742), English schoolmaster,… …   Wikipedia

  • Sharp — Sharp, a. [Compar. {Sharper}; superl. {Sharpest}.] [OE. sharp, scharp, scarp, AS. scearp; akin to OS. skarp, LG. scharp, D. scherp, G. scharf, Dan. & Sw. skarp, Icel. skarpr. Cf. {Escarp}, {Scrape}, {Scorpion}.] 1. Having a very thin edge or fine …   The Collaborative International Dictionary of English

  • Sharp practice — Sharp Sharp, a. [Compar. {Sharper}; superl. {Sharpest}.] [OE. sharp, scharp, scarp, AS. scearp; akin to OS. skarp, LG. scharp, D. scherp, G. scharf, Dan. & Sw. skarp, Icel. skarpr. Cf. {Escarp}, {Scrape}, {Scorpion}.] 1. Having a very thin edge… …   The Collaborative International Dictionary of English

  • Sharp — K.K Rechtsform Kabushiki kaisha ISIN JP3359600008[1] Gründung …   Deutsch Wikipedia

  • Sharp Corporation — シャープ株式会社 Lema Be Sharp, From Sharp Minds Come Sharp Products Tipo Pública (TYO …   Wikipedia Español

  • Sharp Corporation — シャープ株式会社 Тип Публичная компания Листинг на бирже TYO …   Википедия

  • SHARP —  Pour l’article homophone, voir Sharpe. Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

  • sharp — [ʆɑːp ǁ ʆɑːrp] adjective a sharp increase, fall etc is very sudden and very big: • a sharp rise in interest rates • Unemployment generally brings a sharp fall in income. • The group reported a sharp decline in full year profits. sharply adverb …   Financial and business terms

  • sharp — [shärp] adj. [ME < OE scearp, akin to Ger scharf, ON skarpr < IE * (s)kerb(h) < base * (s)ker , to cut > SHEAR, HARVEST, L caro, flesh] 1. suitable for use in cutting or piercing; having a very thin edge or fine point; keen 2. having… …   English World dictionary

  • Sharp Nemesis NXT — at Mojave Role Racing aircraft Manufa …   Wikipedia

  • sharp — sharp, keen, acute can all mean having a fine point or edge, but it is in several of their extended senses that they are most likely to come into comparison. As applied to persons or their qualities, especially of intellect, all three can… …   New Dictionary of Synonyms

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”