Was ist aus Sicht der Sprachimplementierung erforderlich, um Typanbieter wie in F # 3.0 zu implementieren?

8

F # 3.0 fügt Anbieter ein , die es schaffen Grundsätzlich ist es nicht notwendig, Mappings zwischen einer DB (oder einem anderen Datenprovider) und dem Sprach- / Typsystem manuell zu schreiben oder zu generieren, da die Sprache strukturelle Informationen von der Datenbank selbst direkt mit Typanbietern abfragen kann.

Was ist aus Sicht der Sprachimplementierung notwendig, um eine solche Funktion einer Sprache hinzuzufügen?

Benötigt es ein vollständig steckbares System? Oder ist es eher wie ein versteckter Code-Generator in den Compiler integriert?

Was ist notwendig, um einen neuen Typ Provider für F # zu implementieren?

    
soc 15.09.2011, 09:12
quelle

4 Antworten

14

Technisch gesehen können Sie sich Provider vom Typ F # als "Plugins" für den Compiler vorstellen. Anstatt Zuordnungen zu generieren, fragt der Compiler den Typanbieter "Welche Typen kennen Sie?" oder "Kennst du diesen Typ?" (abhängig vom Kontext).

Das Plugin (Typ Provider) antwortet und gibt an, wie der Typ aussieht (abstrakt, ohne ihn tatsächlich zu generieren). Der Compiler arbeitet dann mit diesen Informationen und fordert den Typ-Provider später auf, Code bereitzustellen, der beim Kompilieren von Code verwendet werden soll, der diese "falschen" Typen verwendet. Es ist auch möglich, Code zu generieren (einige Beispiele tun dies, weil sie nur Werkzeuge verwenden, die bereits vorhanden sind).

Sie können also Ihren eigenen Typ Provider implementieren. Ich habe ein paar Dinge dazu im GOTO Copenhagen Talk gesagt, das aufgezeichnet und Don Syme sagte ein paar Dinge in seine früheren Gespräche (ich habe seinen BUILD noch nicht gesehen).

    
Tomas Petricek 15.09.2011, 10:29
quelle
3

Die API-Dokumentation zeigt, dass die "Typ-Provider-Schnittstelle" überraschend klein ist, siehe ITypeProvider und IProvidedNamespace , wie sowie die ganze API Namespace , in der sie sich befindet. Tomas ' Die Antwort gibt einen Überblick, und die API-Dokumentation zeigt die spezifischen Schnittstellen.

    
Brian 15.09.2011 11:02
quelle
1

Als diese Seite existiert, wird es wahrscheinlich möglich sein. Aber Sie beziehen sich auf Dinge, die derzeit in der Beta sind, so dass sich die Dinge ändern können.

Wenn ich die verfügbare Dokumentation verstehe, werden die abgeleiteten Typen stark typisiert, also nehme ich an, es ist eher eine Compiler-Sache als eine Sprach-Sache (außer vielleicht einer Syntax).

    
Sascha 15.09.2011 09:18
quelle
1

Betrachten Sie die MSDN-Dokumente für ITypeProvider und IProvidedNamespace Ich kann die Dokumentation für die tatsächlichen Methoden nicht sehen, die Sie verwenden würden, um die Typen zu definieren, AveragedTypeDefinition (x, y, z) und BereitgestellteEigenschaft (x, y, z)

vielleicht ist es das Ссылка

Ich kann anhand der Beispiele sehen, dass Sie angeben können, dass ein bereitgestellter Typ von einer bekannten Basisklasse abgeleitet ist, aber ist es möglich, anzugeben, dass ein bereitgestellter Typ eine oder mehrere vorhandene Schnittstellen implementiert? Scheint so, als ob Sie etwas tun könnten, vorausgesetzt, Sie können auch den Methodenkörper für die Implementierung bereitstellen.

    
eddwo 13.10.2011 22:57
quelle