Article écrit en 2007, mis à jour en septembre 2009

Présentation de F#

F# est un langage dérivé de Caml et conçu spécifiquement pour la plateforme .NET. C'est un langage fonctionnel (et incitant ce mode de programmation), entièrement orienté objet (même les entiers sont des objets et peuvent avoir des méthodes) et supportant la programmation impérative.

Il est dérivé de Caml : il est même possible d'écrire des programmes qui puissent être compilés à la fois par F# et par Caml. C'était par exemple le cas du compilateur F# lui-même, au départ. Malgré cette proximité, il s'agit bien de deux langages distincts. Certaines fonctionnalités de Caml ne sont pas acceptées par F# ; à l'inverse, F# possède de nombreux ajouts par rapport à Caml.

F# a été créé spécifiquement pour la plateforme .NET. Il bénéficie d'une bonne intégration (contrairement à certains langages qui ont seulement été portés pour .NET). Cela lui permet aussi d'accéder à une très large bibliothèque, de pouvoir s'utiliser avec l'ASP, avec Silverlight, avec XNA et la XBox, etc.

C'est un vrai langage fonctionnel et il possède toutes les fonctionnalités que l'on attend dans ce paradigme. Il permet de créer ses structures de données de façon très concise et puissante. Il possède un typage statique et fort, et peut inférer les types. Cela réduit considérablement le débogage et permet de faire du code sûr.

F# est un langage très concis et très expressif. Sa verbosité est comparable à ce que l'on trouve dans Python ou Ruby. Il est très souple, peut utiliser du typage dynamique lorsque c'est nécessaire, peut utiliser l'évaluation paresseuse quand il le faut, possède un système de filtrage par motif (pattern matching) extensible, permet de manipuler des flux de manière poussée (via les compréhensions et un système de monades), etc.

Au final, F# est un langage innovant et possédant de nombreuses fonctionnalités uniques. Il est issu de la recherche de chez Microsoft. Il est encore jeune, évolue très rapidement, mais il est déjà stable comme en témoigne son intégration dans Visual Studio.

J'ai testé de nombreux langages ces dernières années, tant dans le monde fonctionnel (Caml, Haskell, Lisp...) que celui de l'objet (C++, C#, Java...). J'ai aussi essayé plusieurs langages de scripts (Ruby, Perl, Python...), mais F# est désormais mon langage de choix. Ce langage étant encore très peu connu dans la francophonie, je vais essayer de le présenter et de l'expliquer sur ce site.

Sources d'information (en anglais)