我目前正在就如何在程序运行时升级程序进行头脑风暴。(不是在调试时,一个“生产”系统。)
但它需要做的一件事是,将更改的源代码或编译后的字节码实际提交到正在运行的进程中。
伪代码
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”以某种方式删除功能
哪个通用平台可以处理这样的事情?