私は、実行時にメソッドが動作する方法を変更することがコアとなる予定のプロジェクトを開始しました。私はではありません。では、実際の効果は似ていますが、「シャドーワンの別の方法」のようなより高いレベルのオブジェクト指向の概念について話しています。私は後だどのようなプログラミング言語を使って、メソッド内の命令のシーケンスを操作できますか?
の重要な特性は以下のとおりです。
が、私は、新しい表現を追加し、既存の式を削除、または式のいずれかを変更することができるようにする方法を変更することができなければならないことその中で起こる。
メソッドを変更した後、そのメソッドを後で呼び出すと、新しい操作シーケンスが呼び出されます。 (言語は私に新しいメソッドを再バインド/アンバインドする方法を提供し、方法をバインドするのではなく一つ一つの時間を評価した場合。または、)
理想的には、私は言語(例えばの原子単位を操作したいです、 "オブジェクト
bar
のメソッドfoo
を呼び出す")であり、アセンブリを直接(例えば、 "これらの3つのパラメータをスタックにポップする)"ではありません。言い換えれば、私が作った操作が言語上意味的に意味のあるものであるという高い確信を得たいと思っています。しかし、私が得ることを取るつもりです。
あなたが候補言語がこれらの基準を満たしているかどうかわからない場合は、ここでは簡単なリトマス試験があります:
あなたは別の方法がどの
clean
と呼ば書き込むことができます。
は受け入れ方法
m
入力としては別の方法を返します
m2
は、m
と同じですが、あなたの言語(プット、System.Console.WriteLnの印刷・ツー・標準出法への呼び出しが含まれていないようと同じ動作を行い、printlnなど)?
私は今、いくつかの予備調査を行い、最強の候補であるかを把握したいと思います。私がしたいことを実行する実用性と同じくらい、大きくて活発なコミュニティーを持つことは、私にとって重要です。バイトコードを直接操作するのは、一般的に公開される操作ではないため、ここではいくつかの偽造されていない領域があるかもしれないことを認識しています。
私にはどのような選択肢がありますか?可能であれば、あなたが推奨する1つ以上の言語でおもちゃの例を提供できますか、最近の例を教えてください。
アップデート:私はこの後だ理由は、私は新しい情報に応じて、実行時に自分自身を変更することのできるプログラムを書きたいと思いということです。この変更は、単なるパラメータや設定可能なデータを超えて、本質的な進化した動作の変化になります。 (いいえ、私はウイルスを書いていません。;))
明らかに、*既存*メソッドの命令を動的に変更したいですか? (すなわち、オンザフライで* new *メソッドの実装を一緒にスローしないでください) –
@Kirk Woll:言語が私の目標をどのように満たしているかという実装の詳細については特に気にしません。私は私が後にしている主要な特性を強調するために少し質問を明確にしました。 –