.NET平台的区分语言、运行时和库

深入解析C# 一书中对.NET平台的描述,相当的中肯

1.3 .NET平台

最开始引入时,.NET这个词涵义甚广,用来包罗微软公司的多种技术。例如,Windows Live ID曾被叫做.NET Passport,虽然它和目前的.NET没有任何明显的联系。幸好,这个混乱的局面逐渐平息下来了。本节要探讨.NET的各个组成部分(至少那些我们感兴趣的部分),以及它们是如何分开指定版本的。

1.3.1 区分语言、运行时和库

本书会提到3种不同的特性:C#语言本身的特性、运行时(runtime)的特性(可以认为运行时提供了程序运行的一个"引擎")以及.NET框架库的特性。本书重点是在C#语言上。只有在与C#本身的特性有关时,才会解释运行时和框架的特性。但是,只有在你清楚地理解了3者的差异之后,才能真正理解这些特性。特性经常会发生重叠,但重要的是理解。

1. 语言

C#语言是由它的规范来定义的。C#规范描述了C#源代码的格式,其中包括语法和行为。规范中并没有描述编译器输出要在什么平台上运行,只描述了两者进行交互的要点。例如,C#语言需要一个名为System.IDisposable的类型,其中包含一个名为Dispose的方法。它们是定义using语句所必须的。同样,平台需要(不管以什么样的形式)同时支持值类型和引用类型,另外还要支持垃圾回收。

理论上,任何平台只要支持要求的这些特性,C#编译器就可以以它为目标平台。例如,C#编译器除了可以以IL形式(IL是指中间语言,是本书写作期间,最常见的一种输出形式)输出外,还可以以其他合法形式输出。运行时完全可以对C#编译器的输出进行合法解释,而不必非要对它进行JIT编译。在实际应用中,虽然对IL进行解释是完全可行的(Mono甚至真的支持解释型执行),但在除了.NET之外的其他平台上,C#是不大可能获得广泛运用的。

2. 运行时

.NET平台的运行时部分是数量相当少的一些代码,它们负责确保用IL写的程序以符合"CLI规范Partitions I~III"的方式执行 。CLI的运行时部分称为CLR。本书以后提到CLR时,是指微软实现的CLR。

语言的一些元素永远不会在运行时的级别上出现,但也有一些元素越过了这个界线。例如,枚举器(enumerator)就不是在运行时的级别上定义的。相比之下,虽然数组和委托对IDisposable接口来说没有任何特别的含义,但它们对于"运行时"来说都是十分重要的。

3. 框架库

库提供了可供我们在程序中使用的代码。.NET中的库主要是以IL的形式构建的,只有在必要的时候才使用本机代码。这是运行时优势的一个体现:你自己写的代码并非天生就是"二等公民"--它完全能够提供与它利用的库一样强大的功能和性能。库中的代码量要比运行时的代码量多得多,这跟车和引擎的关系是一样的。

.NET库得到了部分标准化。CLI规范的Partition IV提供了大量不同的概要(profile)协议和核心内容库。Partition IV包含两个部分。第一部分是对库的常规文字描述,包括哪些配置文件中包括哪些库。第二部分则以XML格式描述了库本身的细节。这是在C#中使用XML注释时生成的相同形式的文档。

不过,.NET中有许多东西都不是基本库所定义的。如果写一个程序,在其中只使用来自规范定义的库,而且以正确的方式使用它们,那么代码应该能在任何实现(包括Mono、.NET等)上顺利地运行。但在实际应用中,几乎任意规模的任意程序都会使用非标准的库,如Windows Forms或ASP.NET。Mono项目也有它自己的、不是.NET一部分的库,如GTK#。另外,它也实现了许多非标准的库。

.NET一词是指微软公司提供的运行时和库的组合,其中也包含C#和VB.NET编译器。可以把它视为在Windows顶部构建的一个完整的开发平台。

在知道了术语的含义之后,接着可以看看各自可用的不同版本。要想弄清楚微软公司对于版本号的选择以及每个版本都包括什么,这并不是一件轻松的事情。但是,当我们谈到一个特定的版本时,必须都明白现在谈的哪一个版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值