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

时间:2010-08-25 00:28:14

标签: jit reload llvm

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

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

有人试过吗?

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

3 个答案:

答案 0 :(得分:2)

我认为这是一个充满活力的想法,也是我喜欢的一个功能!您是否考虑过如何与该功能进行交互?

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

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

另外,如何处理线程?

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

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

有没有人对如何以正确的方式实施这一点有任何想法?

答案 1 :(得分:0)

嗯,我脑子里想不出任何东西。我能想到的唯一主要产品是JRebel,但这是针对Java的。

答案 2 :(得分:0)

显然,它还不存在。