Squeak / Pharo Trait和Newspeak Mixin有什么区别?

时间:2010-02-24 21:33:58

标签: smalltalk squeak pharo newspeak

所以Squeak / Pharo支持Traits和Newspeak有Mixins。有什么不同?特质没有instVars但Mixins有吗?

3 个答案:

答案 0 :(得分:9)

使用构图规则组合特征。冲突必须手动解决,特征不会意外地覆盖另一个具有相同名称的方法。

Mixins由顺序组成,因此具有类似于多重继承的脆弱性问题。

答案 1 :(得分:9)

为了进行良好的比较以及为什么特征是首选的原因,您可以查看traits paper (pdf)

从本质上讲,这是Lukas Renggli所说的:

Traits成员被组成一个类,并且不会更改其继承层次结构。冲突必须由特征的用户明确解决。

Mixins被线性化为目标类的继承层次结构。如果存在冲突的成员,则声明它们的顺序决定了哪个成员被调用。这是脆弱的,因为它隐含地定义了合成的行为,并且类作者必须意识到潜在的冲突以及它们将如何影响结果类。​​

由于mixins被线性化,因此它们不会遭受多重继承的臭名昭着的“钻石问题”。所以它们堆积的脆弱性是另一个问题,我将其称为“红宝石问题”,以保持宝石的比喻。由于与moose有关的一些奇怪的原因,珍珠并没有描述问题以及红宝石。

答案 2 :(得分:8)

在Newspeak中,所有课程都是mixins。以下是Gilad Bracha对Newspeak discussion forum中类似问题的回答的一些片段:

  

Mixins不是Newspeak的功能   本身。也就是说,我们没有设计   语言说,好的,现在我们将添加   混入。 Mixins会自动脱落   从类嵌套和基于消息   语义。也就是说,如果你有   虚拟课,你有mixins   除非你真的禁止他们。 ......

     

Traits试图解决感知问题   mixins的问题。

     
      
  1. 很少有真实的经验表明这些   感知问题是真实的。
  2.   
  3. 特征被限制为无国籍。这简化了事情,   但不处理所有的情况   利益。事实上,现在有   试图添加的研究论文   国家特质。
  4.         

    特征完全归入更多   一般模型,我设计了很多   几年前在我的博士论文(可用   离开我的网站,如果你真的想   深挖)。   ...   我想研究一下我们的意愿   将这些组合器纳入其中   新话。 ...