.Net 7 新编译器 ILC 简析
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net 7 新编译器 ILC 简析相关的知识,希望对你有一定的参考价值。
楔子:
这个新编译器的全称是ILCompiler。是之前CoreRT项目合并过来的,在.Net 7成熟,并且可以产业化应用。
本质:
ILC编译器的本质除了构建CLR的所拥有的主要功能,还包含了对LLVM这种意图取代GCC编译器的操作,对于LLVM主要是用来Win,Linux,Macos三种不同的操作系统的目标文件而所做的封装。
一.CLR的主要功能:
1.构建内存模型,比如
MethodTable,EEClass,MethodDesc,MethodDescThunk等等。
2.调用RyuJIT即时编译器
3.GC垃圾回收
ILC编译器包含了CLR主要功能的前面两项,第三项则通过不同平台的连接器把GC操作函数链接到各个平台的可执行文件上。
二.针对LLVM的封装
最主要的一个针对LLVM的封装就是编译各个平台的不同目标文件,比如Windows PE,Linux ELF和macOS Mach-O文件格式。
它的主要封装目标名称在win下面是ObjWriter.dll,Linux下面为libobjwriter.so。
要点
ILC全部为C#代码写的,对于需要用到的底层库,直接DllImport
比如写入段的
ObjWriter.dll的SetCodeSectionAttribute
比如编译机器码JitSupportLibrary(jitinterface.dll)的JitCompileMethod
功能:
ILC的主要功能大致由3个部分组成:编译脚本代码、调用JIT,代码生成后端。
分开来看:
1.编译脚本代码:dotnet publish -r win-x64 -c release在ILC里面被识别并且包含各种需要的引用库,运行库文件。为后续准备
2.调用即时编译器JIT,根据前面的编译脚本代码的参数以及函数功能等,进行机器码编译。
3.返回JIT编译的机器码,生成各个平台目标文件和可执行的文件。
结尾:
如果想要了解.Net 7以后的发展,这个ILC恐怕绕不过去。它隐有与CLR分庭抗礼之势。
以上是关于.Net 7 新编译器 ILC 简析的主要内容,如果未能解决你的问题,请参考以下文章