In article <1029229143.399680.2549.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> allocateの問題だけは解法が思いつかない。

まず、あるクラスからそのクラスの構造の型を得ることは基本的には次のよう
にして可能だという気がします。

class Class
  def builtin_type
    ancestors.each {|c|
      next unless Class === c
      s = class << c; self end
      return c if s.instance_methods.include? "allocate"
    }
    return Object
  end
end

もし、これで型を得られるのであるとすれば、各 allocate は自分が生成する
型と、self (klass) のあるべき型が一致することをオブジェクト生成前に確
認することができます。

で、alias への対策は上記の実装が動かなくなることを禁止するよう、クラス
の特異メソッドとしての allocate への alias を禁止すればいいんじゃない
かと思います。

むろんナイーブにやると遅いでしょうが、原理的な話としてはどうでしょう?
甘いですかね?
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)