【问题标题】:What would be a simple to use JIT library?什么是简单易用的 JIT 库?
【发布时间】:2021-09-14 13:44:45
【问题描述】:

我正在尝试编写类似于 .NET 或 JVM 的语言运行时(和语言本身)。它有一种自定义形式的字节码。

我想要的是一种将所述字节码转换为实际可运行机器码的方法。所以,因为我不想自己写这样的翻译器(这更像是一个玩具项目/个人项目)我想找到一个好的 JIT 库来使用。

这是我希望图书馆做的事情:

  • 该库应尽可能易于使用(玩具项目,我在这里没有太多经验)
  • 该库应至少支持 x86_64(开发机器),但最好也应涵盖其他架构
  • 库最好进行一些低级优化(寄存器跟踪和分配、减少内存访问等);不过,这些优化不应该非常昂贵(例如,我将自己进行其他优化,例如删除虚拟调用并将它们转换为直接调用)。如果它最容易使用,我可以接受没有优化的库。
  • 库必须具有可用于 C(首选)或 C++(可接受)的接口。

如果重要的话,我将使用 Boehm GC 进行垃圾收集(可能不重要,但以防万一)。也许压缩 GC 会很好,但我想我不应该把这些问题结合起来......

【问题讨论】:

    标签: c jit


    【解决方案1】:

    我建议llvm。有一些很棒的tutorials 关于如何用它实现自己的语言,基本的东西并不太复杂。您还可以选择在以后做很多更高级的事情。作为奖励,您不仅可以使用 JIT,还可以静态编译和优化二进制文件。 LLVM 也确实有一个C interface,可以针对所有常见的 CPU 架构,甚至还有很多更晦涩的架构。

    【讨论】:

    • 我自己也在考虑 llvm,但我最初认为它太复杂了。
    • 我故意尝试字节码解释器,因为我希望能够在运行时加载代码。
    • llvm 支持 JIT 和静态编译。所以你可以毫无问题地做一个字节编码器解释器。我链接的教程实际上实现了 JIT
    • 谢谢,我会去看看,虽然我觉得进入门槛比较高。从链接器的角度来看,我不希望生成的代码可以访问外部库代码,至少在初始实现中(尽管如果这变得先进,我猜我也会添加对它的支持)跨度>
    • 你的语言可以访问什么,什么不能完全取决于你实现了什么。 (虽然 llvm 确实让与 C/C++ 库的交互变得相对容易)
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 2010-11-22
    • 2014-05-30
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多