C# 编译器

王林
发布: 2024-09-03 15:03:03
原创
1312 人浏览过

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 编译器。

C# 编译器

因此,在生成中间语言之后,我们需要将这个 IL 转换为机器代码,因为处理器只能理解机器代码。  所以我们使用CLR(公共语言运行时)来进行此转换。 CLR是一种在计算机上运行的程序,借助Just-In-Time(通常称为JIT)将IL代码转换为机器代码。当我们双击 .exe 文件时,会调用 JIT 编译器并在该时间编译 IL 代码,因此它被命名为 JUST-IN-TIME(JIT)。

C# 编译器

编译可以隐式或显式完成。隐式编译是两次编译,首先编译IS,然后编译为机器语言。这个过程称为 JIT 编译或 JUST-In-Time 编译。 JIT支持多平台,加快代码的执行速度。

即时编译器的类型

共有三种不同的即时编译器

1。预 JIT 编译器

在这个编译器中,只有一个编译过程,因为整个源代码被编译为本机代码。

2。普通 JIT 编译器

在这个编译器中,只有那些方法被编译成机器代码,这是运行时需要的。编译器编译这些方法,将它们存储在缓存中,并再次使用相同的方法。

3。 Econo JIT 编译器

在此编译器中,只有那些方法被编译为运行时所需的机器代码,但是如果不需要,这些方法将被删除。在 JIT 中,运行时只编译所需的方法,因此需要较少的内存使用。

上图中

编译时会执行1-3步

运行时将执行 3-5 个步骤。

所以,当我们运行时会出现这两类错误。

运行时错误和编译器错误

  • 编译器错误:此类错误发生在 C# 编译器本身。它阻止 C# 代码编译为 .exe 格式。这些错误基本上是由于语法错误而发生的,当我们拼写错误任何语法或错过逗号或分号时,编译器无法理解这一点,因此它会停止处理并抛出编译时错误。我们可以在IDE的输出窗口中看到这些错误。因此,通过检查这些错误,我们可以纠正我们的代码。
  • 运行时错误: 这些是实时错误。当代码编译成功但在运行时遇到任何问题时,就会发生这些情况。这会影响代码的行为。例如,我们可以说,当我们尝试将任何数字除以零时,就会发生运行时错误。这些错误比编译器错误更繁琐,因为在这种情况下,我们需要纠正代码的行为。

C# 编译器

C# 编译器类型

早期的微软编译器被命名为.Net Framework,如C#编译器2.0、C#编译器3.5、C#编译器4.x等。这些编译器不是用C#编写的,或者我们可以说C#不是由C#编译的。此后出现的其他编译器是:

1.罗斯林

早期编译器是用 C/C++ 编写的。 Roslyn 是开源 .Net 编译器,其中 C++ 代码被替换。它获取代码中元素的类型以及它们之间的关系。由于 C# 和 VB 团队编写了编译器,因此 Visual Studio 模板适用于两者。它允许我们编写解析源文件的代码,并且我们可以轻松修改源代码。

以下是Roslyn的四个API层

  • 脚本 API:该层提供运行时执行上下文,允许我们使用 C# 作为脚本语言,并且不依赖于 Visual Studio 组件。
  • 编译器 API:该层用于语法,包含程序集和源代码文件的引用。该层也不依赖于 Visual Studio 组件。
  • Service API:该层在 SDK 之上提供 IntelliSense、格式化、查找所有引用等。它还有助于管理有关项目的信息并管理项目依赖性。
  • Workspace API:这一层主要用于通过IDE进行代码分析和重构。 Roslyn 使代码变得更容易,由一组 API(如编译器和服务)组成,提供格式化、Intellisense 等许多功能。它提供对多种语言的支持。工作区 API 提供有关源代码的深入信息。

2.单声道编译器

基于 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。

  • mcs: 它支持所有 C# 1.1 功能,如匿名方法、可空类型、固定缓冲区、属性访问修饰符、静态类等。
  • gmcs:它支持 C# 2.0 功能,如查询表达式、对象初始值设定项、部分方法、lambda 表达式、自动实现的属性等
  • dmcs:它支持 C# 4.0 功能,包括命名参数、泛型类型差异、动态绑定等

其他编译器,如 RemObjects C# 编译器,根据 EMCA 规范遵循 C# 标准,除此之外还有实现 C# 和 .Net 的 GNU C# 编译器。

结论

C# 编译器就像任何其他编译器一样,将代码编译为机器代码,以便处理器能够理解该过程。

以上是C# 编译器的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板