C#编译器可以定义为一个内置组件,用于将C#编程代码转换为机器可读的语言代码,并以.dll文件或.exe文件的形式返回输出文件。 C#有两种不同类型的编译方法,即公共语言运行时编译(CLR)和即时编译(JIT)。 JIT编译器进一步分为Pre JIT编译器、Normal JIT编译器和Econo JIT编译器。用于此编译目的的一些常用工具包括 C# 编译器 2.0、C# 编译器 3.5、C# 编译器 4.x、Roslyn 和 Mono 编译器。
因此,在生成中间语言之后,我们需要将这个 IL 转换为机器代码,因为处理器只能理解机器代码。 所以我们使用CLR(公共语言运行时)来进行此转换。 CLR是一种在计算机上运行的程序,借助Just-In-Time(通常称为JIT)将IL代码转换为机器代码。当我们双击 .exe 文件时,会调用 JIT 编译器并在该时间编译 IL 代码,因此它被命名为 JUST-IN-TIME(JIT)。
编译可以隐式或显式完成。隐式编译是两次编译,首先编译IS,然后编译为机器语言。这个过程称为 JIT 编译或 JUST-In-Time 编译。 JIT支持多平台,加快代码的执行速度。
共有三种不同的即时编译器
1。预 JIT 编译器
在这个编译器中,只有一个编译过程,因为整个源代码被编译为本机代码。
2。普通 JIT 编译器
在这个编译器中,只有那些方法被编译成机器代码,这是运行时需要的。编译器编译这些方法,将它们存储在缓存中,并再次使用相同的方法。
3。 Econo JIT 编译器
在此编译器中,只有那些方法被编译为运行时所需的机器代码,但是如果不需要,这些方法将被删除。在 JIT 中,运行时只编译所需的方法,因此需要较少的内存使用。
上图中
编译时会执行1-3步
运行时将执行 3-5 个步骤。
所以,当我们运行时会出现这两类错误。
早期的微软编译器被命名为.Net Framework,如C#编译器2.0、C#编译器3.5、C#编译器4.x等。这些编译器不是用C#编写的,或者我们可以说C#不是由C#编译的。此后出现的其他编译器是:
早期编译器是用 C/C++ 编写的。 Roslyn 是开源 .Net 编译器,其中 C++ 代码被替换。它获取代码中元素的类型以及它们之间的关系。由于 C# 和 VB 团队编写了编译器,因此 Visual Studio 模板适用于两者。它允许我们编写解析源文件的代码,并且我们可以轻松修改源代码。
以下是Roslyn的四个API层
基于 C# ECMA 标准的 Mono C# 编译器。它有多个版本,框架有 C# 1.0、2.0、3.0、4.0。 mono编译器mcs针对framework 1.1,gmcs针对framework 2.0,而smcs和dmcs分别针对framework 2.1和4.0。
其他编译器,如 RemObjects C# 编译器,根据 EMCA 规范遵循 C# 标准,除此之外还有实现 C# 和 .Net 的 GNU C# 编译器。
C# 编译器就像任何其他编译器一样,将代码编译为机器代码,以便处理器能够理解该过程。
以上是C# 编译器的详细内容。更多信息请关注PHP中文网其他相关文章!