坐在咖啡屋的靠窗位置,欣赏着雨中的西雅图,写下这几行淅淅沥沥的文字。
不要惊讶,坐在你面前娓娓而谈的,并不是一个技术Geek,而是流连于淮海路迤逦风光的情调中人。编程只是我诸多爱好中的一项,当然,有时会过火些,比如说,从狄更斯的《双城记》中管窥到设计模式的精华,当然,这只是一些偶发异常,通常不会被抛出到外界。
一直在酝酿,想要写一篇卓尔不群的前言,就是说开头不请名人讲些冠冕堂皇的废话,结尾也没有感谢父母家人之类的溢美之词,至于正文,我只想谈一谈阅读这本书所要注意的一些问题,包括不足之处。
作者Serge Lidin,是位慈眉善目的老伯,我们坐在微软总部的长椅上攀谈了良久。他曾经是微软IL小组的成员,所以写起本书来举重若轻,章节划分相当合理,并且都是第一手资料,但是,正如作者所说,他不善笔墨,所以这本书读起来非常枯燥。当然,CLR底层本身就是非常枯燥的,能把它写得精彩生动,很难做到。除非借助C#来讲解IL和元数据,才会吸引人——这样的书我也读过,是一位印度哥哥写的《C# to IL》。我曾经在自己的博客上翻译过其中部分章节。建议大家先去拜读后面这本,虽然它只是基于.NET 1.1的——没有涉及到泛型,同时内容没有前者丰富,但是,它要简单的多。
话归正题。本书是学习和研究IL和元数据的首选书籍。但它只能作为一本技术参考手册,睡觉前翻翻也是不错的主意。本书并没有介绍任何IL性能调优的方法,而这正是开发人员所关心的东西,这不能不说是一个遗憾。
IL和元数据,也就是PE结构体,是静态的内容。对于运行期间的动态执行过程,完全不是这么回事。本书没有涉及到后面这部分内容,毕竟,这超出了本书的范围。有兴趣的读者可以去研究Rotor,可以参考这本书:《Shared Source CLI Essentials》。
作者还是非常认真负责的。我们书信往来半年之久,订正了原书中的一些错误。同时,统一了.NET和汇编语言中的中文术语,其中,参考了侯捷和李建忠译作中的诸多神来之笔。此外,还在字里行间添加了大量的译注,有助于读者理解,其中不乏YY妙语。不要怪我八卦,风格如此。
本书的结构如下:1-3章是对IL语言的一个快速入门,通过一个IL小程序对这门技术进行快速的概览,强烈建议读者首先阅读这一部分,根据理解的层次以决定是否继续研读下去。第4章是全书中最乏味的一章(至少译者是这么认为的,在翻译的过程中异常痛苦),毕竟PE文件头和CLR头的概念并不常见。第5章是元数据概览,这是全书的核心,接下来第6章到第12章,以及第15章到第17章是对所有45个元数据的详细介绍,是全书的精华所在。第13章是IL语句的集大成之作,可以作为参考手册日常查阅,不建议读者一页页学习。第14章则深入浅出的介绍了IL中的异常处理机制,了解一下总归是好的。第18章是写给从事COM互操作的技术人员的,对于只专注于.NET平台的朋友,可以略过这一章。第19章,也就是双向解析,老实说,我是觉得意义不大,当然这要看领域里了,对于那些从事.NET性能调优的朋友,这一章还是有很大参考价值的。5个附录都极具参考价值,尤其是,建议你把它撕下来(考虑到本书的收藏价值,还是复印一下吧)装订成册常备案头。不要嫌我啰嗦,要有选择地阅读本书,以上若干笔墨,是译者半年来的读书心得,仅供参考。
什么人适合读这本书呢?如果你还是一位.NET新手,还是把它放回到书架上吧,3年间你应该不会用到这些技术。5年够了么?那也未必。你起码要翻一遍《CLR via C#》或者《.NET本质论》。不然,这本书就是你噩梦的开始,轻则迷惘不前,重则走火入魔,甚至结束程序员的生涯。好吧,没那么夸张啦,但副作用还是有一点的。然而,即使你的修为达到了上述要求,在阅读本书时也要摆脱高级语言(如C#)的束缚,而重新建立一套CLR世界中的逻辑体系。“万物皆标记”,什么时候读者能领悟到这一层面,也就到达“庖丁解牛”的境界了。
越写越悲观了,忽然发现调子很低,尽管跳出了传统那类前言的八股风气。好吧,下面说一点振奋人心的言语。
话说,这本书BT之极,以至于国内出版社无人问津。也只有图灵的刘江主编赔本赚吆喝,将其引进到国内。于是译者本人投桃报李,辞职半年之久,倾全力打造此书。期间,装配脑袋、Anders Liu和Filer Lu出力极多,经常帮我炼字锻句。客套话到此为止。
翻译期间,参考了国内外大量有价值的关于IL的技术博客,列表如下,
国外:
Vijay Mukhi的博客:http://www.vijaymukhi.com/documents/books/
这就是我前面提到的那位印度哥哥的网站,上面有3本他参与编写的IL书籍的电子版。分别是:
《C# to IL》 对应子目录ilbook,这是最好的一本,可惜是1.1版本的。
《Metadata》 对应子目录metadata,说的是如何用C#语法解读dll或exe文件。
《IL Disassembler》 对应子目录ildasm。
国内:
Anders Liu的博客:http://www.cnblogs.com/andersliu
刘彦博的文章,最有名的莫过于《透过IL看C#》系列。
装配脑袋的博客:http://www.cnblogs.com/ninputer
施凡在CLR上造诣极深,甚至在自己编写新的.NET语言编译器,平生最喜欢VB.NET语言。
Filer Lu的博客:http://www.cnblogs.com/flier
卢小海是很早就开始研究IL的先驱了,最著名的是2001-2002年间在绿盟和程序员杂志发表的《MS.Net CLR扩展PE结构分析》系列。
张羿的博客:http://blog.csdn.net/atfield/
此人是在MS CLR Team写COM 互操作的,我在翻译第18章“互操作时”曾经拜访过他的博客。
林林种种,国内在IL这方面的沉淀已经很深了,完全可以原创出一本通俗易懂且又博大精深的IL书籍。让我们拭目以待,将所谓的BT进行到底,我很有信心的。
包建强
2009年3月 西雅图