28
décembre
2008
Abécédaire des langages de programmation: F#
décembre
2008
Un article de SpiceGuid
2 Commentaires
Pour moi, Abécédaire des langages de programmation cela voulait tacitement dire un (seul) langage par lettre.
Un précédant épisode ayant déjà traité du langage Forth c’est avec une certaine (et agréable) surprise que j’ai constaté la parution d’une nouvelle entrevue, consacrée cette fois-ci au langage F#.
L’entrevue est en langue anglaise, elle donne des informations sur le contexte culturel et technologique mais ne cherche pas à présenter le langage à ceux qui ne connaîtraient pas déjà F#. C’est pourquoi j’ai rédigé pour vous ce petit guide de lecture enrichi de quelques informations et commentaires personnels :
- F# est un langage de Microsoft Research destiné à la plateforme .Net, son originalité vient de ce qu’il apporte un style de programmation radicalement différent, axé sur un système de types plus abouti qui lui confère une expressivité jamais vue auparavant sur la plateforme .Net
- Le noyau du langage F# est compatible avec le coeur du langage Objective-Caml mais les extensions à ce noyau ne reprennent pas tout du langage Caml car elles sont conçues avec l’objectif de s’intégrer harmonieusement à l’environnement .Net. Le langage F# encourage le style de programmation propre au paradigme fonctionnel, afin d’améliorer la qualité et la productivité. Au delà de la nouvelle syntaxe il s’agit bien d’un nouveau paradigme, basé sur les valeurs immutables et totalement détaché des concepts familiers de la POO. Le premier cercle visé (finance,sciences,sûreté,simulations) n’a sans doute pas attendu F# pour goûter à la programmation fonctionnelle, cependant avec F# il peut bénéficier de toute l’interopérabilité apportée par la plateforme .Net là où les langages fonctionnels traditionnels restaient tout de même relativement limités quant à leur ouverture.
- Le langage actuellement le plus proche sur la JVM est sans doute le langage Scala de Martin Odersky.
- F# est un langage complètement intégré à la plateforme .Net, tout ce qui n’est pas directement réalisable en F# est rendu accessible par l’intermédiaire de la plateforme .Net et de ses outils. Par conséquent on peut dire que la maîtrise de F# n’est pas une fin en soi et que le programmeur F# devra interopérer avec les outils incontournables sur .Net. Il ne pourra pas non plus exclure la nécessité d’écrire du code C# de temps à autre. En clair F# prolonge C#, il ne le remplace pas.
- À partir de la livraison de Visual Studio 2010 le langage F# sera officiellement supporté par l’EDI phare de Microsoft. F# ne fera toutefois pas partie du framework .Net 4.0 mais sera un composant additionnel redistribuable qu’il suffira de référencer dans le projet pour qu’il soit automatiquement déployé sur les machines clients. Un projet « F# Power Pack » pour la création d’outils additionnels pour F# verra également le jour.
F# est exécutable dès aujourd’hui sur les plateformes .Net et Mono.
Il faut bien voir que la plateforme .net est incorrigiblement orientée objet, les choix qui ont été faits l’ont été pour maximiser l’intérêt de F# sur la plateforme .net.
Du coup la question pertinente c’est qu’est-ce que F# apporte sur .net comparativement à C#.
Même si F# apporte quelques extensions dignes d’intérêt (comme les réactives patterns) il reste relativement prisonnier d’un environnement orienté objet qui ne fait aucune concession. F# s’accorde l’opportunité d’interopérer. Malheureusement la plateforme .net ne donne pas vraiment l’occasion d’innover autant que pourrait le faire un langage fonctionnel généraliste, à tous les niveaux il faut sans cesse rester interopérable avec un modèle objet assez classique tout en respectant les (où ce que F# révèle comme étant des) limitations du CLR.
Il n’y a pas de mauvais choix faits en F#, ce qu’il y a ce sont des compromis indispensables pour une bonne intégration à la plateforme. Avec cette intégration on a la
certitude de pouvoir accéder à tous les outils commerciaux disponibles, là où les langages fonctionnels traditionnels dépassaient timidement (faute de moyens) le cadre d’une utilisation personnelle ou universitaire.
En résumé on peut faire, commercialement, tout ce qu’on ne pouvait pas faire avec OCaml sous Windows, on peut dire que c’est une opportunité et une avancée considérable pour la promotion du paradigme fonctionnel.
Je serais tenté de lire ton avis (éventuellement dans un prochain billet) sur F# par rapport à OCaml. Il est évident qu’il y a une certaine proximité, mais à quel point ? Quels sont les bons choix faits par MS pour F#, les mauvais ?
Espérons que ce langage fasse un peu de bruit pour promouvoir le style fonctionnel.