-1

基本的に、私は興味がありました (確かに危険なことです)。コードのブロックを動的に構築して後で実行できるようにする言語は何ですか。

http://en.wikipedia.org/wiki/Self-modifying_codeを見ました が、探していたものが見つかりませんでした。

これは議論ではありません。どちらが他のものより優れているかを尋ねているわけではありません。 このプログラミング機能またはそれに類似した機能を含む言語を知りたいだけです。可能であれば、この機能を説明するコード例も見たいです。

私は以前にASP.NETで同様のことを行い、実行するページに送信されるJavaScriptコードを動的に構築したり、C#でSQLクエリを生成したりしましたが、同じ言語内ではこれまでにありませんでした。つまり、C# を生成する C# です。

これがどのように見えるかの例です(私は作成されたC#/ Javaish言語で書いています)

/ はコード ブロックのエスケープ シーケンスを表します

CodeBlock codeblock = new CodeBlock();

codeblock+= / print("interesting "); int x = 0;  /

for(int i=0; i++; i<10)
{
  codeblock+= / for(int i=0; i++; i<10) {  x++; Canvas.Draw(new line(x,x+50); } /

}

executionMethod(codeblock);

public void executionMethod(ExecutableCode block)
{
  block.exectute();
}
4

1 に答える 1

2

「動的に構築されたコードブロックを実行する」ことは「メタプログラミング」と同じではありません。

動的コードブロックを実行する機能は簡単に検出できます。言語には「eval」のような機能があります(例のように)。

「メタプログラミング」とは、あるプログラムが他のプログラムを操作する能力です (それ自体に適用されることもあります)。それは必ずしもプログラミング言語の特性ではありません。プログラム変換ツールなど、これらのアクティビティをサポートするように設計された何らかの言語で実装されている単なる大規模な機能のセットである可能性があります。言語機能によって直接実装されるメタプログラミングは、完全な汎用性に欠けることがよくあります。言語設計者があなたにやらせようと決めたことをすることができますが、それ以上はできません。(存在するほとんどの「リフレクション」言語で変数の名前を変更してみてください)。そこでは、より一般的なツールがより効果的です。言語設計者によって課された制限があるとは限りません。

于 2013-10-22T18:13:03.337 に答える