民斗です。

[Subject: [ruby-list:9026] Re: making extension module]
[Date: Tue, 11 Aug 1998 12:34:40 +0900  From:Yukihiro Matsumoto]

> |MySQL というデータベースを Ruby からアクセスできるようにしようと
> |思って、C で拡張モジュールを書いてみました。

> 実は昨日そのページを読んでいたのでした.
> # We are watching you.

# きゃ〜ハズカシ〜

> |1. 関数によっては、C で記述する必要のないものがあるので、クラス中の
> |   一部の関数を Ruby で書きたいのですが、同一のクラスを関数によって 
> |   C で記述したり、Ruby で記述したりできるのでしょうか。

> できますよん.Rubyはいいかげんな言語で同じクラスを何度も定義
> できるんです(2度目以降は定義の追加).ですから,まずCでMySql
> というクラスを定義して,残りは追加するというのでどうでしょう.

おお、そんなことができたんですね。クラスの2重定義になっちゃうから
駄目だと思い込んでいました。目からウロコです。

# ボロボロボロ…


> |2. C++ のデストラクタのようなものは Ruby ではどのように書くのでしょうか。
> |   C での拡張モジュール中では、Data_Make_Struct() の第4引数で関数を指定
> |   できるようですが、Ruby で作成したクラスの場合、どのように書くのか
> |   わかりませんでした。

> RubyレベルではGCがあるので,明示的にオブジェクトを破棄する必
> 要はあまりないはずです.どーしても,GCのタイミングでなんらか
> の処理が行いたい場合には lib/final.rb を使うワザはありますけ
> どね.実例としては lib/tempfile.rb を参照して下さい.でも,
> 分かるかなあ.必要でしたら更に解説します.

これは実は、ちょっと疑問に思っただけで、必要ってわけじゃないです。
final.rb, tempfile.rb も見てみます。


ありがとうございました。
--
民斗 <tommy / valley.ne.jp>