红帽开发 MIR JIT 编译器

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

在当前开发阶段,到中间表示形式 MIR 的转换器已准备就绪。 C语言 和位码 LLVM (Bitcode),但未来计划实现为 WebAssembly、Java 字节码生成 MIR 的功能, CIL (通用中间语言)、Rust 和 C++。该项目由 JIT 引擎开发人员之一开发。 密歇根联合技术学院用于 Ruby。基于 MIR 的 JIT 计划主要用于 CRuby и MRuby未来也不排除将 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(启用“-O2”优化)从相同 C 代码编译的可执行文件的速度慢 30%;
  • 实际执行开始前的初始化阶段所需时间应减少 100 倍;
  • JIT 的 MIR 表示必须比 GCC 编译的可执行文件小 100 倍。

就目前而言,MIR 的实现远远超过了其最初的目标:测试表明,MIR 的编译性能比 GCC-O2 快 178 倍,执行性能比本地代码慢 6%,代码大小缩小了 144 倍,MIR JIT 实现的代码量为 16 行。

红帽开发 MIR JIT 编译器

来源: opennet.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster