Mix-In的译法探讨

有许多动态语言都支持Mixin的特性,比如Ruby、Python。而JavaScript虽然在语言层面没有Mixin支持,但是Prototype所模拟的类似Ruby的extend方法其实就是一种Mixin方式。

目前的工业语言(Java、C#等)普遍采用了单根继承+接口的方式。但是类的继承复用被一定程度上牺牲了(也就是要求尽可能用组合而不是继 承)。这源于class既要用于实例化也要用于代码复用,而这两者存在矛盾。Mixin类似一种多继承,但是它明确是一种小粒度的代码复用单元,而不直接 用于实例化。因此它避免了多继承的常见问题。

但Mixin并没有非常统一确定的译名。目前使用最多的是“混入”的译法。在最近的翻译讨论中,有人提出了一些新的译法,比如“混生”、“掺料”等。请参见:http://groups.google.com/group/python-cn/browse_thread/thread/d7e0a256a1bf6465。下面是我在一个翻译论坛中的讨论贴,整理于此。

对于mix-in这样的新词,我觉得大体有几种做法:

1. 不译。

因为新词的意涵尚未普遍接受甚至本身内涵外延未确定下来,现有译名可能也存在问题,所以直接用英文也是一个比较好的方式。不过除了高端书之外,如果一般书籍采用这种策略,需得对名词做好译注,避免普通读者难以理解其意。

我个人建议在未有好译名之前,暂时以此种方式为宜。

2. 从既有之译名中选取一个。

目前看来纯直译型的“混入”(真是直白,mix是混,in是入……)接受程度最高。但是“混入”其实意思不是很明确。Mix-In,根据我的理 解,其本义是指可以被混入其他类的单元,而不是指混入这种动作。至于说现在变成Mixin(去掉了hyphen)之后,意思是否有所转变,还望大家共同讨 论。偶个人认为仍然去掉hyphen只是从一个组合词固化为一个专业术语,本身含义还是没有发生变化的。

3. 在译著中换用其他等价词汇。

比如Trait。当然Trait的译名本身也是个难题。

4. 自创译名。

下面谈谈“混入”之外的其他几个译名。

我觉得“掺料”不太好,工业味道太浓,它对应的英文大概是admixture,指混合剂。而mix-in根据wikipedia,是源于冰淇淋的混合口味,是很美味浪漫的,用“掺料”真是大煞风景了。还不如叫做“配料”甚至“浇头”,呵呵。

“混生”这个词在汉语语法上似乎比“混入”更名词化一些,不过我认为“混生”与“派生”共用“生”字也并没有什么特别好的地方,因为mixin class和derived class并不是同种性质的东西。特别的,mixin本身不是说混和生成的类,而是说可以用来混合的部件。所以“混生”一词较“掺料”反而有点脱离了 mixin的原意,容易让人误解“混生类”和“派生类”一样,是指子类。实际上mixin却是指“用于混入的类”,有那么点儿类似抽象类 (abstract class)或者partial-class。

如果一定要译,我贡献一个译法供大家批判:

mixin 混元
mixin class 混元类

所谓混元,就是用于混合的元件。


BTW,“混元”在汉语中倒是古已有之,如“混元一气”,还有金庸小说中的大奸角成昆外号就是“混元霹雳手”。这个“混元”大体是指世界初创时的混沌元气。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页