作者:empty 页数:403 出版社:empty |
第一次看到这本书的时候,就感觉到了这本书的分量。Don Box(Don Box的个人网站已经更改, 变成了Blog的形式; 参见大量的技术文章。他的技术水准无可挑剔。个人觉得,有时候他写的东西很难读懂。但即使是这样,这本书的内容还是值得我们反复阅读的。读过《Essential COM》、《Essential XML》、《Effective COM》、《CreatingComponents DCOM C++》等书的读者, 对于Don Box对这些底层技术的精彩描述,想必一定是深有体会的。跨平台, 这一点不如Java。就目前的情形而言似乎是这样。也有人说, CLR有人说, Microsoft的.NET技术只是实现了跨语言, 而没有做到真正的(公共语言运行库) 作为.NET的核心部分, 尽管Microsoft已经将其称为标准, 但时下只有Windows系列的操作系统上可以跑CLR。相比之下, JVM(Java虚拟机) 则与众多的操作系统兼容。Microsoft曾经表示过乐意资助或支持任何交叉平台的.NET, 但是对于GPL,Microsoft是持谨慎态度的。事实上, 在2001年有一个小组启动了一个名为“Mono”的计划, 致力于实现Linux/Unix下的.NET。这个小组目前已经扩充到了50多人, 他们中有5人是Ximian(Ximian是一家专门从事为一般计算机用户改进Linux操作系统的公司, Ximian现在已经并入Novell, 详情参见http:/www.ximian.com)的全职雇员,他们正在做着一件极其了不起的事情,你可以在http:/www.go-mono.org上看到他们工作的最新进展。不过, Microsoft对于跨平台的应用也有着一套自己的解决之道, 那就是.NET WebServices。本书的重点是CLR, 对于.NET WebServices, Don Box在本书的前言中说准备近期推出本书的姊妹篇,我们将拭目以待。
关于“COM is Dead”的说法, 在2000年的PDC开发者大会上, Microsoft就曾宣称令人头疼的COM编程模型将彻底消失, I Unknown等接口将不再出现, 取而代之的将是CLR。不过, 要知道COM是Windows的基础, CLR和COM技术之间有着极深的渊源。应该说COM的精神并没有消失, 而是有了非常大的进步, 本书即将揭开这个谜团, 并一步一步带领您揭开CLR的神秘面纱, 在这里Don Box将会告诉你, CLR其实是一个更好的COM。CLR最令开发人员激动的是, 它推出了一个比它的前身COM更为简洁的开发模型, 你不再需要掌握GUIDs、I Unknown、AddRef、Release就能进行组件开发!在.NET中语言的差异似乎不再那么明显, 因为所有.NET语言共享相同的类库;令人厌烦的内存管理,也将被GC(自动垃圾回收)所取代:在访问代码和资源时, CLR实施了代码访间安全策略, 这种安全性深深地植根于CLR之中, 这种对操作系统级的安全性的扩展, 可以说是一种很大的进步。本书由10章组成, 探讨了CLR的里里外外, 涵盖了基本类型、实例、方法调用和消息、AppDomain、安全, 以及CLR外部世界。本书不仅讨论了类型是怎样映射到CLR的, 还讨论了这些类型在运行时的行为:然后讲述了类型、对象、值之间的联系及它们之间的相互作用;接下来的内容是消息(高级方法, .Net Remoting的基础) 以及方法调用; 再有就是关于AppDomain的讨论(我理解为CLR下的“进程”) ; 最后, 以CLR安全模型和CLR外部世界结尾。这些技术很艰深, 但对于一名渴望深入了解CLR底层运作机制的爱好者来说,这绝对是一本让人大呼过瘾的好书,因为其字里行间都是极具价值的技术信息, 例如, CLR中的类型是如何初始化的, is和as操作符(对应于is inst) 与C风格的强制类型转换(对应于cast class) 之间的差别,对象在内存中的数据结构和对象的生存期,以及避免程序性能下降的技巧, 如在方法调用时如何正确处理多个预处理(pre-process) 和后处理(post-process) 过程的方法, 这些技术对于创建高效的应用程序是很有用的。Microsoft@.Net Framework Programming》相比, 它更偏向于底层机制, 如为了尽可能地照顾不同技术水平的读者, 我增加了多处译注, 希望将Don感谢通常是一篇序变长的原因,因为一本好书的出版,里面必然蕴含了虽然,我在翻译的过程中已十分小心,但仍然可能会有所疏漏,敬请各严格地说, 本书并不是写给初学者的, 与Jeffrey Richter的《Applied果你有C++和COM的背景, 那么就会更深刻地体会到这一点, 因为在书中你会看到很多C++以及COM的痕迹。本书中描述的技术并不限于某种特定
译者序语言, Don Box试图做到与语言无关, 但很多例子都是用C#写的。作为一本解释why(相对于那些Howto) 的书, 这本书和Don Box的其他书一样,描述详尽,充满了专家级的指导。在翻译过程中最深的体会是,这不是一本看完了就会放在一边的书,因为你可能需要花很多时间来读这本书才能真正明白CLR的思想。当你完成了这项艰难的阅读后, 你会发现这是一本值得收藏的经典之作!Box对.NET深层次的理解诠释得更清楚。在整个翻译过程中, 我总是试着站在读者的角度换位地思考——“这句话这么说,读者会理解吗?”尽管这样,恐怕还是有不尽人意的地方。为了亡羊补牢,以及更好地支持这本书的阅读,我将通过网站http://www.coreader.com,将本书的勘误整理出来放在网上,同时与大家一起共同探讨技术方面的问题,并提供一些本书相关的源代码。很多人的心血, 首先要感谢的当然是Don Box和Chris Sells, 他们为我们的书架又增添了一本经典!翻译的过程,是顿悟的过程,也是自我提高的过程。和我以前的翻译工作一样,在本书的翻译过程中得到了许多朋友的支持。谭立平是我近期工作的合作伙伴,他贡献了本书部分章节的翻译与校对,并和我一起编写测试代码,验证作者的理论。卢青锋也是我的合作伙伴之一,他为http://www.coreader.com网站的开发做了大量的工作。本书在china-pub上引起争议之后(参见http:/www.china-pub.com/computers/common/info.asp?id=14700),我的老朋友汤涛为本书的前四章提出了修改意见:还有我从未见过面的南京大学数学系学生刘未鹏,他对序言、第1章等的修改意见是建设性的。同以往一样,我与中国电力出版社的合作非常愉快,我的老朋友高军自然就不用说了。谢工、关敏对这本书的进度与质量提出了严格的要求,并给予了我极大的鼓舞。朱恩从近乎“吹毛求疵”的编辑, 毙掉了不少Bug。此外, 与china-pub上众多网友进行的诚挚而热烈的讨论使我受益良多, 让我更深刻地体会到强烈的责任感。位谅解并予以指正。
致谢
我要感谢他们在这部书一年多的写作期间所做的一切。
第1章—CLR是一个更好的COM:本章从组件对象模型(Component
Object Model, COM) 开发人员所面临的问题入手, 讲述了CLR如
何应用虚拟化及无所不在的、可扩展的元数据, 解决这些COM问
题, 从而最终取代COM。
第2章—组件:从根本上讲, CLR是OS和COM加载器的替代
品。本章讨论了代码是如何封装和加载的, 它们与在Win 32和COM
世界中的情形大相径庭。
第3章——类型基础:组件是代码和构成类型定义的元数据的容器。
本章重点讨论了通用类型系统(Common Type System, CTS) , 包
括类型的组成部分,以及类型是如何关联的。这是首次出现源代码
块的章节,
第4章——用类型编程:在编程模型中, CLR将类型作为第一类概
念。本章讨论了CLR程序中类型的显式用法, 主要是元数据与运
行时类型信息的角色。
第5章—实例:CLR编程模型是基于类型、对象和值的。第4章
讨论了类型,本章则重点阐述对象和值。特别是本章概述了这两种
实例模型的差别,包括值与对象在内存管理方面的不同。
第6章方法:所有组件之间的交互都是在方法调用中呈现出来
的。CLR提供了一系列技术, 用于使方法调用成为清楚的行为。本
章将介绍这些技术,从实时编译时的方法初始化开始,直到类型异
常时的方法终止。
第7章——高级方法:CLR提供了强大的架构用来侦听方法调用。
本章剖析了CLR侦听的实用部件, 以及它对面向方面编程
(aspect-orient programming) 的支持。这些实用部件是CLR比较超
前的方面之一
第8章一域:CLR采用AppDomain(应用程序域) 而不是OS进
程, 来划分代码的执行范围。本章从两个方面讨论AppDomain的
角色, 即作为底层OS进程的替代品, 以及一个AppDomain与程序
集解析器或加载器之间的交互。熟悉Java的读者将发现Java加载
器与它很相似。
第9章—安全性:CLR一个主要优点就是提供安全运行的环境,
本章阐述了CLR加载器如何支持向代码授予特权, 以及这些特权
如何被强制实施的。
第10章——CLR外部环境:本书前9章都是讨论基于CLR编程模
型的程序设计。最后一章则关注该编程模型对外的方式,以及它如