尽量通俗易懂地概述.Net && U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享

目录

[1. .Net是什么?](#1. .Net是什么?)

[2. .Net框架的核心要点?](#2. .Net框架的核心要点?)

跨语言和跨平台

[.Net x Unity跨平台发展史](#.Net x Unity跨平台发展史)

[Net Framework 2002](#Net Framework 2002)

[Unity跨平台之 Mono 2004](#Unity跨平台之 Mono 2004)

[Unity跨平台之 IL2CPP 2015](#Unity跨平台之 IL2CPP 2015)

二者区别

[.NET Core 2016](#.NET Core 2016)


1. .Net是什么?

类似于次世代,互联网+的一种口号,就是一个系列产品的名字

其最核心的运行库框架叫.Net Framework,开发工具叫Visual Studio( .Net 后来去掉了),所以很多人认为其特指.Net Framework也是很正常的事情

这种事情知道就行了

2. .Net框架的核心要点?

跨语言和跨平台

为什么要跨语言?

因为各种语言的特点是不同的,擅长方向也不同,另外代码重用和团队协作也很需要跨语言

这部分涉及到几个新名词,能理解就理解,不能也没关系

  1. **CLS(Common Language Specification):**包含了所有 .NET 语言必须支持的特性和规则

  2. CTS(Common Type System):包含了所有 .NET 语言的数据类型和规则

  3. CLI(Common Language Infrastructure):包含了 .NET 框架的所有基础设施

用 Venn 图表示如下:

+-----------------------------+
|            CLI              |
|  +-----------------------+  |
|  |         CTS           |  |
|  |  +---------------+    |  |
|  |  |     CLS       |    |  |
|  |  +---------------+    |  |
|  +-----------------------+  |
+-----------------------------+

.Net x Unity跨平台发展史

Net Framework 2002

.NET Framework 本身主要是为 Windows 平台设计的,因此它不具备跨平台能力,其特点如下

面向对象编程环境:提供一个一致的面向对象编程环境,无论代码是在本地存储和执行,还是在分布式环境中运行

丰富的类库:包含大量的类库,支持常见的编程任务,如文件操作、数据库访问、网络通信、图形界面等

内存管理和垃圾回收:通过 CLR 提供自动内存管理和垃圾回收,减少内存泄漏和管理的复杂性

安全性:提供代码访问安全和验证,确保代码在受控环境中运行

拆解

1.首先代码会被编译成 CIL(Common Intermediate Language 公共中间语言)

CIL 是一种中间语言,当你编写的代码(如 C#、VB.NET 或 F#)被编译时,会生成 CIL 代码。CIL 是与平台无关的,这意味着它可以在任何安装了 CLR 的平台上运行

CIL也叫IL其有三种转译方式

1.即时编译(JIT)

即时编译(Just-In-Time Compilation, JIT)是在程序运行时将 CIL 代码编译成机器代码。这种方式可以在运行时进行优化,但可能会导致初始启动时的性能开销。

  1. 预编译(AOT)

预编译(Ahead-Of-Time Compilation, AOT)是在程序部署之前将 CIL 代码编译成机器代码。这种方式可以减少运行时的开销,提高启动速度,但灵活性较低。

  1. 解释执行

解释执行是直接解释和执行 CIL 代码,而不进行编译。这种方式通常用于调试和开发环境,性能较低

2.运行时,CLR (Common Language Runtime,公共语言运行时) 将 CIL 代码通过 JIT 编译器编译成机器代码,然后在具体的硬件上执行可以说代码就是在CLR上面运行的

CLR 是 .NET 平台的运行时环境,负责管理代码的执行。它提供内存管理、安全性、异常处理和垃圾回收等服务CLR 的一个重要功能是即时编译(JIT),它会在运行时将 CIL 代码编译成机器代码,以便在具体的硬件上执行

微软后来推出了 .NET Core(现已统一为 .NET 5 及更高版本),这是一个真正的跨平台框架,支持在 Windows、Linux 和 macOS 上运行

Unity跨平台之 Mono 2004

Mono 是一个开源的 .NET Framework 实现,旨在使 .NET 应用程序能够在多个平台上运行

Mono 主要使用 JIT 编译来执行 CIL 代码

其核心就是将.NET Framework 的CLR换成了Mono VM 代码在这上面执行

相当于在不同平台创建了自己的虚拟机(比如window有window虚拟机,安卓有安卓虚拟机,ios有ios虚拟机),从而将中将代码转为机器码

但是这么做工作量会很大,毕竟每一个平台的虚拟机都要维护

其优缺点如下

Unity跨平台之 IL2CPP 2015

IL2CPP(Intermediate Language To C++)是 Unity 提供的一种编译技术,它将 .NET 中间语言(IL)代码转换为 C++ 代码,然后再编译成机器代码这种方法主要用于提高性能和支持 AOT(Ahead-Of-Time)编译

IL2CPP 的主要特点包括:

性能优化:通过将 IL 转换为 C++,可以进行更多的优化,提升运行时性能

平台支持:IL2CPP 支持多种平台,包括移动设备、控制台和 WebAssembly

安全性:AOT 编译可以减少反编译的风险,提高代码安全性

IL2CPP 使用 AOT 编译

注意看,其是将CIL转为C++ 之后通过各个平台的C++编译器转为机器码 最后通过IL2CPP VM虚拟机运行,但这个虚拟机仍然采用c#的GC方式 所以使用起来也是安全放心啊

其优点如下:

二者区别

.NET Core 2016

.NET Core 是一个开源、跨平台的开发框架,适用于构建现代、高性能的应用程序,其特点如下

跨平台:支持在 Windows、Linux 和 macOS 上运行,真正实现了跨平台开发

开源:.NET Core 是开源的,源代码托管在 GitHub 上,任何开发者都可以参与贡献

高性能:相比于 .NET Framework,.NET Core 提供了更高的性能,特别是在服务器端应用程序中

模块化:.NET Core 采用模块化设计,可以根据需要引用特定的库,减少应用程序的体积

灵活部署:支持多种部署方式,包括自包含部署和框架依赖部署,可以根据需求选择最合适的方式

统一编程模型:通过 .NET Standard,提供了一个统一的 API 集合,使得不同平台上的代码可以共享

其通常运用在如下方面

Web 应用开发:使用 ASP.NET Core 构建高性能的 Web 应用和 API,支持在 Windows、Linux 和 macOS 上运行

云服务:适用于构建和部署云原生应用,支持与 Azure 等云平台的无缝集成

微服务架构:支持构建基于微服务架构的应用,提供了良好的扩展性和可维护性

桌面应用:通过 .NET Core,可以构建跨平台的桌面应用程序,特别是使用 .NET MAUI(Multi-platform App UI)

移动应用:结合 Xamarin 和 .NET MAUI,可以使用 .NET Core 构建跨平台的移动应用2。

物联网 (IoT):支持构建物联网设备上的应用程序

相关推荐
SRC_BLUE_172 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less
yngsqq2 小时前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift
Zԅ(¯ㅂ¯ԅ)2 小时前
C#桌面应用制作计算器进阶版01
开发语言·c#
鹿野素材屋3 小时前
Unity Dots下的动画合批工具:GPU ECS Animation Baker
unity·游戏引擎
hccee4 小时前
C#之异步编程
c#
麻花20134 小时前
C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值
开发语言·c#·wpf
Crazy Struggle4 小时前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库
sukalot5 小时前
windows C#-异步文件访问
开发语言·c#
时光追逐者6 小时前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
huaqianzkh6 小时前
学习C#中的Parallel类
windows·microsoft·c#