メタプログラミングはどのくらい一般的ですか?[閉まっている]


10

どのくらいの頻度で、またはメタプログラミングがプロジェクトで使用されていると思いますか?uniでは、これが適用されるのを見たことがありませんが、以前の仕事でこれを見たことがあります(それを目にしたとき、それがいかに効果的であるかがわからなくなってしまいました)。

しかし、それはどれほど一般的ですか?それはいつも使用されていますか、それともたまにしか使用されていませんか?


5
それはそれほど一般的ではないかもしれません。Lispではかなり一般的ですが、Lispはそれほど一般的ではありません-Common Lispでさえもです。
ポール・

明示的か暗黙的か?極端な例として、JavaとC#を使用すると、コンパイラが言語ファイルを出力してコンパイルまたは解釈するため、間違いなくメタプログラミングです。一方、コンパイラを作成した言語でコードを生成するためのコードを書く人はほとんどいません。
MOZ

メタプログラミングはユビキタスです。Autotoolsに依存するすべてのオープンソースプロジェクトは、メタプログラミングを使用しています。Qtの世界ではMOC、LLVMではtblgen、多数の.NETプロジェクトではT4、JavaScriptを生成するほとんどすべてのWebプロジェクトなど。
SKロジック

回答:


5

リフレクションを一種のメタプログラミングと考えると、比較的一般的です。一部の人々にとっては、ジェネリックプログラミング(テンプレートとジェネリック)もメタプログラミングの一種なので、それはさらに一般的です。

ただし、私の意見では、メタプログラミングはより複雑なものであり、実際のコード生成が含まれるため、スクリプト言語でさえ非常に一般的ではありません。


テンプレートメタプログラミングが「実際のコード生成」ではないのはなぜですか?C ++テンプレートはチューリング完全であり、任意の複雑なコードを生成できます。
SKロジック

@ SK-logic:実行時にオンデマンドで生成される新しいコードを意味します。テンプレートはコンパイラによって処理されます。テンプレートは、強力な種類のプリコンパイラマクロと見なすことができます。
Wizard79

なぜランタイムでコードを生成したいのですか?メタプログラミングの最も強力な形式(Common Lisp、ラケット、テンプレートHaskellなど)はコンパイル時です。
SK-logic

3

使用する言語に大きく依存すると思います。一般的なLispの人々はおそらくそれを公平に使用します。たとえば、メタオブジェクトプロトコルは、透明性/直交性の永続性など、きちんとしたものを可能にし、Smalltalkerは頻繁に使用します。


2

Common Lispプロジェクトで一般的かつ一貫して表示される傾向があります。OnLispを確認し、Let Over Lambdaの説明と洞察を確認してください。

例の直後の方(そしてCLを知っている方)は、Antiwebリポジトリをチェックしてください。裏では、かなりの量のメタプログラミングが行われています。


1

過去2年間、ほとんどの場合、新しいタスクのプログラミングの最初のビットは、コードを書くためのコードを書くことでした。自動スクリプト生成に簡略化できるデータベースとのやり取りに関連する大量の定型があります。オブジェクトなどを作成するために3つのテーブルをクエリする必要がある場合を考えてみてください。将来的に変更される可能性があるこれらのものが10個あるのに、なぜ自分で書くのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.