まつもと ゆきひろです

In message "[ruby-ext:01385] Re: new and initialize (Re: Ruby/Jed)"
    on 00/11/01, toyofuku / juice.or.jp <toyofuku / juice.or.jp> writes:

|>   組み込みだと NEWOBJ() とか OBJSETUP() のとこから違うのでちょっと特殊で
|> す。
|
|  んーと、よくわかりません。C で実装したクラスはすべて
|「組み込み」だと思っていたのですが、Ruby/Jed の Buffer
|クラスと Ruby の基本の Arrayクラスで扱いが違ってくるのは
|なぜでしょうか。Bufferクラスを Arrayクラスのように実装
|しない(できない?)理由は。

多分、ArrayはT_ARRAYという専用のタイプを持つのに対して、拡張
ライブラリでは普通はT_DATAなタイプを使うと言う違いではないか
と思います。

|ということも含めて知りたいことを挙げると、
|
|・rb_obj_alloc(), Data_Wrap_Struct(), NEWOBJ() の使い分け。

  rb_obj_alloc()

    T_OBJECTなタイプのオブジェクトの生成

  Data_Wrap_Struct()

    T_DATAなタイプのオブジェクトの生成

  NEWOBJ()

    任意のタイプのオブジェクトの生成。
    拡張ライブラリでは使わないんじゃないかなあ。

|・new と initialize に関する今回みたいな話。(別スレッド
|  でもそのような話題になってますね)

どんな話でしたっけ?

|・newを置き換えると後で継承が使いにくい云々の話。

これはRubyレベルの話です。Rubyレベルではオブジェクトを作る方
法がnewしか存在しませんから、それをnewを再定義しちゃうと、継
承したときに別の生成法がなくて自由度が下がっちゃうって話です。
拡張ライブラリではオブジェクトをいきなり作れますから、かなら
ずしもこの制役を受けないのですが、Cで作ったクラスをRubyで継
承してinitializeが普通と同じように呼ばれないと違和感があるで
しょうね。

|・上記の話も含めた、組み込みの仕方を一から説明したドキュ
|  メントがあると嬉しい。

誰か書いて ^^;;;

|・クラス、インスタンスを作るサンプルプログラム(それだけ
|  で完結して実行できる数十行程度の)があると嬉しい。

ext/dbm.cとかじゃダメ?

                                まつもと ゆきひろ /:|)