【问题标题】:Looking for LLVM-based language which allows to reload part of binary on-the-fly寻找基于 LLVM 的语言,该语言允许即时重新加载部分二进制文件
【发布时间】:2011-04-03 11:39:16
【问题描述】:

是否有任何基于 LLVM 的无 GIL 语言,主要针对 JIT 执行,允许即时重新加载部分代码?

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

有人试过吗?

有没有机会用 clang 做这件事(当然,有很多开发人员谨慎、限制和手动状态处理)?

【问题讨论】:

    标签: jit reload llvm


    【解决方案1】:

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

    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”。调用是否会阻塞,直到重新编译完成然后调用新函数?在编译完成之前旧功能是否仍然存在?如果我们有一个函数指针,在重新编译之后,它指向哪里呢?原功能还是新功能?

    有人对如何以一种严格的方式实现这一点有任何想法吗?

    【讨论】:

    • 我将用对象来处理它。这个想法是当没有代码在可更新对象中运行时我们更新。然后我们序列化所有实例,并进行更新和重新链接。然后重新创建所有实例,反序列化并更新所有指针。瞧,小菜一碟:-)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      显然,它还不存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-14
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        相关资源
        最近更新 更多