一.前言
去年的这个时候读了Don Box的《Essential .NET Volume 1: CLR》(《.NET 本质论 卷一:CLR》),当时囫囵吞枣似的匆匆读完,没有认真咀嚼大师的思想,有点暴殓天物的感觉。今日又在图书馆拿出这本书,心中有很多体会,也许就像他本人所说,Don Box的书不应该只读一遍的。
在这篇读书笔记中,我将原书的中一些重点摘抄下来,同时对书中的一些观点也会提出自己的思考。好了,废话不说,让我们开始吧。(本人才疏学浅,难免有许多疏忽和错误之处,希望大家能进行指正)
二.第一章 CLR是一个更好的COM
1.组件技术强调程序之间的约定(contract),COM之间的组件约定是基于二进制的,同时没有一种标准的描述形式。(受到现实环境所累)
2.COM为什么消亡了?COM是一个编程模型,但是支持它的平台技术太薄弱了,最终使得COM变成了一个理念或编程准则,因此COM时代终结了。
3..NET的3个主要的组成部分:CLR,公共类库,ASP.NET。
4..NET Framework包括2个核心的集成技术:[1] CLR(虚拟机,作为托管代码的宿主,将他们集成到一个单独的OS进程中)[2] Web Services (异构系统集成)
5.CLI包括了:CTS, CIL, 元数据和底层文件。CLI已经提交给了ECMA(C#好像也已经提交给了ECMA了吧,版本是1.0 还是2.0 ?)。目前的CLI实现有:MS CLR和Mono。
6.CLR本质是一个虚拟运行环境,一个加载器,它将你的组件加载入一个OS进程中。
7.CLR是组件软件的一个发展阶段,所有组件之间的约定都是基于逻辑结构的。
8.CLR和Web Services强调组件之间的强类型协定,用来描述组件之间的关系与依赖。有2种关键概念为上述目标提供了基础:[1] 元数据(机器可读,可扩展) [2] 虚拟化。
9.CLR中组件之间的约定具有完全规范的格式(元数据),同时约定根据的是类型的逻辑结构(物理结构等到首次被运行时加载的时候再确定)。这2点与COM的约定完全不同,是对它的重要改进。
10.CLR是类型安全的,一切都是类型,对象或值。这些类型在托管代码在CLR上运行的时候依然存在,并可以被CLR或其它程序所解析。(因为有元数据来描述这些类型)
11.CIL只会包含元数据的引用,这些引用基于名称,而不是位置或偏移量等二进制信息。直到被CLR翻译为本机代码才会确定它的二进制信息。
12.任何语言只要具有能够发射(Emit)CIL代码和CLR元数据的编译器,就能被CLR 所解析。
13.当程序员面临生产率和可控性的选择时,随着时间的推移,在大多数应用场合,能够让他们拥有更高生产率的技术更有可能胜出。