3

Antlr を使用して DSL を作成し、文法ファイルからレクサーとパーサーを生成しました。パーサーは、計算可能なさまざまなノード (関数ノードなど) を含む抽象構文ツリーを生成します。関数ノードのコードでは、バインドを処理します。つまり、関数のライブラリから一致する関数名とパラメーターの型をチェックします。関数のルックアップを最適化するために、ここにいくつかの単純なキャッシュがあります (2 つの int で A+B を呼び出すと、次に plus 演算子を使用するときに 2 つの int になる可能性が高くなります)。

最近、DLR について読んでいますが、このタイプのスクリプト言語の実装に対応するように設計されているようです。一見したところ、パーサーまたはレクサーを生成するようには見えませんが、実装の他の部分を支援しているようです。DLR の使用に切り替えることの主な利点は何だろうと考えていました。

4

3 に答える 3

4

バインディングを慎重に実装すると、DLR は非常に強力なキャッシュ メカニズムを提供します。おそらく、実際に自分で行うよりも大幅に最適化されます。また、「標準の」動的オブジェクト プロトコルを使用するため、他の言語との相互運用性が向上する可能性が高くなります。

たとえば、C# 4 は、dynamic型を使用するだけで、余分な作業を行わずに言語を呼び出すことができます。DLR なしでこれを行うには、「通常の」静的 CLR 型を生成する必要があります。

あなたの言語を何に使用したいのか、またはそれがすでにどの程度使用されているのかわからないため、どれだけの利点があるかを確実に知ることは困難です. しかし、明らかに DLR に取り組んでいる非常に頭の良い人がたくさんいます。.NET で実行する動的言語を作成しているのであれば、彼らの仕事を利用するのは理にかなっているように思えます。

于 2009-06-24T14:30:55.770 に答える
2

.NET フレームワークへのフル アクセスは大きなものです。

于 2009-06-24T14:28:38.753 に答える
2
  • .Net 基本クラス ライブラリと型へのアクセス
  • .Net 用に作成されたサードパーティ ライブラリへのアクセス
  • API のサービス (セキュリティ更新など) について Microsoft に任せることができます。
  • Visual Studio で言語をホストできます
于 2009-06-24T14:30:44.460 に答える