DNE,就是Bjarne Stroustrup老大的名著”The Design and Evolution Of C++”,中文译名为《C++语言的设计和演化》,翻译者是裘宗雁老师,她翻译的《程序设计实践》(The Practice of Programming, Brian W. Kernighan/Rob Pike)是迄今难以超越的计算机图书译文顶峰。但是很遗憾,这次翻译“大作”让人失望了。

在中译版正文第9页,关于C++存取访问控制,关于public/private的翻译,裘老师有一段译者注:

public/private,一般被译为共有或公有/私有。这两个词描述的是访问控制问题:某种功能是/否提供给外界使用,因此是关于使用权,而不是所有权(所有权非常清楚,根本无需讨论)。据此,本书中将他们一律翻译为“公用”和“私用”,这样更符合原意。——译者注

而就在旁边的第10页,看看B.S.自己对于类似问题的态度:

In C with Classes(as in C++), a class is a type. This is a key notion in C++. When class means user-defined type in C++, why didn’t I call it type? I chose class primarily because I dislike inventing new terminology and found Simula’s quite adequate in most cases.

关于这一段,裘老师的译文如下,供参考——顺便说一句,C with Classes被译为“带类的C”感觉比较奇怪,保持原文应该更好(可以参照的例子是Delphi使用的Object Pascal,大概从来没有被称为“对象Pascal”过)。

在带类的C中(C++也是一样),一个类就是一个类型,这是C++里最关键的概念。既然C++里的class意味着用户定义类型,为什么我不直接称它为type呢?选择用class这个词的基本原因是我不想发明新术语。此外,我也觉得对于大多数情况而言,Simula的术语都是很合适的。

在我看来,去改变public/private这样古老语汇的译名,就跟某位老学究在UML译作中文采斐然的称use case为“用案”一样的可笑,这里还不包含对于这种所谓“更符合原意”的理解存在的质疑。

如果这个算作比较特殊的例子,那么下面这个就是随手一抓就能得到的例子:

到1982年,有一件事我已经很清楚了:带类的C只是一个“中等的成功”,它也能保持这种状态直到它死亡。我把中等成功定义为某一种东西,它很有用,能够支付其本身和开发者的开销,但是又没有足够的吸引力和有用性,不足以负担起一个支持和开发组织。

对比一下原文,我们很难说这里有多少含义被准确的传达了:

During 1982 it became clear to me that C with Classes was a “medium success” and could remain so until it died. I defined a medium success as something so useful that it easily paid for itself and its developer, but not so attractive and useful that it would pay for a support and development organization.

其他比较OX的问题,诸如把inline机制译为“在线”,把constructor译作“建构函数”,把garbage collection译为“废料回收”,等等,使得中文版基本没法读下去,好在英文版也由机械工业出版社引进了,还比中文的便宜,书也比中文版小巧(大32开本)。

p.s. DNE是一本非常值得仔细研读的书,很难有别的机会以这样的视角去观察一门编程语言——事实上C++的规范连同其实现,就是一个相当复杂的信息系统,在这里涉及到表述和记法、运行效率、设计决策和实现的互相制约、需求的变迁和管理,等等,每次阅读都能带来一些新的体验。B.S.的文笔并不华丽,也谈不上优美,但是非常严谨和流畅,在很多细节上揭示出其深刻的洞察力,这可能和他数学专业出身有一定的关系。