私は現在、実行中のプログラムをアップグレードする方法についてブレインストーミングを行っています。(デバッグ中ではなく、「本番」システム。)
ただし、そのために必要なことの 1 つは、変更されたソース コードまたはコンパイルされたバイト コードを実行中のプロセスに実際に送信することです。
疑似コード
var method = typeof(MyClass).GetMethod("Method1");
var content = //get it from a database (bytecode or source code)
SELECT content FROM methods WHERE id=? AND version=?
method.SetContent(content);
まず、オブジェクト指向の複雑さなしに動作するシステムを実現したいと考えています。これは、次の要件につながります。
- 関数のソースコードまたはバイトコードを変更する
- ドロップ関数
- 新しい機能を追加
- 関数のシグネチャを変更する
.NET (およびその他) を使用すると、IoC を介してクラスを挿入できるため、ソース コードを変更できます。しかし、すべてがアセンブリ内にあるか、Emit を介して作成されている必要があるため、読み込みは面倒です。たぶんJavaでこれは簡単になるでしょうか?ClassLoader 全体が交換可能だと思います。
JavaScript を使用すると、多くの目標を達成できました。新しい関数 (MyMethod_V25) を評価して、MyClass.prototype.MyMethod に割り当てるだけです。「del」で何とか機能を落とすこともできると思います
そのようなことを処理できる汎用プラットフォームはどれですか?