红帽开发 MIR JIT 编译器

在红帽 正在开发中 新的轻量级 JIT 编译器 MIR,这确保了之前已转换为中间表示形式 MIR(中型内部表示形式,不要与其他中间表示形式混淆)的代码的执行 MIR (中级 IR),用于 Rust 编译器)。 该项目旨在提供一个用于实现快速、紧凑的解释器和 JIT 的框架。 项目代码是用C语言编写的 分发者 在麻省理工学院的许可下。

在目前的开发阶段,MIR 中间表示的翻译器已经准备好 C语言 和位码 LLVM (Bitcode),但未来计划实现为WebAssembly、Java字节码生成MIR的能力, CIL (通用中间语言)、Rust 和 C++。 该项目由 JIT 引擎开发人员之一开发 麻省理工学院,用在 Ruby 中。 首先,计划实施基于MIR的JIT 红宝石 и 鲁比。 将来还可以将GCC移植到使用MIR。

红帽开发 MIR JIT 编译器

中间 MIR 代码可以以二进制和文本(可读)形式呈现。 该代码可以在解释器中执行,并且可以基于它生成机器代码(x86_64,在 ARM64、PPC64 和 MIPS64 计划中)。 还可以执行反向转换 - 从 MIR 到 CIL、Java 字节码、WebAssembly 和 C 代码。

MIR 的特性中,最突出的是严格类型化、对模块和函数的支持、提供了一组用于类型转换、比较、算术和逻辑运算、分支等的指令。 模块包括一组转换为 MIR 格式的函数,可以以库的形式加载,也可以加载外部 C 代码。

红帽开发 MIR JIT 编译器红帽开发 MIR JIT 编译器

在 JIT 中执行中间代码而不是编译为本机可执行文件的主要优点是能够生成紧凑的文件,这些文件可以在不同的硬件架构(x86、ARM、PPC、MIPS)上重建而无需重建即可执行。 对于不受支持的架构,可以使用解释模式,在 MIR 的情况下,该模式比 JIT 慢 6-10 倍。

现有 JIT 编译器的缺点
GCC和LLVM被称为过于臃肿、编译速度低、难以实现不同编程语言的组合优化。 MIR 开发人员试图解决这些问题
问题和设定目标:

  • MIR 中的编译速度至少比 GCC 快 100 倍;
  • MIR 执行的 JIT 必须非常紧凑,包含大约 15 行代码;
  • 使用 JIT 执行 MIR 的性能不应比在 GCC 中从相同 C 代码编译的可执行文件的性能慢 30% 以上(使用“-O2”优化);
  • 实际执行开始之前的初始化阶段应该减少 100 倍的时间;
  • JIT 的 MIR 表示必须比 GCC 中编译的可执行文件小 100 倍。

就目前的形式而言,MIR 实现在很多方面都领先于最初设定的目标:测试表明,MIR 中的编译性能比“​​GCC -O2”快 178 倍,执行性能落后于本机代码 6%,代码大小小了 144 倍,MIR 实现 JIT 是 16 行代码。

红帽开发 MIR JIT 编译器

来源: opennet.ru

添加评论