実行時にメソッドが機能する方法を変更することがコア要件となる次のプロジェクトがあります。実際の効果は似ていますが、「あるメソッドを別のメソッドにシャドウイングする」などの高レベルのオブジェクト指向の概念について話しているのではないことに注意してください。
私が求めている主なプロパティは次のとおりです。
新しい式を追加したり、既存の式を削除したり、メソッド内で発生する式を変更したりできるように、メソッドを変更できる必要があります。
メソッドを変更した後、そのメソッドを呼び出すと、新しい一連の操作が呼び出されます。(または、言語が毎回評価するのではなくメソッドをバインドする場合は、新しいメソッドのバインドを解除/再バインドする方法を提供してください。)
理想的には、アセンブリを直接操作するのではなく(たとえば、「これら3つのパラメーターをスタックにポップする」)、言語のアトミックユニットを操作したい(たとえば、「
foo
オブジェクトのメソッドを呼び出すbar
」)。言い換えれば、私が構築する操作がその言語で意味的に意味があることを確信できるようにしたいと思います。しかし、私は私が得ることができるものを取ります。
候補言語がこれらの基準を満たしているかどうかわからない場合は、簡単なリトマス試験を次に示します。
clean
whichと呼ばれる別のメソッドを記述できますか?
メソッド
m
を入力として受け入れます
m2
と同じ操作を実行する別のメソッドを返しますm
と
m2
同じですがm
、ご使用の言語(puts、System.Console.WriteLn、printlnなど)でのprint-to-standard-outメソッドの呼び出しは含まれていませんか?
今から予備調査をして、最強の候補者を見つけたいと思います。大規模で活発なコミュニティを持つことは、私がやりたいことを実行することの実用性と同じくらい重要です。バイトコードを直接操作することは通常、公開する必要のある操作ではないため、ここには偽造されていない領域が存在する可能性があることを認識しています。
私が利用できる選択肢は何ですか?可能であれば、あなたが推奨する1つ以上の言語でおもちゃの例を提供できますか、それとも最近の例を教えてください。
更新:私がこの後の理由は、新しい情報に応じて実行時に自分自身を変更できるプログラムを書きたいからです。この変更は、単なるパラメーターや構成可能なデータを超えていますが、動作の本格的で進化した変更です。(いいえ、私はウイルスを書いていません。;))