RyuJIT的华丽转身【译文】

  2018-06-19前端

  RyuJIT是做为.NET即时编译器的代号称谓,它是.NET运行时的基本组件之一。与此相反的是,Roslyn做为C#编译器,其编译C#代码成为IL字节码。而后,其再将IL字节码编译成相对于多种处理器的机器码。后端

  随着最近对dotnet/coreclr #18064的合并,将生成组件的遗留代码(来自较老的JIT实现)从RyuJIT的源码中进行了移除。这个版本删除了近5万行代码!如今,四种处理理体系结构(x8六、x6四、ARM3二、ARM64)可彻底基于RyuJIT架构。架构

  回顾一下关于RyuJIT短暂的历史,以及咱们是如何作到如今这样的,是一件颇有趣的事情。测试

  RyuJIT架构的设计开始于9年前,而着手实现开始于7年前。RyuJIT是现有的JIT32编译器(它支持x86和ARM32)的进化版实现,并逐步用一个新的寄存器分配器和代码生成器替换了编译器的大部分“后端”,并入了许多新的和改进的“前端”优化组件。在向新的代码生成体系结构过渡的过程当中,咱们将旧代码与之结合。这样作提供了好处,可是在测试和维护成本方面,以及开发人员须要处理由大量的分散的遗留代码的困惑,这些都是很是昂贵的。如今,因为RyuJIT在功能上优于遗留代码,因此如今是删除遗留代码,简化JIT代码,以及着眼于将来的时候了。优化

  在近5年前,RyuJIT的x64版本做为社区技术预览版展现给世界。这在当时是不寻常的。咱们为人们提供了多年的更新,让人们能够尝试,并在咱们发布产品以前给咱们反馈。RyuJIT的x64系列是随.NET Framework 4.6发布的,它取代了3年前的JIT64,对于如今而言,它是一个遗留的代码库。spa

  在去年发布的.NET Core 2.0中,x86取代了JIT32。做为公共开发过程的一部分,咱们宣布了JIT32的替换,并在.NET Core 2.0的发布声明中分享了完成的工做。操作系统

  .NET Core 2.0做为包含支持ARM32架构的预览版,使用了遗留后端代码。截至去年12月,对于dotnet/coreclr #15134的合并,.NET Core 2.1版本正式支持了ARM32体系架构。这一变化也包括了三星的许多贡献。设计

  RyuJIT对于ARM64架构的支持,在.NET Core 2.1中近乎为预览版程度,此支持是在RyuJIT架构实现之初就进行构建的。实际上,在过去的4年中,咱们一直致力RyuJIT支持ARM64的相关工做,而这项工做最近又被高通的贡献者们所作的重要工做推动了。blog

  总的来讲,RyuJIT的投入一直专一于发展代码库,以便更好地支持:开发

  1)多代码生成目标(指令集和操做系统);

  2)改进优化;

  3)更好和更灵活的代码生成;

  4)开放、灵活和健壮的设计与实现;

  咱们相信新的RyuJIT编译器架构比(如今已删除)传统的代码生成器实现这些目标有很大的改进。

  最近,咱们在RyuJIT代码生成器中,投入了新的代码生成技术。例如,SIMD支持,特定于硬件内部的体系结构,以及对Linux软件约定的支持。

  到达这一点是很是使人满意的,咱们已经能够看到,删除全部这些旧的代码将使咱们在前进的过程当中更加灵活。

  感谢全部为这一切长期努力作出贡献的人!

 

参考连接:https://blogs.msdn.microsoft.com/dotnet/2018/06/19/the-ryujit-transition-is-complete/

相关文章
相关标签/搜索