笔记:.NET的框架梳理及相关概念了解(“.NET Core“ “.NET“ “.NET Framework“)

server/2024/9/23 9:07:23/

一、.NET设计

  1. 架构:C/C++程序是直接将源码编译成机器码(CPU可以识别和运行的指令),对于不同CPU,其指令集不同,机器码也就不同,故:C/C++程序编译时,需选择具体的CPU架构,如:X86、X64、ARM等。
  2. 系统:C/C++语言的标准具有滞后性,程序需要的功能在标准中未必支持,但操作系统已提供(如:网络库、线程库等),且不同操作系统提供的库和API不同,故:程序需要解决系统兼容性问题。
  3. 综上:.NET设计了一种软件实现方式,即:在编译和机器码之间再抽象出一层中间层,通过中间层来屏蔽系统和架构的不同,中间层的指令被称为中间语言。

二、.NET框架

——————————————————————————————————————————————————
语言层:“C#” “F#” “VB”
——————————————————————————————————————————————————
中间层:“中间语言”
——————————————————————————————————————————————————
实现层:“.NET Core” “.NET” “.NET Framework” “Mono” “Xamarin” “UWP”
——————————————————————————————————————————————————

“.NET Core” 5.0及其以后的版本改名为".NET",去掉Core关键字。

注意:语言层有语法标准,中间层有中间语言标准,但是实现层并没有统一的标准,导致编译时必须选择具体的实现层,.NET实现层的不同类似于C/C++下的CPU架构不同。

三、实现层的多套实现

“.NET”、“.NET Framework”、"Mono"等都是让"中间语言"能够在目标机器上能够正常运行的一种实现方式,即:对抽象的具象化实现

实现的组成:运行时、类库、开发工具(可选)和框架(可选)等。

为什么实现层会有多套实现逻辑呢?
主要还是因为需求的不同,进而导致了实现的不同。

不同实现的应用场景如下:

.NET5及更高版本(以前称为 .NET Core):支持服务器、云服务、桌面应用以及跨平台。
.NET Framework:包含一些特定于 Windows 的 API,因此只能在Windows下执行,无法跨平台,适合于Windows下的开发。
UWP(Universal Windows Platform):为物联网 (IoT) 设备开发具有触控功能的Windows 应用程序。
Mono:特点是轻量级,占用内存较小,如:Android、macOS、iOS、tvOS 和 watchOS 上驱动 Xamarin 应用程序的运行时。

四、推动实现层的标准化(.NET Standard)

.NET Standard是实现层的一套标准。

实现层的每种实现都按照自己的版本规划对标准进行实现,即:每种实现除支持.NET Standard外,还具有自己的一些特性,是.NET Standard的超集。

:若程序的实现层选择.NET Standard,那么就可以在所有支持.NET Standard的实现中运行,无需再为不同的实现生成不同的库。

五、常见术语

运行时(runtime):通常指托管程序的运行环境。
托管代码(managed code):托管代码就是执行过程交由运行时管理的代码。
非托管代码(unmanaged code):C/C++程序的运行代码称为“非托管代码”。
托管代码来源:由 .NET 的高级语言(例如 C#、Visual Basic、F# 等)编译后得到。
机器码(machine code):可以被CPU识别和运行的代码。

用编译器编译语言编写的代码得到中间语言代码,无法获得机器代码,在运行时会对其中间语言代码进行编译,才会得到机器代码,再交由CPU执行。
C++ 能够直接生成可在 Windows 上运行的机器码,而非托管代码。

公共语言运行时 (Common Language Runtime: CLR):负责提取托管代码、将其编译成机器代码,然后执行它。
中间语言(Intermediate Language: IL): 由.NET高级语言编译后得到的产物,中间语言独立于.NET高级语言,有自己的规范标准。
公共中间语言(Common Intermediate Language: CIL):“中间语言”的别称。
实时编译(Just-In-Time: JIT, compiling):在应用程序运行时按需将 CIL 转换为机器码。

六、参考资料

《.NET官网教程》
《.NET 术语表》
《.NET 实现》
《.NET Standard》
《托管代码》


http://www.ppmy.cn/server/19990.html

相关文章

深度学习基础:循环神经网络中的长期依赖问题

循环神经网络中的长期依赖问题 在深度学习中,循环神经网络(RNN)是一种经典的模型,用于处理序列数据,如自然语言处理、时间序列预测等任务。然而,传统的RNN存在着一个长期依赖问题,即在处理长序…

linux demo

1.1)if case test the results #!bin/bash read -p “请输入你的成绩:” num if [ $num -ge 0 ] && [ $num -le 100 ];then if [ $num -ge 80 ] && [ $num -le 100 ];then echo “成绩优秀” elif [ $num -ge 60 ] && [ $num …

redis单线程模型

工作原理 在Redis中,当两个客户端同时发送相同的请求时,Redis采用单线程模型来处理所有的客户端请求,会依次处理这些请求,每个请求都会按照先后顺序被执行,不会同时处理多个请求。使得Redis能够避免多线程并发访问数据…

element-plus 如何获取所有的icon图标名称,并排列展示?

一、获取所有的element-plus中icon图标: import * as ElIcon from element-plus/icons-vueconsole.log(ElIcon) 从控制台打印可以看到,ElIcon为所有的icon组成的对象,要组成包含icon名称的数组,可以去key值或者name值&#xff08…

【Git】分支管理的基本操作

文章目录 理解分支分支的本质主分支创建分支切换分支合并分支fast-forward模式删除分支合并冲突问题 理解分支 分支管理是git的一个核心功能。在git中,分支是用来独立开发于某个功能或者修复某个bug的一种方式。就像是《火影忍者》中的鸣人使用分身去妙蛙山修炼&am…

package.json 里面的 dependencies 和 devDependencies 的差异

差异 其实不严格的话,没有特别的差异;若是严格,遵循官方的理解。 dependencies:存放线上或者业务能访问的核心代码模块,比如 vue、vue-routerdevDependencies:处于开发模式下所依赖的开发模块&#xff0c…

windows ubuntu linux三剑客,sed awk grep 篇,1.

用 sed 和 awk 提高你的 UNIX 和 Linux 水平 目录 第一章:Sed 语法和基本命令 1.1 Sed 命令语法 1.2 Sed 脚本执行流程 1.3.打印模式空间(命令 p) 4.删除行 1.5把模式空间内容写到文件中(w 命令) 第一章:Sed 语法和基本命令 所有的示例都要用到下面的 e…

Post请求中常见的Content-Type类型

Post请求中常见的Content-Type类型的结构 (1)application/x-www-form-urlencoded 这是浏览器原生的form表单类型,或者说是表单默认的类型。 下面是一个请求实例: 请求报文: 可以看得出,post将请求参数以k…