2011-01-17 6 views
38

を働いていますどのように私はかなりドンSymesのPDCビデオ http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274F#型プロバイダ、彼らは

を見た後に型プロバイダを得ることはありません、私はこれを正しく理解しています。あなたはTwitter、Excelのための準備が整えられた型のプロバイダを得ることができます...

私はカスタムXml構造を持っている場合、私は自分の型プロバイダを実装する必要がありますか?

答えて

37

世界に任意のデータエンティティがあるとします。この例では、スプレッドシートとしましょう。

また、そのデータのスキーマ/メタデータを取得/推測する方法があるとしましょう。つまり、タイプ(例:二重対文字列)とリレーションシップ(この列は「給与」を意味します)このシートは2009年6月の予算用です)。

タイププロバイダを使用すると、何らかの種類のデータエンティティ(スプレッドシートなど)を知っている種類の「シムライブラリ」をコード化し、そのライブラリをコンパイラ/ IDEツールチェーンの一部として使用できるようになります。

mySpreadsheet.ByRowAndColumn.C4 

か何か、とインテリセンス(自動補完)とツールチップ(例えば、ボブのために給与としてセルC4を記述する)と静的型付けを取得する(例えば、それは、二重または文字列または何でもそれがあることがあります)。本質的に、これは静的型オブジェクトモデルのツールアフォーダンスを提供し、さまざまな動的またはコード生成システムの使いやすさを活用し、両方でいくつかの改善を行います。 'コスト'とは、誰かがシムライブラリ( 'タイププロバイダ')を書く必要がありますが、そのようなプロバイダは非常に一般的です(例えば、ODataやExcelやWMIなど)。静的型付けと一流のツールをサポートして、膨大な量の世界データをプログラミング言語で利用できます。

アーキテクチャはオープンコンパイラであり、provider-authorsは新しい名前/型をプログラミングコンテキストに挿入できる小さなインターフェイスを実装しています。タイププロバイダは、コンパイル/ IDE/codegenの開発部分に参加するタイププロバイダとしてマークする余分なメタデータとともに、コンパイラに渡すもう1つのライブラリ(プロジェクト内の参照、-r -ed)かもしれません。

xmlの例で比較を描画するための「カスタムマッパー」が正確にわからない。

+0

いつでも、タイププロバイダが利用可能になるときの情報がありますか?ありがとう – jlezard

+0

いいえ、申し訳ありませんが、情報はまだありません。 – Brian

+0

カスタムマッパーとは、XMLファイルを強く型付けされたオブジェクトモデルにマップするライブラリを意味しました。このようなライブラリと型プロバイダライブラリの大きな違いはわかりません – terjetyl

8

これは古い質問ですが、タイププロバイダが利用できるようになりました(F#3.0がリリースされたため)。それを説明するホワイトペーパーもあります。また、マイクロソフトのコードドロップがあります。

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

5

タイププロバイダは、コンパイル時にメタデータに基づいてコードを生成することができます(効果的に)コンパイラのプラグインとして動作するようにF#の引用を使用しています。

これは、(たとえば)いくつかのJSON、データベーススキーマ、または何らかのXSDなどを読み込み、メタデータが表すドメインをモデル化するためにF#クラスを生成することを可能にします。

これらを作成する上で、私はType Providers from the Ground Upで始まる興味のあるブログ記事をいくつか書きました。

+0

タイププロバイダはILエミッタとはまったく関係ありません(生成型プロバイダは実装の詳細として1つを使用できますが、消去プロバイダはILをまったく処理しません)。 – kvb

+0

ProvidedTypes.fsから見る限り、プロバイダを消去する場合でも、メソッドやプロパティを引用符で指定した呼び出しコードは、アセンブリに追加されるときにILに変換されます。もちろん、タイプ自体はありません。 – mavnn

+0

私はそれをさらに調べる時間がありませんが、それは私を驚かせるでしょう - 生のAPIは引用の周りに設計されており、[est | fs](https://github.com/fsharp/fsharp/blob/master/src/fsharp/est.fs)。プロバイダからの引用を受け取り、それらをラップし、 'convertProvidedExpressionToExprAndWitness'で適切なASTノードに変換します。 [typreIns.fs](https://github.com/fsharp/fsharp/blob/master/src/fsharp/typrelns.fs)にあります。 – kvb