在红帽
在目前的开发阶段,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 中从相同 C 代码编译的可执行文件的性能慢 30% 以上(使用“-O2”优化);
- 实际执行开始之前的初始化阶段应该减少 100 倍的时间;
- JIT 的 MIR 表示必须比 GCC 中编译的可执行文件小 100 倍。
就目前的形式而言,MIR 实现在很多方面都领先于最初设定的目标:测试表明,MIR 中的编译性能比“GCC -O2”快 178 倍,执行性能落后于本机代码 6%,代码大小小了 144 倍,MIR 实现 JIT 是 16 行代码。
来源: opennet.ru