Project

General

Profile

Feature #3068

[TypedData] RUBY_TYPED_DEFAULT_FREE は必要?

Added by tad (Tadashi Saito) over 9 years ago. Updated over 8 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-

Description

=begin
斎藤と申します。

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 を定義する必要も出るでしょう。

ということで、中途半端だと混乱するので、

・一通り別名を用意して、これからはそちらを使うように推奨する
・長い別名は定義せず、簡潔な数値の直書きを第一手段とし続ける

のどちらかにちゃんとそろえて欲しいです。

よろしくおねがいします。
=end

History

#1

Updated by ko1 (Koichi Sasada) over 9 years ago

=begin
 ささだです.

(2010/04/01 1:27), Tadashi Saito wrote::

1.9.2からRUBY_TYPED_DEFAULT_FREEというのが導入されるようですが、
これは本当に必要なものでしょうか。

 -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 を定義する必要も出るでしょう。

 まぁ,あってもいいかもしれませんねぇ.

--
// SASADA Koichi at atdot dot net
=end

#2

Updated by ko1 (Koichi Sasada) over 9 years ago

=begin
 ささだです.

(2010/04/01 1:27), Tadashi Saito wrote::

1.9.2からRUBY_TYPED_DEFAULT_FREEというのが導入されるようですが、
これは本当に必要なものでしょうか。

 -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 を定義する必要も出るでしょう。

 まぁ,あってもいいかもしれませんねぇ.

--
// SASADA Koichi at atdot dot net

=end

#3

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

=begin
なかだです。

At Thu, 1 Apr 2010 01:27:52 +0900,
Tadashi Saito wrote in [ruby-dev:40889]:

「『-1』と直書きした場合、『(void (*)(void *))とintの型が違う』と
コンパイラに怒られる」(ということはあったかなぁ?)などの理由で

これが理由です。

-1と書きたくないならば、それらの多くはRTypedDataのみでなくRDataにも
当てはまることではないかと推測します。それならばTypedでない方の
RData用にも、RUBY_DEFAULT_FREE 等を定義するのが筋ではないで
しょうか。その場合は同様に、RUBY_NEVER_FREE == (void (*)(void *))0
や RUBY_TYPED_NEVER_FREE を定義する必要も出るでしょう。

Data_Make_StructやData_Wrap_Structの中でキャストされるので、なく
てもRDataには警告は出ません。また、リテラルの0はNULLポインタと同
一視されるので、こちらも出ません。ということで、警告を抑えるため
に必要なのはRUBY_TYPED_DEFAULT_FREEだけというのが理由です。

ということで、中途半端だと混乱するので、

・一通り別名を用意して、これからはそちらを使うように推奨する
・長い別名は定義せず、簡潔な数値の直書きを第一手段とし続ける

のどちらかにちゃんとそろえて欲しいです。

別名を用意することには反対ではありません。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

=end

#4

Updated by naruse (Yui NARUSE) over 9 years ago

  • Status changed from Open to Rejected

=begin

=end

Also available in: Atom PDF