At Fri, 27 Jul 2001 16:41:23 +0900,
matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> 次にRDataのfree関数をRubyに開放するのも賛成できません。あれ

正確にはRDataのfree関数から呼ばれる関数をRubyから設定できる
ようにしています.PtrDataに使っている構造体は,

struct ptr_data {
  void *ptr;
  void (*free)();
}

となっていて,この中のptrをfreeを使って解放しています.
ptr_dataのオブジェクト自体はRDataのdfreeで解放しています.
例えば,`FILE *fp' をラッパーする場合は,

  struct ptr_data *data;
  data = malloc(....)
  data->ptr = fp;
  data->free = fclose;

という構造体の内容になり,GCされるときには

  (data->free)(data->ptr);

が実行されます.

> ん。というか、正直なところfree関数の中でRubyのコードはまった
> く実行してほしくありません(GCの内部から直接呼ばれるので普通
> の実行状態ではないので)。

このため,Rubyのコードではなく,Cで書かれたライブラリ中の関数
を実行するのですが,このようなものはどうでしょうか?
-- 
Takaaki Tateishi <ttate / jaist.ac.jp>