Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Rubyオブジェクトが消えないようにする仕組み

ご注意:Apolloの内部構造の話です。

Phi は Delphiオブジェクトを Rubyオブジェクトとして使えるようにするライブラリ。


Delphiオブジェクトの廃棄の仕組みと、Rubyオブジェクトの廃棄の仕組みとではかなり異なる。

Delphiオブジェクトの廃棄の仕組みは、基本的には ownerオブジェクトが廃棄されたときにその子供のオブジェクトも廃棄される、という仕組み。もしくは、プログラマの責任で Free する。

Rubyオブジェクトの廃棄の仕組みは、どこからも参照されなくなったオブジェクトは、ガーベージコレクションの時点で廃棄される、という仕組み。


Apolloでは廃棄のタイミングを調整するために、次のような仕組みが必要になる。

(a)Rubyがオブジェクトを維持する場合には Delphiオブジェクトも維持しなければならない。Delphiオブジェクトが廃棄されないようにする仕組み。

(b)また Delphi側でオブジェクトを維持する必要があるかぎりは Rubyオブジェクトも維持されなければならない。Rubyオブジェクトが廃棄されないようにする仕組み。

(c)ApolloではRubyの廃棄のタイミングで Delphiのオブジェクトを廃棄しなければならない。というか、そのように見えるように振る舞わなければならない。Delphiオブジェクトが廃棄されるようにする仕組み。


従って、

(A)Delphiオブジェクトが ownerにつられて廃棄されるのを防ぐために、ownerプロパティは使用禁止であり、nil がセットされている。

(B)Rubyオブジェクトが消えないようにするためには、「参照」されていることが Rubyに分かるようにしなければならない。ある Delphiオブジェクトの子オブジェクトが消えないようにするためには、親のRubyオブジェクトが子のRubyオブジェクトを参照していなければならない。逆に、子のRubyオブジェクトが親のRubyオブジェクトを参照していなければならない。これを行うのはap_owner?であろう。

(C)


Delphiの親オブジェクトと子オブジェクトというのは「親亀こけたら子もこける」という関係にあるオブジェクト。

似たような関係のものとして、外部のオブジェクトを参照しているだけ場合、というのがある。

** ああっ、複雑・・。


(comment plugin is disabled).
Last modified:2004/11/30 15:23:58
Keyword(s):
References:[Apolloの作り方]