私はLuaのためにLinqのようなものを作ることを考えていました、そして私はLinqがどのように機能するかについて一般的な考えを持っていますが、良い記事があるかどうか、または誰かがC#がLinqを可能にする方法を説明できるかどうか疑問に思いました
注:エンドユーザーの構文ではなく、コードバインディングなどを生成する方法など、舞台裏を意味します。
LINQは非常に多くの異なるものであるため、質問に答えるのは困難です。たとえば、C#に固執すると、次のことが関係します。
IEnumerable<T>
)でより多くの電力を効果的に得ることができます。var
)は、主に匿名型を操作するときに使用され、型の名前を明示的に「話す」ことができない静的に型付けされた言語を維持します。明らかに、これらの多くはLINQで使用されるだけでなく、さまざまなLINQテクノロジがそれらに依存します。
あなたが興味を持っている側面についてより多くの指標を与えることができれば、私たちはより詳細を提供することができるかもしれません。
LINQ to Objectsを効果的に実装することに興味がある場合は、数週間前にDDDで行ったReadingの講演に興味があるかもしれません。基本的には1時間でできるだけ多くのLINQtoObjectsを実装します。私たちはそれの終わりまでには完全にはほど遠いものでしたが、あなたがしなければならないことの種類(そしてバッファリング/ストリーミング、イテレータブロック、クエリ式の変換など)についてかなり良いアイデアを与えるはずです。ビデオはまだアップしていません(そして私はまだダウンロード用のコードをアップしていません)が、興味があれば、skeet@pobox.comにメールを送ってください。アップしたときにお知らせします。 。(私もおそらくそれについてブログを書きます。)
Mono(部分的に?)はLINQを実装し、オープンソースです。多分あなたはそれらの実装を調べることができますか?
この記事を読む:
おそらく、私のLINQforR6RSスキームはいくつかの洞察を提供します。
これは、意味的には100%、構文的にはLINQとほぼ同じですが、「、」の代わりに「then」を使用する追加の並べ替えパラメーターを除きます。
いくつかのルール/仮定:
私の実装は、いくつかのコア手順に依存しています。
構造の残りの部分はすべて、マクロを使用して構築されます。
バインディングは、衛生を確保するためにバインドされた識別子でタグ付けされたリストに格納されます。バインディングは抽出され、式が発生するたびにローカルでリバウンドされます。
私は自分のブログで進捗状況を追跡しました。これにより、考えられる問題についての洞察が得られる可能性があります。
デザインのアイデアについては、Linq を生み出した研究プロジェクトであるc omegaをご覧ください。Linq は、視点に応じて、より実用的な、または骨抜きにされた c omega のバージョンです。
Matt Warren のブログには、すべての答え (および、有利なスタートを切るための IQueryable プロバイダーの実装のサンプル) があります。