- 707 名前:654 mailto:sage [2005/12/13(火) 11:37:54 ]
- 例をあげて考えてみる。
まずはライブラリなどとして提供されるユーザ定義のデータ型が ベースとなる言語に埋め込まれてベースとなる言語を拡張している例。 データ型といっても整数演算くらいだと見慣れているだろうし、 あんまりピンとこないかもしれない。 けども複雑なテキストデータは実際にパースしないといけないわけだから 単に観念の問題ではなくて技術的にも結構言語チックではある。 既に出ている正規表現もそうだし、例えば昔、私が多項式型を作ったときには 多項式のインスタンスを文字列リテラルで初期化するようにしてみたことがあって このような場合だと単にユーザ定義のデータ型のリテラル (正確にはそのように見立てた文字列リテラル)の癖に その中に「変数」(数学的には不定元か)や「演算子」なんかがあって その"埋め込まれた"リテラルの扱いはミニ言語っぽくなる。 多項式はデータ・値として4則演算の対象であると同時に 実際に値を代入(数式処理的には「置換」)することで関数のように評価もできたりする。 逆に通常一個の言語として見ている言語の定義を 幾つかのミニ言語を埋め込んで組み立ててあるとみることも実際に可能。 例えばC++を 式言語を制御構造言語に埋め込んでそれを関数宣言言語に埋め込んで、 それらと単純型宣言言語を合わせてクラス宣言言語に埋め込んで、 さらにそれをtemplate宣言言語に埋め込んだものとして考えることもできる。 この時例えばtemplate宣言言語は関数型言語として見ることができて 実際にそのようにプログラミングすることもできるというのが テンプレート・メタプログラミングだったりする。
|

|