什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

2024-01-02 00:32
文章标签 net cli jit il clr cts cls fcl bcl

本文主要是介绍什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是.NET?

 

起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service,也就是后来的.NET。


软件层:.NET可以被看作是介于操作系统和编程语言之间的软件层,它可以支持多种编程语言,包括C#,VB.NET,C++,F#,等等。


用来产生托管代码的框架、平台:传统的编译方式是"源代码→编译→可执行文件",在.NET中编译方式是"源代码→编译→程序集→可执行文件"。编译后的程序集包含IL代码和元数据,在运行时再转换成机器代码。


按开发到执行阶段来说:开发阶段.NET提供了庞大的类库,在程序执行阶段,.NET提供了一个CLR运行时环境帮助我们实时编译程序、进行安全检查、执行垃圾回收,管理内存等。

 

规范:.NET包含了众多的规范,比如CIL,BCL, FCL, CTS, CLS,等等。


什么是IL?

 

IL,Intermediage Language,中间语言,并不是CPU可以直接执行的本地机器语言,在转换成计算机可以识别的指令之前,还要进行一个被称为"Just in time"的二次编译过程。在.NET框架下,任何语言,比如C++,VB.NET,C#,等等,在经过各自的编译器编译之后,都会被转换成中间语言。IL还有另外的2种叫法:CIL,Common Intermediate Language;MSIL, Microsoft Intermediate Language。

 

查看IL代码,参考这里:http://www.cnblogs.com/darrenji/p/3967669.html

 

什么是CLI?

 

CLI,Common Language Infrastructure, 公用语言基础, .NET的各种规范都遵循了这个标准。

 

什么是BCL?

 

BCL, Basic Class Library, .NE为我们提供的基类库。

 

创建一个控制台项目。

 

把鼠标停留在Console上,并按F12。

 

发现Console是System的成员,点击System。

 

发现System是mscorlib的成员,点击mscorlib。

 

发现mscorlib是一个程序集,位于C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

 

也就是mscorlib包含了.NET的基类库。

 

string类型是否属于基类库呢?

 

把鼠标停留在string关键字上,并按F12。

 

发现string实际上是System.String类型,原来.NET为我们把关键字string和CLI标准System.String作了映射。

 

依此类推, btye映射了System.Byte, short映射了System.Int16, 等等。

 

像string, byte, short,等等,这些都是基元类型。所以,凡是把语言本省的关键字与CLI的类型映射起来的,都叫基元类型。

 

什么是FCL?

 

FCL, Framework Class Library, 框架类库,提供的类库更多,BCL是FCL的子集。比如,在ASP.NET MVC下提供了System.Web.MVC。

 

什么是CTS?

 

CTS, Common Type System, 公共类型系统。CTS规定了在编程语言中可以定义的方面,包括:类、结构、委托,类中的方法、字段、属性、事件等,还定义了一些约束,比如所有类型都隐式继承自System.Object类型。

 

什么是CLS?

 

CLS, Common Language Specification, 公共语言规范,必须完全符合CTS的标准,是CTS的子集。比如C#编译生成的程序集有很多类,VB编译生成的程序集也有很多类,现在VB编译需要引用C#程序集的某个类,怎么办呢?

 

我们需要让C#程序集中,需要被引用的这个类符合CLS规范,.NET为我们准备了CLSCompliant特性。

 

 
[assembly:CLSCompliant(true)] 
public class SomeClass
{    
}

 

什么是CLR?

 

CLR, Common Language Runtime, 公用语言运行时。IL代码需要通过CLR进行即时编译才能转换成机器代码。大致过程是:

 

编程语言代码编译生成程序集。程序集中的PE/COFF头包含了供Windows操作系统查看和使用的信息;CLR头告诉操作系统这是一个.NET程序集;程序集清单描述了程序集本身的信息,比如程序集标识、程序集包含的资源、组成程序集的文件,等等;元数据描述了程序集包含的内容,比如包含的模块、类型、类型成员、类型成员的可见性,等等。

 

CLR开始工作:管理应用程序域,加载和运行程序集, 安全检查, 将IL代码JIT编译成机器代码,异常处理, 垃圾回收,等等。

 

相关文章:


CLR如何加载程序集以及程序集版本策略   http://www.cnblogs.com/darrenji/p/4179916.html
查看是否安装.NET Framework、.NET Framework的版本号、CLR版本号   http://www.cnblogs.com/darrenji/p/3977406.html 
CLR是如何被加载并工作的   http://www.cnblogs.com/darrenji/p/4159259.html

 

什么是JIT?

 

JIT, just in time, 即时编译。在CLR中,把IL转换成机器代码的工作交给了JIT编译器。即时编译只在方法第一次被调用时发生。

这篇关于什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560902

相关文章

Windows中,.net framework 3.5安装

安装.net framework,目前已知2种方法,如下: 一、在MSDN下载对应的安装包,安装,这种可能无法安装成功,概率很大,不成功使用第二种方法,基本上没问题。 二、win8/8.1/10 下安装 .net framework 3.5.1: 1. 打开 win8/8.1/10 安装盘(这里指系统安装镜像文件),提取 sources\sxs 文件夹到 X:\sources\sxs (X代

ASP.Net.WebAPI和工具PostMan

1.WebAPI概述 1.1 WebAPI WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用各种属性和过滤器来处

【ASP.NET】 No 'Access-Control-Allow-Origin' header is present on the requested resource.

前端JS用XMLHttpRequest,请求后端数据。出现了No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 我是使用的ASP.NET框架。 解决办法: 在Web.config文件相应地方添加: <?xml version="1.0" encoding="utf-8"?><confi

vue dist文件打开index.html报Failed to load resource: net::ERR_FILE_NOT_FOUND

本地正常。打包好的dist文件打开index.html报Failed to load resource: net::ERR_FILE_NOT_FOUND 解决办法: 在webpack.prod.conf.js 中output添加参数publicPath:’./’ 在webpack.base.conf.js里 publicPath: process.env.NODE_ENV === ‘pro

导入别人的net文件报红问题sdk

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

.net 面试题总结(工作经验2年半)

一、Ajax调用的时候,get、post有什么区别? 答:get和post都是向服务器发送一种请求,只是发送机制不同     1 GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给WEB服务器。     2.首先是”GET方式提交的数据最多只能是1024字节”,Post传输的数据量大,可以达到2M。     3.get方式请求数据会被浏览器缓存起来,因此其

.Net Core 学习

1、.Net Core 环境搭建 安装.NET Core:     .NET Core 包括.NET Core Runtime 和 .NET Core SDK: NET Core = 应用运行依赖的 .NET Core RuntimeNET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI(Software Developmen

ADO.NET 学习汇总

一、ADO.NET 概要 ADO.NET  是 .NET 框架中的重要组件,主要用于完成C# 应用程序访问数据库。   说明: Connection:连接  ,  Transaction :事务   , Parameters : 参数 Command : 命令  ,SelectCommand 查询命令,InsertCommand 插入命令,UpdateCommand 更新命令

.net平台下深拷贝和浅拷贝(实现ICloneable接口的基础上)

在.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆其对象实例的能力。所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的。 基本概念: 浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,

.NET 实现实体对象深拷贝(克隆/复制)的几种方法

浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,实现的都是浅拷贝,引用类型对象之间的赋值,就是复制一个对象引用地址的副本,而指向的对象实例仍然是同一个。 深拷贝:指对象的子段被拷贝,同时字段引用的对象也进行了拷贝。深拷贝创建的是整个源对象的结构,拷贝对象和原对象相