39 votes

Les fournisseurs de types F#, comment fonctionnent-ils ?

Je ne comprends pas bien les fournisseurs de type après avoir regardé la vidéo de Don Symes sur les pdc. http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

Est-ce que je comprends bien. Vous pouvez obtenir des fournisseurs de type prêts à l'emploi pour Twitter, Excel...

Si j'ai une structure Xml personnalisée, dois-je mettre en œuvre mon propre fournisseur de types pour cette structure et en quoi cela diffère-t-il de la création de mon propre mappeur personnalisé ?

40voto

Brian Points 82719

Disons que vous avez une entité de données arbitraire dans le monde. Pour cet exemple, disons que c'est une feuille de calcul.

Disons également que vous disposez d'un moyen d'obtenir/inférer des schémas/métadonnées pour ces données, c'est-à-dire que vous pouvez connaître les types (par exemple, double ou chaîne), les relations (par exemple, cette colonne signifie "salaire") et les métadonnées (par exemple, cette feuille concerne le budget de juin 2009).

Les fournisseurs de types vous permettent de coder une sorte de "bibliothèque de shim" qui connaît un certain type d'entité de données (par exemple, une feuille de calcul) et d'utiliser cette bibliothèque dans le cadre de la chaîne d'outils du compilateur/de l'IDE afin de pouvoir écrire du code tel que

mySpreadsheet.ByRowAndColumn.C4

ou quelque chose comme ça, et obtenir l'Intellisense (autocomplétion) et les infobulles (par exemple, décrire la cellule C4 comme Salaire pour Bob) et le typage statique (par exemple, faire en sorte que ce soit un double ou une chaîne ou quoi que ce soit). Essentiellement, cela vous donne les possibilités d'outils des modèles d'objets à typage statique avec la facilité d'utilisation de divers systèmes dynamiques ou de génération de code, avec quelques améliorations sur les deux. Le "coût" est que quelqu'un doit écrire la bibliothèque de shim (le "fournisseur de type"), mais beaucoup de ces fournisseurs sont très généraux (par exemple, un qui parle OData ou Excel ou WMI ou autre) et donc une petite poignée de bibliothèques de fournisseurs de type rend de grandes quantités de données du monde disponibles dans votre langage de programmation avec un typage statique et un support d'outils de première classe.

L'architecture est un compilateur ouvert, où les auteurs-fournisseurs mettent en œuvre une petite interface qui leur permet d'injecter de nouveaux noms/types dans le contexte de programmation. Un fournisseur de type peut être simplement une autre bibliothèque que vous passez au compilateur (une référence dans votre projet, -r -ed), avec des métadonnées supplémentaires qui le marquent comme un fournisseur de types qui participe aux parties compilation/IDE/codegen du développement.

Je ne sais pas exactement ce qu'est un "mappeur personnalisé" dans votre exemple xml pour établir une comparaison.

9voto

Roopesh Shenoy Points 2377

Je comprends qu'il s'agit d'une vieille question, mais les fournisseurs de types sont désormais disponibles (depuis la sortie de F# 3.0). Il existe un livre blanc qui l'explique également. Et nous disposons d'un code déposé par Microsoft qui vous permet de voir ce qui se passe sous le capot.

http://www.infoq.com/news/2012/09/fsharp-type-providers

5voto

mavnn Points 3359

Les fournisseurs de types utilisent les citations de F# pour agir (effectivement) comme des plugins de compilateur qui peuvent générer du code basé sur les méta-données au moment de la compilation.

Cela vous permet (par exemple) de lire un fichier JSON, un schéma de base de données, un XSD ou autre, puis de générer des classes F# pour modéliser le domaine que ces métadonnées représentent.

Pour ce qui est de leur création, j'ai écrit quelques articles de blog qui pourraient vous intéresser, à commencer par les suivants Les fournisseurs de type depuis le début .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X