ポリモルフィズム

眠いので簡単にメモだけ書きますが。
単一継承しか考えないのであれば、ポリモルフィズムは、オブジェクトごとに関数へのポインタ*1の配列(俗に言うvtable)へのポインタを持たせればよいのですが(そのへんの話は以前こちらとか「Java謎+落とし穴徹底解明」に書きました)、多重継承ではそういうわけにはいきません。そして、Diksamは、Javaと同様、クラスの多重継承はないけれどインタフェースの多重継承はあります。
C++だと、アップキャストの際にこっそりポインタのアドレス値が変わっちゃって違うvtableを指したりするのですが、ポインタの値がひょこひょこ変わったり、ポインタがオブジェクトの真ん中へんを指したりすると、比較やらGCやらで面倒くさそうです。
そこで、Diksamでは、値型(DVM_Value)に、オブジェクトへの参照とともにインタフェースのインデックスを持たせる、という方法を取りました。アレな方法かもしれませんが、今のところ動いているようです。ポインタ1個で、(そのへんの32bit環境で)8バイト食うのもアレですが、DVM_Valueはもともとdoubleを含む共用体なので一緒ですし…ってそういう問題でないのはわかってはいるのですが。
こんな簡単な説明では何がなんだかかとは思いますが、なにアホなことやってんだか、という方はご指摘くださいませ。

*1:ここでの「ポインタ」は必ずしも「アドレス」を意味しない