Code Generation †
要約 †
- セマンティックモデルを実行するほうが簡単ではあるが、そうもできないことも多々ある。
- いろいろな環境で実行する必要があるのに、セマンティックモデルやパーサを構築できない環境があることも。
- DSLで指定される振る舞いを得られ、またほぼすべての環境でそれを実行できる。
- コード生成を使うとき、「DSLプロセッサ」と「対象となる環境」の二つの異なる環境が存在する。
- 「DSLプロセッサ」はパーサ、セマンティックモデル、コード生成プログラムのある環境。
- 「対象となる環境」は生成したコードとその周りにあるもの。
- コード生成使用時のポイントは、「DSLプロセッサ」から「対象となる環境」を分離することである。
- 「対象となる環境」で「DSLプロセッサ」を適切に構築できないので。
- 「対象となる環境」はいろいろな形で現れる。
- 「DSLプロセッサ」を実行するリソースのない組み込みシステム。
- DSLの処理に適さない言語を必要とする環境。
- 対象となる環境がDSL自身であることも。(意味不明)
- DSLの表現力が限定的であるため、より複雑なシステムに要する抽象的な機構を提供できない。
- 実現したとしても複雑になってしまい、結局汎用言語になってしまうことも。
- そこで、異なる環境で抽象化を行い、対象となるDSLでコードを生成する方がよいこともある。
- よい例がDSLで問い合わせ条件を指定してSQLを生成すること。
- クエリがデータベースで効率的に実行されるようにするだろうが、SQLはクエリを表すのに適切なものではない。(意味不明)
- 「対象となる環境」の制約がコード生成の唯一の理由ではない。
- 「対象となる環境」に精通していないことも理由となり得る。
- なじみのある言語でふるまいを指定し、なじみのない言語を生成する方が簡単なことも。
- 静的な検査を強制するのにコード生成を行う方がよりよい場合もある。
- DSLでいくつかのシステムのインタフェースを特徴づけるだろうが、残りのシステムはC#を使用してインタフェースとやりとりしたいと言う場合もある。(意味不明)
- コンパイル時のチェックとIDEのサポートを得られるように、C#のAPIを生成することに。
- インタフェースの定義が変わると、C#のコードを再生成することで、修正すべき個所がコンパイラの警告として出てくる。
ファウラーへのフィードバック †
担当者のつぶやき †
みんなの突っ込み †