10

Anders Hejlsberg の .NET 4.0 プレゼンテーションで、彼は NET 5.0 (または将来のリリース) について説明し、「Compiler as a Service」モデルに取り組んでいます。

Anders Hejlsberg 氏は次のように述べています。アプリケーションのプログラミング、インタラクティブなプロンプト、ユーザー作成のリファクタリング、C# の島々がほとんど埋め込まれていないドメイン固有の言語などです。」

これが実際に役立つ実際の例を見つけるのに苦労しています。ここで主要な概念が欠けていますか?それとも、これは本当に言語に利益をもたらすのでしょうか?

[1]: http://www.simple-talk.com/opinion/geek-of-the-week/anders-hejlsberg-geek-of-the-week/ Compiler as a Service

4

4 に答える 4

4

問題によっては、実際の問題を解決するプログラムを生成できるプログラムを作成する方が簡単です。これが特に役立つ領域の 1 つは、コンパイラ用のパーサーを構築する場合です。

それ以外の場合は、特定のデータ型を操作するときに最適なパフォーマンスを提供するように調整できるコードをオンザフライで生成できます。そのプロパティについては、メタデータを反映して実行時に学習したばかりです。その一例として、私のModelshredderプロジェクトを紹介します。基本的に行うことは、オブジェクトのすべてのフィールドとプロパティを取得し、それらの値をオブジェクト配列にパックすることです。

この問題に対する私の最初のアプローチは、Reflection.Emit. 2 番目のアプローチはもう少し動的で、実行時に効率的に構築およびコンパイルできる式ツリーに依存しており、手動でコーディングした MSIL インジェクションと同じ機能を提供します。それが MoreLinq トランクで実現されていることがわかります (Modelshredder サイトを見てください。リンクがあります)。Compiler as a Service を使用すると、抽象化レベルを上げて C# コードを発行し、MSIL にコンパイルすることができます。

ドメイン固有言語のケースは既に作成されています。また、C# のような命令型言語は、「コマンド ライン」シナリオには適しておらず、より大きなスクリプトには適していないと思います。FAKEと呼ばれる F# DSL に基づくきちんとした make システムがあり、Compiler as a Service の多くの概念を取り入れています。同様の概念は、VisualStudio 内の F# インタラクティブ ウィンドウ (そのように呼ばれますか?) にも採用されています。

于 2010-07-12T22:15:06.447 に答える
4

これがどのように役立つかの実例は、ゲームのユーザー拡張性です。最近のほとんどのゲームでは、比較的遅いスクリプト言語や、開発プラットフォーム (およびそれを使用するための知識) を必要とするコンパイル済み DLL によって、ある種のユーザー拡張が可能です。これにより、ユーザーは、実行時にゲームによってコンパイルされる C# を使用してゲームの拡張機能を記述できるようになり、ユーザー自身がコンパイルする必要がなくなります。また、小さな変更ごとにゲームを再起動することなく、ゲーム内のコンソール ウィンドウに C# コードなどを入力することで、新しいアイデアをテストすることもできます。現在、この種のことは、組み込みのインタープリター スクリプト言語でのみ実際に可能です。

于 2010-06-04T14:54:19.400 に答える
2

もう1つの例はコピー防止だと思います。プログラムをCPUIDに関連付けるために、インストール時に生成された一意のコードをマシンに含めることができます。

税計算のパラメータとしてあなたのシリアル番号を使用するとしましょう。プログラムのコピーは簡単に実行でき、まったく役に立たない。

于 2010-06-04T14:58:10.030 に答える
0

また、Linqpad と同様の機能を持つプログラムの作成が非常に簡単になります。

別のユース ケースとして、データベースに格納されたソース コードのチャンクを使用し、構成に基づいて特定のデータに対して呼び出すことができます。これは、Workflow Foundation を現在呼び出す方法と同様です。これは、CRM、ERP、およびその他のデータ ウェアハウジング アプリケーションのワークフローの自動化に役立つ可能性があります (ただし、これを悪用すると、壮大なアンチパターンが構成されます)。

于 2011-10-05T09:10:23.280 に答える