From: Tadashi Saito Date: 2010-04-01T01:27:52+09:00 Subject: [ruby-dev:40889] [Feature #3068] [TypedData] RUBY_TYPED_DEFAULT_FREE は必要? Feature #3068: [TypedData] RUBY_TYPED_DEFAULT_FREE は必要? http://redmine.ruby-lang.org/issues/show/3068 起票者: Tadashi Saito ステータス: Open, 優先度: Normal 斎藤と申します。 1.9.2からRUBY_TYPED_DEFAULT_FREEというのが導入されるようですが、 これは本当に必要なものでしょうか。 #define RUBY_TYPED_DEFAULT_FREE ((void (*)(void *))-1) のように、-1を(dfreeと同じ型の)関数ポインタにキャストするだけの 簡単なものですが、直に「-1」と書くのにくらべて、10倍以上長くなって しまいます。 # さらによーく見ると、「((void (*)(void *))-1)」と直書きする # よりも長くなってますね -1を指定するのは、README.EXTにも載っている伝統ある方法なので、 わざわざ今になって別名をつける事もなんじゃないでしょうか。 それとも、どこからか意見や議論があったのでしょうか。 (見逃してたならごめんなさい) また、もし「『-1』というマジックナンバーを指定するのが汚い」、 「『-1』と直書きした場合、『(void (*)(void *))とintの型が違う』と コンパイラに怒られる」(ということはあったかなぁ?)などの理由で -1と書きたくないならば、それらの多くはRTypedDataのみでなくRDataにも 当てはまることではないかと推測します。それならばTypedでない方の RData用にも、RUBY_DEFAULT_FREE 等を定義するのが筋ではないで しょうか。その場合は同様に、RUBY_NEVER_FREE == (void (*)(void *))0 や RUBY_TYPED_NEVER_FREE を定義する必要も出るでしょう。 ということで、中途半端だと混乱するので、 ・一通り別名を用意して、これからはそちらを使うように推奨する ・長い別名は定義せず、簡潔な数値の直書きを第一手段とし続ける のどちらかにちゃんとそろえて欲しいです。 よろしくおねがいします。 ---------------------------------------- http://redmine.ruby-lang.org