2011-10-25 7 views
5

だから私は、F#を学習し、これを見たのですよ:どのようにF#タイププロバイダは、コンパイル時に型をチェックしますか

F# type providers, how do they work

と、この:

http://msdn.microsoft.com/en-us/library/hh361033(v=vs.110).aspx

私はF#にはあまり流暢ではありませんが、(おそらくは不完全な)私の理解は、型プロバイダは外部データソースへのある種の静的型安全なアクセスを提供することを意図しています。

しかし、どうやってこれを行うのですか?データソースは外部であるため、データソースのスキーマを照会するのに手間がかからず、コンパイル時に(そしてコード補完のために)何かを照会するような方法はありません。

未知のデータソースをいくつかのスキーマ(型チェック可能)にキャストするためのキャストが必要ですが、データソースキャストすることはできません。

答えて

7

あなたはいくつかの良い質問をする:

  1. は、タイププロバイダの接触コンパイル時に外部データソースしていますか?

    はい。 FSharp.Data.TypeProviders名前空間のプロバイダの基本的な考え方は、それぞれがコードジェネレータをラップすることです。だから、C#やその他の言語で同じことをするには、明示的なコード生成ステップが必要です(コンパイル時に/前にデータソースに連絡する)。 F#では、プロセスは少しシームレスですが、原理的には非常に似ています。型プロバイダによってアクセスされるデータソースは、スキーマをクエリする比較的効率的な方法を公開し、型プロバイダには、コンパイル時の往復回数を最小限に抑えるロジックが含まれています。

  2. スキーマが変更された場合、またはデータベースがオフラインの場合、または...

    一般的に言えば、これは型プロバイダーに依存しますが、組み込み型プロバイダーはユーザーにいくつかのオプションを公開します。特に、データベースがアクセス不能になった場合に備えて、プロバイダがスキーマのローカルコピーをキャッシュする必要があることを示すことも可能です(あるいは、プロバイダがライブデータを強制的に実行するようにすることもできます。ミスマッチが発生する)。

    また、これは他の言語のコード生成アプローチとあまり変わりありません。スキーマがあなたのもとから変更された場合、高速で失敗することができます(コードを再生成し、 (例えば、コードを再生成しないようにして、実行時に一連の行が並んでいることを期待して)混乱させようとすることができます。

これらの回答は、ビルトインプロバイダに適用されますが、プロバイダ・ライターとして誰かが確かに私は私が概説されてきたアプローチは、外部の大多数のために理にかなっていると思いますが、別の何かを(行うことを選択することができますデータソース)。

+1

私はあなたを信じていますが、それでも信じがたいと感じます。つまり、Visual Studioは実際には、コンパイル(およびコード補完)プロセス中にhttp要求とデータベースクエリとこれらのすべてを送信してスキーマを取得しますか?私はしばらくの間プログラミングしてきましたが、私はこの種のことを他の場所では見たことがないと思います。通常、外部データストアとのインターフェイスには常に暗黙のキャストがあります。F#に特有のものではなく、一般的なケースでこのコンセプトをどこからでも調べることができますか? –

+5

約3分、http://channel9.msdn.com/events/BUILD/BUILD2011/SAC-904T(25:30から)をご覧ください。はい、あなたが 'を押すと。' Visual StudioはIDEで別のスキーマを取得してIntellisenseの自動補完機能を提供するためにWebリクエストを送信しています。それは斬新かもしれないし、それはかなり素晴らしいです:) – Brian

関連する問題