[ruby-dev:48930] Re: doc/extension.ja.rdoc 査読依頼
From:
SASADA Koichi <ko1@...>
Date:
2015-04-13 09:00:37 UTC
List:
ruby-dev #48930
ドキュメントまとめて頂いて、ありがとうございます。多分、それなりに知っ ている方じゃ無いかと思うのでコメントさせて頂きます。 ちなみに、査読というと審査を想像してしまいますが、コメント募集、程度で すよね。 On 2015/04/12 23:58, Yugui wrote: > doc/extension.ja.rdoc がTypedData_XXXではなくData_XXXにしか触れていない > ため,今なお新しい拡張ライブラリがData_XXXで作られ続けています. > このためドキュメントの当該部分を更新するつもりですが,GCに詳しい方に査読 > をお願いしたく思います. > doc/extension.rdoc (English)のほうはjaを元に査読後に作成する予定です. > > 草稿は下記にあります.(日本語) > > * https://gist.github.com/yugui/87ef6964d8a76794be6f > > なお,一点確認したいのですが,rb_data_type_t::parentは利用されていないよ > うに見えました.この認識は合ってますか? まさに、この1点について、仕様が固まっていないためドキュメント化してい ない、という状態です(仕様化・ドキュメント化しようとして、行動を起こした ら反論があって止まっている)。 https://bugs.ruby-lang.org/issues/10621 議論を進めていなくて恐縮です。 この点を避けて仕様化するかどうかは、どなたかに判断を任せたいところです が...。まぁ、このドキュメントがリリースされるのは今年末までなので、それ までにははっきりさせたいところです。 ところで、 > Cの世界で定義されたデータ(構造体)をRubyのオブジェクトとして 取り扱いた い場合がありえます.このような場合はTypedData_XXX 関数群を用いて構造体へ のポインタとRubyのオブジェクトとを互 いに変換できます. 従来の T_DATA の使い方はばっさり削るんですか? あれはあれで、気楽でい いと思っていましたが。少なくとも、現状は、ふつーの人はあれでもいいんじゃ ない、的な設計で書いています。 > なお, klassは, Objectや他のクラスではなくData (rb_cData)と いう特別な クラスから派生することが推奨されます. これは単純に知らなかった(守ったことがない)。 > wrap_struct_nameはこの構造体を識別する名前です.主にエラー メッセージ に用いられます.特にCやRubyの識別子として有効であ る必要はありません. エラーメッセージで出してましたっけ。単に統計情報を取るときに使っていた 気がします。 > このフラグを指定すると,ガーベージコレクタはこの構造体が 不要になった 場合にはGC中に直ちにdfreeを呼び出します. dfreeが新たにオブジェクトを生 成したりRuby内部のロック(GVL) を解放する可能性がない場合はこのフラグを指 定できます. モチベーションが違うと思います。なんか、さっさと free すると SEGV と か、まずいことが起こるようなのがあったんじゃないかと思うのですが、すみま せん、はっきり思い出せない。 dfree を sweep 時ではなく、ファイナライザポイントまで遅延させているの で、何かそうしないといけない理由があったと思うんですが。ここは、ぱっと答 えられなくてすみません。なんか、sweep するとき、順番が重要で、とかそうい う話だっけ(でも、それだと lazy sweep でダメなはずなんだよな)。 GVL 内かそうじゃないか、というのは、なるほど、そういう考えもあると思い ます(実装的には、今のところ必ず GVL 内ではありますが)。 あと、dfree が オブジェクトを生成すると、多分 BUG になるんじゃないかな。 > klassの実装がライトバリアを サポートしていることを示します.このフラグ を指定 するとRubyはklassに対してGCをより効率的に実 行できます. ただし, 指定する場合はユーザーはklassのすべての メソッドの実装に適切にライトバリ アを挿入する責 任があります.さもなくばRubyは実行時にクラッシュ する可能 性があります. klass の実装ってよりは、このオブジェクトが~ のほうが良いと思います (原理的には klass == 0 もあり得ますし)。 この辺については、README.EXT の末尾に色々書いたので、リンクさせてもい かもしれません。具体的には、「そんなことするな」と書いています。 > Cの構造体の割当とDataオブジェクトの生成を同時に行うマクロと して以下の ものが提供されています. Data オブジェクトというのは、よく定義された用語でしたっけ(純粋に、知 らないのです)。 -- // SASADA Koichi at atdot dot net