在红帽 新的轻量级 JIT 编译器 这确保了先前转换为中间表示形式 MIR(介质内部表示,不要与其他中间表示形式混淆)的代码能够执行。 (Rust 编译器中使用的中间层 IR)。该项目旨在提供一个框架,用于实现快速且紧凑的解释器和 JIT 编译器。项目代码用 C 语言编写。 在麻省理工学院的许可下。
在当前开发阶段,到中间表示形式 MIR 的转换器已准备就绪。 和位码 (Bitcode),但未来计划实现为 WebAssembly、Java 字节码生成 MIR 的功能, (通用中间语言)、Rust 和 C++。该项目由 JIT 引擎开发人员之一开发。 用于 Ruby。基于 MIR 的 JIT 计划主要用于 и 未来也不排除将 GCC 移植到使用 MIR 的可能性。
中间 MIR 代码可以以二进制和文本(可读)形式表示。该代码可在解释器中执行,并从中生成机器代码(x86_64,并计划支持 ARM64、PPC64 和 MIPS64)。反向转换也是可能的——从 MIR 到 CIL、Java 字节码、WebAssembly 和 C 代码。
MIR 的主要特性包括强类型、对模块和函数的支持,以及一套用于类型转换、比较、算术和逻辑运算、分支等的指令集。模块包含一组转换为 MIR 格式的函数,可以作为库加载,也可以加载外部 C 代码。
在 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 行。
来源: opennet.ru
