.NET Framework 之 Common Language Runtime

CLR是什么?
上次讲到运行在.NET Framework中的代码叫做managed code,反之叫做unmanaged code。相比unmanaged code,managed code 有很多好处,比如可以用多种编程语言编写、提高安全性、易于版本控制和程序发布等等。这些都是由CLR提供的。但也有一些不利点,最容易想到的就是代码运行速度问题了。

要为managed code提供以上功能,CLR必须知道代码中的数据类型、类和与她有关连的assembly的定义。这些信息叫做metadata,而metadata就包含在代码中的某个部分(编译后)。CLR利用这个metadata加载代码段、管理内存、执行方法调用等操作。

.NET出来以前,在不同编程语言之间共享原代码,简直是不可能的事情。因为每个编程语言定义的数据类型不同,而且语法也不同。微软大师们想到了把数据类型统一的好办法。这个技术叫CTS(common type system)。现在做项目开发就比较简单了(用不同语言),比如一个项目组里有会用VB的,会用C++的。可能以前的方法是把两个人之间互相调用的功能写成DLL或COM。但现在不用这么麻烦了,你直接就可以使用其他语言编写的代码了。具体一点,用VB.NET可以继承C++.NET写的类,反过来也是可以的。

我们安装软件的时候常碰到这样的提示 - 系统中的组件比要安装的组件的新,你要替换还是保留?是不是很讨厌?!现在开始你就用.NET吧,她不会因为这个“小”问题而打扰你了。因为每个代码都包含与她相关的metadata,CLR会根据这个信息来管理代码的不同版本。而且因为不用把代码的信息注册到注册表,所以可以用X-COPY的方式安装代码(就是简单的拷贝粘贴了)。

是用VB做好呢?还是用C++做好呢?这些问题是我们做项目的时候常要考虑的问题。但在.NET用什么编程语言已经变得不重要了(但还是有一定的差别,在特定项目中),因为CLR提供CTS(还有base class library),而且都运行在CLR上面。在.NET中VB,C++等语言都有了相当多的提高,而且有了新的语言C#。C#已经申请了标准而且通过,可想而知她的POWE了。大家知道borland也发布了相关的开发工具C# builder。

做个小结

1、.NET代码都包含与自己相关的信息叫做metadata。

2、CLR提供CTS(CLS也有功劳),所以可以在不同编程语言之间共享原代码。

3、 用metadata管理代码信息(不是利用注册表),所以代码易于安装。

4、 使用统一的数据类型和类库,所以编程语言的选择变得不重要了,而且易于团队开发。

代码在CLR中的运行过程

1、选择编译器

首先CLR选择编译器,因为CLR中可以运行不同语言开发出来的代码。

2、把代码编译成MSIL

CLR利用选择的编译器生成MSIL(Microsoft intermediate language)和metadata把她们加载到PE(portable executable file)。

MSIL:解释语言,包含代码信息,让JIT易于编译成机器语言。与操作系统和编程语言无关。

PE:可执行文件格式,windows就是DLL或EXE了。

3、用JIT编译器把MSIL编译成机器语言

有两种方式一种是只编译当前执行的代码段,另一种是把整个代码一次性编译。JIT会检测代码的安全性。

4、 执行代码

代码首次调用就会编译成机器代码,再次调用的时候就不再重新编译了。

相关工具

-MSIL生成器 - MSIL Assembler(ilasm.exe)

-MSIL反编译器 - MSIL Assembler(ildasm.exe)

使用法

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconmsilassemblerilasmexe.asp

相关资料

-PE结构

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmetadatapefilestructure.asp

参考资料

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsourcecodelanguage.asp

时间: 2024-08-15 21:25:51

.NET Framework 之 Common Language Runtime的相关文章

Common Language Runtime

CLR是什么? 上次讲到运行在.NET Framework中的代码叫做managed code,反之叫做unmanaged code.相比unmanaged code,managed code 有很多好处,比如可以用多种编程语言编写.提高安全性.易于版本控制和程序发布等等.这些都是由CLR提供的.但也有一些不利点,最容易想到的就是代码运行速度问题了. 要为managed code提供以上功能,CLR必须知道代码中的数据类型.类和与她有关连的assembly的定义.这些信息叫做metadata,而

.NET Framework For Java Programmers

.NET Framework For Java Programmers Author: Ashish Banerjee Objective After reading this article Java programmers should be able to decipher and de-jargonize the .NET architecture and relate it with the proposed ECMA standard.    Target Audience Java

.NET Framework For Java Programmers ---2(Good)

CLS - Common Language Specification The Common Language Specification (CLS) aids the development of mixed language programming. It defines a subset of Common Type System which all class library providers and language designers targeting CLR must adhe

.NET Framework For Java Programmers ---1(Good)

.NET Framework For Java Programmers Author: Ashish Banerjee Objective After reading this article Java programmers should be able to decipher and de-jargonize the .NET architecture and relate it with the proposed ECMA standard.    Target Audience Java

.NET 对 J2EE[2]

j2ee Picking a Winner: .NET vs. J2EE Although both frameworks stand on a foundation of programming languages, object models and virtual machines, they are strikingly different when you consider the design goals of their runtime environment. The Java

Is your .NET Code safe?

Is Your Code Safe? VS.NET's use of Microsoft Intermediate Language creates big advantages, but exposes VB.NET on the desktop. by Dan FergusURL: http://www.vbpj.com/upload/free/features/vbpj/2001/05may01/df0501/df0501-1.asp In the Visual Studio.NET (V

剖析.NET Framework

大家一定对Web Service模型在.NET中的重要性都有所了解,那么,我们如何才能容易地部署.维护一个可支持几百万客户端的Web Service呢?这需要选择恰当的基础架构,也就是.NET Framework设计的目标. .NET Framework是在Microsoft .NET平台上进行开发的基础,.NET Framework以及针对设备的.NET Framework简化版为XML Web服务和其他应用程序提供了一个高效安全的开发环境,并全面支持XML. 核心技术 .NET Framew

.NET Framework For Java Programmers ---3(Good)

Assemblies An assembly is the functional unit of sharing and reuse in the Common Language Runtime. It is the equivalent of JAR (Java Archive) files of Java. Assembly is a collection of physical files package in a .CAB format or newly introduced .MSI

C# and .NET Framework books

最近对C#产生了兴趣,加上为回国做准备,需要拓宽一下视野,所以列了一个C#和.NET因为框架的书单,都是英文的,因为英文书原汁原味,内容也比较新. 这个单子是根据google group和amazon的讨论评价选出来的,着重点在于C#语言的基本概念和特点,.NET框架的深度详细分析. .NET Framework Standard Library Annotated Reference, Volume 1: Base Class Library and Extended Numerics Lib