什么是.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编译器。即时编译只在方法第一次被调用时发生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL5安装配置笔记【超详细】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

异步、多线程、任务、并行编程之一:选择合适的多线程模型

本篇概述: FCL4.0中已经存在的线程模型,以及它们之间异同点; 多线程编程模型的选择。 1:异步、多线程、任务、并行的本质 这四个概念对应在CLR中的本质,本质都是多线程。 异步,简单的讲就是BeginInv…

IDEA常用快捷键大合集

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

KnockoutJs篇:快速掌握KnockoutJs

一、引言 之前这个系列文章已经介绍Bootstrap。由于最近项目中,前端是Asp.net MVC KnockoutJs Bootstrap来做的。所以我又重新开始写这个系列。今天就让我们来看看Web前端的MVVM框架——KnockoutJs。 二、KnockoutJs是什么? 做.NET开发的人应该都知道…

IDEA常用设置【很实用】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

【git下载安装与配置】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

git 连接gitee时报错 Auth error: Access deined: authorize failure

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &#x1…

Jenkins Ci系列目录

Jenkins入门篇 1.Jenkins入门之界面概览 2.Jenkins入门之新建任务 3.Jenkins入门之导航操作 4.Jenkins入门之任务基本操作 5.Jenkins入门之执行Powershell脚本 6.Jenkins入门之执行定时任务 Jenkins结合.net平台工具 7.Jenkins结合.net平台工具之Msbuild 8.Jenkins结合.net平…

REST风格笔记【简介篇】

RSET简介 REST(Representational State Transfer),表现形式状态转换。 REST书写方式比较节俭,其隐藏了资源的访问行为,我们无法通过地址得知对资源是何种操作。 传统风格资源描述形式 📐 http://localhost…

C#多线程编程系列(五)- 使用任务并行库

目录 1.1 简介1.2 创建任务1.3 使用任务执行基本的操作1.4 组合任务1.5 将APM模式转换为任务1.6 将EAP模式转换为任务1.7 实现取消选项1.8 处理任务中的异常1.9 并行运行任务1.10 使用TaskScheduler配置任务执行参考书籍笔者水平有限,如果错误欢迎各位批评指正&…

【VSCode快捷键大合集】

👨‍🎓 博主介绍:大家好,我是超梦梦梦梦,很高兴认识大家~ 🙏如果本博文对小伙伴们有帮助的话,欢迎🔎关注➕🤞点赞➕📋评论➕😄收藏一波哦~ &…

浅谈Vue.js的优势

写在前面 今天小梦跟小伙伴们简简单单聊一下Vue.js的优势。小梦也是刚刚接触Vue.js,在学习一门新的技术之前,我们当然要了解其优势,知道优势在哪更加有利于我们去学习并转换为自己的储备。 浅谈Vue.js的优势 首先Vue.js是一个轻巧、高性能、…

async await 的前世今生(Updated)

async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了。但是这也给我们编程埋下了一些隐患,有时候可能会产生一些我们自己都不知道怎么产生的Bug&…

MySQL八大约束

MySQL约束MySQL约束主键约束(primary key)自增长约束(auto_increment)非空约束(not null)唯一约束(unique)默认约束(default)零填充约束(zerofill)外键约束(foreign key)MySQL约束 概念 约束英文:constraint约束实际上就是表中数据的限制条件 作用 表在设计的时…

ASP.NET使用管道模型(PipleLines)处理HTTP请求

大多数人认为ASP.NET仅仅只是页面——使用模板来创建HTML页面然后返回给浏览器。但是这仅仅只是ASP.NET使用HTTP管道模型处理WEB程序很小的一方面。管道模型是类似于Web Services的一种在服务器端处理ASP.NET页面的框架技术。作为一名高级的ASP.NET的开发者,你必须清…

【LeetCode-SQL每日一练】——1.组合两个表

🎈写在前面 🙋‍♂️大家好呀,我是超梦梦梦梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好…

【LeetCode-SQL每日一练】——2. 第二高的薪水

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

各类锁(互斥锁,自旋锁,读写锁,乐观锁,悲观锁,死锁)

互斥锁 当有一个线程要访问共享资源(临界资源)之前,会对线程访问的这段代码(临界区)进行加锁。如果在加锁之后没释放锁之前其他线程要对临界资源进行访问,则这些线程会被阻塞睡眠,直到解锁&…

【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工

🎈写在前面 🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁 / 非公平锁可重入锁 / 不可重入锁独享锁 / 共享锁互斥锁 / 读写锁乐观锁 / 悲观锁分段锁偏向…