前卫的意义

来源:互联网 发布:艾琳和后羿的数据 编辑:程序博客网 时间:2024/06/10 09:41
说明:本文藏自http://www.royaloo.com/articles/articles_2003/MeaningOfPioneer_content.htm

前卫的意义

— Modern C++ Design中文版《C++ 設計新思維》译序,承蒙侯捷先生允许,全文转载于此。

一般人对C++ templates的粗浅印象,大约停留在「容器(containers)」制作上。稍有研究则会发现,templates衍生出来的C++ Generic Programming(泛型编程)技术,在C++ 标准程式库中已经遍地开花结果。以STL为重要骨干的C++标准程式库,将templates广泛运用于容器(containers)、演算法(algorithms)、仿函式(functors)、配接器(adapters)、配置器(allocators)、迭代器(iterators)上头,无处不在,无役不与,乃至于原有的class-based iostream都被改写为 template-based iostream。

彻底研究过STL源码(SGI版本)的我,原以为从此所有C++ templates技法都将不出我的理解与经验之外。但是《Modern C++ Design》在在打破了我的想法与自信。这本书所谈的template技巧,以及据以实作出来的Loki程式库,让我瞠目结舌,陷入沉思…与…呃…恍惚J 。

本书分为两大部分。首先(第一篇)是基础技术的讨论,包括 template template parameters(请别怀疑,我并没有多写一个字)、policies-based design、compile-time programming、recursive templates, typelists。每一项技术都让人闻所未闻,见所未见。

第二部分(第二篇)是Loki程式库的产品设计与实作,包括Small-Object Allocation(注1), Generalization Functors, Singleton, Smart Pointers, Object Factories, Abstract Factory, Visitor, Multimethods。对设计范式(design patterns,注2)稍有涉猎的读者马上可以看出,这一部分主题都是知名的范式。换言之,作者Andrei尝试以templates-based, policies-based手法,运用第一篇完成的基础建设,将上述范式具体实现出来,使任何人能够轻松地在Loki程式库的基础上,享受设计范式所带来的优雅架构。

注1:Small-Object Allocation属于底层服务的「无名英雄」,故而在章节组织上仍被划入第一篇。

注2:patterns一词,台湾大陆两地共出现三种译法:(1) 范式 (2) 样式 (3) 模式。我个人最喜欢「范式」,足以说明patterns的「典范」意味。因此本书以「范式」称patterns。顾及大陆术语习惯,简体版以「模式」称patterns。本书所有patterns都保留英文名称并以特殊字型标示,例如Object Factories, Visitors…。

设计范式(Design Patterns)究竟能不能被做成「易开罐」让人随时随地喝上一口,增强体力?显然范式社群(patterns community)中有些人不这么认为 — 见稍后Scott Meyers序文描述。我以为,论断事物不由本质,尽好口舌之辩的人,不足取也。Andrei所拓展的天地,Loki所达到的高度,不会因为它叫什幺名字而有差异,也不会因为任何人加诸它身上的什么文字包装或批评或解释或讨好,而有不同。它,已经在那儿了。

本书涉足无人履踏之境,不但将 C++ templates和 generics programming技术做了史无前例的推进,又与 design patterns达成巧妙的结合。本书所谈的技术,所完成的实际产品,究竟是狂热激进的象牙塔钻研?抑或高度实用的崭新设计思维?做为一个技术先锋,Loki的现实价值与未来,唯赖你的判断,和时间的筛选。

然而我一定要多说一句,算是对「唯实用论」的朋友们一些忠告。由来技术的推演,并不只是问一句「它有用吗」或「它现在有用吗」可以论断价值的。牛顿发表万有引力公式,并不知道三百年后人们用来计算轨道、登陆月球。即使在讲述「STL运用」的课堂上,都还有人觉得太前卫,期盼却焦躁不安,遑论「STL设计思维和内部实作」这种课,遑论Loki这般前卫技术。很多人的焦虑是:我这么学这么做这么写这么用,同侪大概看不懂吧,大概跟不上吧。此固值得关注,但个人的成长千万别被群体的惯性绊住脚步(注3)。我们曾经鄙夷的别人的「无谓」超前,可能只因我们故步自封,陷自己于一成不变的行为模式;或因为我们只看到自家井口的天空。当然,也可能某些前卫思想和技术,确实超越了庞大笨重迟缓的现实世界的接受度。你有选择。做为一位理性思考者,身在单纯可爱的技术圈内,请不要妄评先锋,因为他实在站在远比你(我)高得太多的山巅上。不当的言语和文字并不能为你(我)推砌楼台使与同高。

深度 + 广度,古典 + 前卫,理论 + 应用,实验室 + 工厂,才能构筑一个不断进步的世界。

侯捷 2003/01/08 于台湾新竹

jjhou@ccca.nctu.edu.tw
http://www.jjhou.com(繁)
http://jjhou.csdn.net(简)

P.S. 本书译稿由我和于春景先生共同完成。春景负责初译,我负责其余一切。春景技术到位,译笔极好,初译稿便有极佳品质,减轻我的许多负担。循此以往必成为第一流IT技术译家。我很高兴和他共同完成这部作品。本书由我定稿,责任在我身上,勘误表由我负责。本书同步发行繁体版和简体版;基于两岸计算机术语的差异,简体版由春景负责必要转换。

P.S. 本书初译稿前三章,丘铭彰先生出力甚多,特此致谢。

P.S. STL, Boost, Loki, ACE...等程式库的发展,为C++ 领域挹注了极大活力和竞争力,也使泛型技术在C++ 领域有极耀眼的发展。这是C++ 社群近年来最令人兴奋的事。如果你在C++ 环境下工作,也许这值得你密切关注。

注3:从万有引力观之,微小粒子难逃巨大质量团的吸滞(除非小粒子拥有高能量)。映照人生,这或许是一种悲哀。不过总会有那么一些高能粒子逸脱出来 — 值得我们转悲为喜,怀抱希望 。

-- the end

原创粉丝点击