寻找基于LLVM的语言,允许在运行中重新加载部分二进制文件

Bar*_*ter 6 jit llvm reload

是否有任何基于LLIL的语言,主要针对JIT执行,允许动态重新加载部分代码?

就像重新编译1个类一样,并在不停止整个程序的情况下重新加载它.

有人试过吗?

有没有机会用clang做这件事(肯定会有很多开发人员提醒,限制和手动状态处理)?

Rea*_*nor 2

我认为这是一个爆炸性的想法,也是我希望拥有的功能!您是否考虑过如何与该功能交互?

obj1 = Foo()
compiler.Recompile(Foo, '/some/path/myapp/newsrc/foo.blah');
obj2 = Foo()
// Would this be True?
type(obj1) == type(obj2)
Run Code Online (Sandbox Code Playgroud)

我假设您希望现有实例在重新编译后保持不变?这似乎使用函数会更容易,只要它们保持相同的原型即可,但是使用类来做似乎会变得混乱。

另外,线程该怎么办?

Thread.start(wait 1; bar(););  // bar is a function
compiler.Recompile(bar, '/some/path/myapp/newsrc/bar.blah');
Run Code Online (Sandbox Code Playgroud)

假设在我们的线程中,我们在重新编译期间开始调用“bar”。调用是否会阻塞,直到重新编译完成然后调用新函数?在编译完成之前旧函数是否仍然存在?如果我们有一个函数指针,重新编译后它指向哪里呢?是原来的功能还是新的功能?

有谁对如何以直截了当的方式实施这一点有任何想法吗?