C#常见术语表格

AOT

AOT 编译器也将 [IL 代码](#IL 代码)翻译成机器代码。但与 JIT 编译不同的是,AOT 编译发生在应用程序执行之前,通常在不同的机器上进行。由于 AOT 工具链不在运行时进行编译,因此

无需最小化编译时间,可以投入更多时间进行优化。由于 AOT 的上下文是整个应用程序,AOT 编译器还会执行跨模块链接和全程序分析,这意味着它会跟踪所有引用并生成单个可执行文件。

JIT

AOT 类似,JIT 编译器将[IL 代码](#IL 代码)翻译成处理器能够理解的机器代码。但与 AOT 不同的是,JIT 编译是按需进行的,并且在代码运行的同一台机器上执行。由于 JIT 编译发生在应用程序执行期间,因此编译时间也包含在运行时时间中。所以,JIT 编译器必须权衡代码优化所花费的时间与最终代码带来的性能提升。但 JIT 编译器了解实际的硬件情况,可以让开发人员免于发布不同的实现版本。

IL

什么是 "中间语言(IL)"? 它是用高级 .NET 语言编写的代码编译的产物。编写其中一种语言编写的代码后,将会收到一个由 IL 编写的二进制文件。

值得注意的是,IL 独立于运行在运行时(Runtime)之上的任何特定语言;它甚至拥有一套独立的规范。

从高级代码生成 IL 后,如果要运行它,CLR 会接管工作,启动实时编译(JIT)编译过程,或者将代码从 IL 实时编译成真正可以在 CPU 上运行的机器码。这样,CLR 就能确切知道代码的作用,并有效管理代码。

CLR

是什么

.Net 的运行时环境,类似于 Java 的 JVM

做什么

  • JIT 编译
  • 内存管理
  • 类型系统
  • 异常处理
  • 安全校验

CLR 实现有哪些实现

  1. CoreClr
    • 微软官方的 CLR 实现
    • .Net 6/7/8/9 的核心运行时
  2. Mono
    • 早期第三方 CLR 实现
    • 后被微软收购
    • 现在是 .Net 官方运行时之一
  3. .Net Framework CLR
    • 仅支持 Windows 平台
    • 仅维护

Mono

Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源码项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334[1]和Ecma-335[2])的.NET工具,包括C #编译器和通用语言架构 。与微软的.NET Framework(共通语言执行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux、FreeBSD、Unix、OS X和Solaris,甚至一些游戏平台

Mono 由几个组件组成:

C#编译器 - Mono 的 C#编译器支持 C#1.0、2.0、3.0、4.0、5.0 和 6.0(ECMA)。各种版本的 C#编译器的特性描述可以在维基百科上找到。

Mono Runtime - 运行时实现了 ECMA 共同语言基础结构 (CLI)。运行时提供即时编译器、提前编译器 (AOT)、库装载器、垃圾收集器、线程系统和互操作性功能。

.NET Framework 类库 - Mono 平台提供了一系列全面的类,为构建应用程序提供坚实的基础。这些类与 Microsoft 的 .NET Framework 类相容。

Mono Class Library - Mono 还提供了许多类,这些类超越了 Microsoft 提供的基类库。这些类提供了额外的有用功能,尤其是在构建 Linux 应用程序时。一些示例包括 Gtk+、Zip 文件、LDAP、OpenGL、Cairo、POSIX 等类。

跨平台 ios

iOS 和 Mac Catalyst 上的 Mono 解释器 - .NET MAUI | Microsoft Learn

Il2cpp

严格意义上来说,IL2CPCPP 是 Unity 引擎中的一个脚本后端选项,而不是 C# 本身的一个术语, 它已经脱离了 .Net 生态。

IL2CPP(中间语言到 C++)是 Unity 的自定义、提前编译(AOT)脚本后端,最初是为 iOS 等不支持 即时编译(JIT)的平台开发的。 IL2CPP 将 IL( 中间语言 )转换为 C++,并将其编译成特定于平台的原生代码,然后以目标平台的标准格式打包到应用程序中,例如 APK /AAB、iOS 应用程序包或 Windows 可执行文件和 DLL。

IL2CPP 支持所有平台,并且可以提供比 Mono 脚本后端的几个好处,包括性能提升和启动时间缩短。

相关推荐
天马37982 小时前
Canvas 倾斜矩形绘制波浪效果
开发语言·前端·javascript
Tansmjs3 小时前
C++与GPU计算(CUDA)
开发语言·c++·算法
qx093 小时前
esm模块与commonjs模块相互调用的方法
开发语言·前端·javascript
Suchadar3 小时前
if判断语句——Python
开发语言·python
莫问前路漫漫4 小时前
WinMerge v2.16.41 中文绿色版深度解析:文件对比与合并的全能工具
java·开发语言·python·jdk·ai编程
九皇叔叔4 小时前
【03】SpringBoot3 MybatisPlus BaseMapper 源码分析
java·开发语言·mybatis·mybatis plus
00后程序员张4 小时前
对比 Ipa Guard 与 Swift Shield 在 iOS 应用安全处理中的使用差异
android·开发语言·ios·小程序·uni-app·iphone·swift
偷星星的贼115 小时前
C++中的对象池模式
开发语言·c++·算法
CN-Dust5 小时前
【C++】洛谷P3073 [USACO13FEB] Tractor S
开发语言·c++
2401_829004025 小时前
C++中的适配器模式变体
开发语言·c++·算法