5

私は自分のソフトウェアプロジェクトの1つにスクリプト言語を埋め込むことを検討しており、CodeDOMを介して実行時にC#をコンパイルする方法と、DLRベースのスクリプト言語を埋め込む方法の2つのオプションを特定しました。どちらのオプションでも、.NETFrameworkへのフルアクセスが可能になります。

私がスクリプトを作成する操作は、DataRowのユーザー定義の変換と、変更されたDataRowをもたらすメタデータのセットです。これらの変換は構成可能であり、頻繁に呼び出されると思います。もちろん、変換はエンドユーザーによって提供および変更可能になることを期待しています。

このワークロードを念頭に置いて、あるアプローチを別のアプローチよりも使用することの明らかな利点はありますか?

4

1 に答える 1

3

ユーザーにとっては、明らかな理由から、通常、より寛容な構文の言語を使用することをお勧めします。したがって、DLRベースの言語を使用することをお勧めします。時間とリソースがある場合は、特殊なDSLが最適です。これは、小さくて習得しやすい構文を提供でき、ユーザーが実行してはいけないこと(ファイルシステムへのアクセスなど)を実行しないようにするのが簡単だからです。 、 例えば...)

経験から話すことはできませんが、私が見たところ、DLRは非常に高速である可能性があります(IronPythonはネイティブPythonよりも優れています!)。ただし、動的ディスパッチには常にわずかなオーバーヘッドが伴います。一方で、クロスAppDomain呼び出しはかなり高価です。動的ディスパッチコストはスクリプト内のあらゆる場所で支払われますが、クロスAppDomainコストはスクリプト呼び出しごとに1回だけ支払われます。どちらが優れているかは、スクリプトがどれだけ実行するかによって異なります。

DLRスクリプティングホストの埋め込みはまったく難しくありません。あなたがそのように行くことを選択した場合、難しいのはあなた自身のDSLを転がすことです。

ブーイングを調べることもできます。これは、型推論のおかげでPythonのように見える静的CLI言語です。そのコンパイラは非常に拡張性があり、私はそれにいくつかの小さなDSLを書くことに成功しました。Orenの本WritingDSLswithbooを調べることもできます。

于 2009-11-20T19:53:21.300 に答える