代码之家  ›  专栏  ›  技术社区  ›  BarsMonster

寻找基于llvm的语言,该语言允许动态重新加载部分二进制文件

  •  6
  • BarsMonster  · 技术社区  · 15 年前

    是否有以JIT执行为主要目标、允许在运行中重新加载部分代码的基于Gil的LLVM的语言?

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

    有人试过吗?

    有没有机会用clang来实现这一点(当然,在大量开发人员的谨慎、限制和手动状态处理下)?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Real John Connor    15 年前

    我认为这是一个爆炸性的想法,也是一个我很想拥有的功能!您是否考虑过如何使用该功能?

    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
  •  0
  •   The Alchemist    15 年前

    嗯,我脑子里什么都想不出来。我能想到的唯一主要产品是 JRebel 但这是Java的。

        3
  •  0
  •   BarsMonster    15 年前

    显然,它还不存在。