.NET 与 C#、CLR 的关系
.NET 是一个通用的开发平台,最初主要用于 Windows 上的应用开发。它包括一个庞大的类库(Framework Class Library, FCL)和运行时环境(CLR),能够支持多种编程语言的开发,如 C#、VB.NET、F# 等。Microsoft 在 .NET 平台上提供 3 种语言 – C#、F# 和 Visual Basic。
.NET 的生态
.NET 由 Microsoft 和社区维护。.NET 受到多个组织的支持。其中的商业组织只有 Canonical、Red Hat 和微软自己,所以更像是微软自己玩自己的。
.NET 基金会的项目页面的项目一定程度上支持了上面的观点。所以学 .NET 比较容易和微软绑定在一起。
.NET 组件
.NET 包括以下组件:
- 运行时 -- 执行应用程序代码。
- 库 -- 提供实用工具功能,如 JSON 分析。
- 编译器 -- 将 C#(和其他语言)源代码编译为(运行时)可执行代码。
- SDK 和其他工具 -- 支持使用新式工作流生成和监视应用。
- 应用堆栈 -- 例如 ASP.NET Core 和 Windows 窗体,支持编写应用。
运行时、库和语言是 .NET 堆栈的重要组成部分。 高级组件(例如 .NET 工具)和应用堆栈(例如 ASP.NET Core)基于这些重要部分生成。 C# 是 .NET 的主要编程语言,.NET 的大部分内容都是用 C# 编写的。
参考资料
learn.microsoft.com/zh-cn/dotne… learn.microsoft.com/zh-cn/dotne…
.NET 与 Mono 的关系
.NET (Core) 和 Mono 是 .NET 的两种不同实现。
.NET 实现:
- .NET Framework -- 原始 .NET。 它提供对 Windows 和 Windows Server 的广泛功能的访问权限。 在维护方面它得到了积极的支持。
- Mono -- 原始社区和开放源代码 .NET。 一个跨平台 .NET Framework 实现。 积极支持 Android、iOS 和 WebAssembly。Mono 是主要在需要小型运行时使用的 .NET 实现。 它是在 Android、macOS、iOS、tvOS 和 watchOS 上驱动 Xamarin 应用程序的运行时,且主要针对小内存占用。 Mono 还支持使用 Unity 引擎生成的游戏。
- .NET (Core) -- 新式 .NET。 .NET 的一个跨平台开放源代码实现,已针对云时代进行了反思,同时与 .NET Framework 保持极大的兼容。 积极支持 Linux、macOS 和 Windows。
- UWP 是用于为物联网 (IoT) 生成新式触控 Windows 应用程序和软件的 .NET 实现。
参考资料
learn.microsoft.com/zh-cn/dotne…
Unity
Unity 引擎是用原生 C/C++ 在内部构建的,不过它有一个 C# 封装器可用来与之交互。截止 2024 年 8 月 16 日,Unity 6000.0 版本采用的 C# 编译器是 Roslyn,支持的 C# 版本是 9.0。(不完全支持,参考网站)
Unity 官方博客内容(.NET 和 Unity 的未来)
Unity 与 .NET 的故事要从 17 年前说起,当时我们的 CTO 决定开始采用 Mono .NET 运行时和 C#。Unity 之所以偏爱 C#,不仅是因为它很简单,还因为 JIT(just-in-time)编译器可以将 C# 代码转译成效率较高的原生代码。而为了做到性能平衡、可控,Unity 引擎剩下的大部分都采用了 C++ 开发。
多年来,Unity 一直依靠着 Mono .NET 运行时和 C# 语言(2.0)的一个特定分支来运行。在这期间,引擎对其他平台的支持也在不断扩增。我们还开发了自己的编译器和运行时:IL2CPP,让你能够针对iOS及部分主机平台进行开发。
与此同时,整个微软.NET生态系统也在不断发展,并推出了新的许可和对非Windows平台的支持。我们借着这股东风在2018年升级到了Unity .NET Mono Runtime,并引入了更现代的C#版本(7.0以上)。同年,我们还发布了Burst编译器的首个版本,开创了为C#分支快速生成原生代码的先河。在取得这一突破后,Unity提出了一个新设想:将C#拓展到引擎剩余几个关键部分、不再用C++进行开发,并为DOTS运行时的开发做铺垫。
Unity 2020 LTS和Unity 2021 LTS带来了新版C#语言和.NET API(如Span)。同时,我们也看到.NET生态的性能有了极大的改善,其引入的csproj SDK风格和蓬勃发展的NuGet生态正在让开发环境变得更加友好。
经过长时间的发展,Unity已经包含了一个巨大的C++代码库,它继承了Mono .NET Runtime的职能来直接与.NET对象互动。这些代码对.NET (Core) Runtime来说不再合规或高效。
此外,Unity编辑器还绑定着一条复杂的自定义编译管线,它不依靠MSBuild运行,因此也不能轻易从引擎特性中获益。
在过去几年里,我们也一直在积极与广大用户交流,包括个人采访和Unity论坛,以发掘出真正能促使用户成功的改进。 我们听到大家非常想使用最新的C#语言、.NET运行时技术和NuGet的第三方C#代码。在谈到Unity平台的使用时,大家都说希望借助高质量的C#测试、调试和剖析工具,标准.NET API和Unity API的优秀整合,来最大限度地挖掘出硬件的性能。 作为一名Unity C#程序员,你希望Unity工具能够与工具箱中的其他工具无缝衔接,能实现快速迭代,从而实现一流的运行时性能。
我们的工作将建立在.NET生态系统之上,而非开发定制解决方案。为了让用户能享受新版.NET SDK/Runtime和MSBuild所带来的性能与生产力提高,我们将从Mono .NET Runtime转移到CoreCLR,即现代的.NET (Core) Runtime。
这项行动也会带来当前.NET领域以外的创新,让C#脚本能更快地完成.NET迭代。我们将致力于结合IL2CPP和Burst这两个JIT和AOT (ahead-of-time) 解决方案,在编译效率和CodeGen(代码生成)质量之间的达到最佳平衡。
在外部,我们将与微软、JetBrains等业内伙伴合作,保证Unity创作者能用上最新的.NET技术。我们也在进一步深入参与开源社区。 这项工作将分成几个步骤进行。再来看看我们未来的计划。