[ruby-trunk - Feature #7047][Open] Add new C API: rb_newobj_with

Issue #7047 has been reported by authorNari (Narihiro N.).


Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

Issue #7047 has been updated by ko1 (Koichi Sasada).

Description updated

ささだです.

1点気になるのが, rb_newobj_with(VALUE, enum ruby_value_type) が flag
取らなくてもいいんかな,という点でして.いや,NEWOBJ_WITH() だと,問答無用で enum ruby_value_type
じゃなくて,flag を渡しているようなんですが.その辺が整理出来ていない気がしています.

rb_newobj_with(klass, enum ruby_value_type type, VALUE flag)
なんてのもアリなのかとか,
rb_newobj_with(klass, VALUE flag) もアリかもとか.

_with という名前は,私もあまり妙案が無い感じです.with 何? という気もします.rb_typed_newobj
だと誤解を生みそうですね.なんか無いかな.


Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

Issue #7047 has been updated by authorNari (Narihiro N.).

レビューありがとうございます。
rb_newobj_with(klass, VALUE flags) でパッチを修正しました。

flagsさえ引数にとればenum ruby_value_type相当の情報は取れるはずなので問
題ないのかなと思います。

また名前の候補を考えたり、教えていただいたりしていました。

  • rb_type_new (青木さん案)
  • rb_typed_newobj (ささださん案)
  • rb_newobj_with_setup
  • rb_new_segregated_obj
  • rb_new_distinct_obj
  • rb_new_typed_obj
  • rb_gc_newobj

いまいちこれといった名前が思いつかないですね。
(rb_newobjがやっぱり適切な名前なんですよねぇ…)

私は rb_new_typed_obj あたりが好きです。


Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

Issue #7047 has been updated by authorNari (Narihiro N.).

ko1 (Koichi Sasada) wrote:

(2012/09/26 22:22), authorNari (Narihiro N.) wrote:

rb_newobj_with(klass, VALUE flags) でパッチを修正しました。

flags を取るようにしたので,rb_newobj_with_flags でどうでしょうか.
何かしら,マクロで隠蔽して,実質こいつは呼ばない,となると,長い名前でも
良いのではないか,と思うのですが(別に長くてもいいか?).

まつもとさんに直接意見を聞いてみました。
with_flagsでもいいと思うんだけど、引数としてはflagsもklassも、どちらも
何かしらのタイプを受け取るので、 rb_newobj_of(xxx) がいいのじゃないか、
とおっしゃってました。new obj of class みたいな意味で。

  • rb_newobj_of(klass, VALUE flags)
  • NEWOBJ_OF(obj,type,klass,flags)

反対意見がでなければこれで進めようかと思うのですが、いかがでしょうか?

あとでruby-coreの方にも聞いてみます。


Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

(2012/10/01 13:15), authorNari (Narihiro N.) wrote:

with_flagsでもいいと思うんだけど、引数としてはflagsもklassも、どちらも
何かしらのタイプを受け取るので、 rb_newobj_of(xxx) がいいのじゃないか、
とおっしゃってました。new obj of class みたいな意味で。

  • rb_newobj_of(klass, VALUE flags)
  • NEWOBJ_OF(obj,type,klass,flags)

+1

短くて判りやすいですね.
今後は …_of パターンが増えるんでしょうか.
しかし,やはりバリエーションを増やそうとすると困るな.

(2012/09/26 22:22), authorNari (Narihiro N.) wrote:

rb_newobj_with(klass, VALUE flags) でパッチを修正しました。

flags を取るようにしたので,rb_newobj_with_flags でどうでしょうか.
何かしら,マクロで隠蔽して,実質こいつは呼ばない,となると,長い名前でも
良いのではないか,と思うのですが(別に長くてもいいか?).

Issue #7047 has been updated by kou (Kouhei S.).

rb_obj_new()はどうでしょうか。
rb_obj_がprefixのみなさんとまぎらわしいかしら。

Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

Issue #7047 has been updated by authorNari (Narihiro N.).

Category set to core
Assignee set to authorNari (Narihiro N.)


Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee: authorNari (Narihiro N.)
Category: core
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。

Issue #7047 has been updated by authorNari (Narihiro N.).

kou (Kouhei S.) wrote:

rb_obj_new()はどうでしょうか。
rb_obj_がprefixのみなさんとまぎらわしいかしら。

ありがとうございます。
でも、おっしゃる通りすこし紛らわしい気がしますねぇ。

Feature #7047: Add new C API: rb_newobj_with

Author: authorNari (Narihiro N.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0

nariです。

現在のCRubyではオブジェクトを割り当てる際に rb_newobj() という関数を利
用していますが、引数にtypeやklassがないため、たとえばT_STRINGだけ違うと
ころに割り当てるなどの特別な処理がやりづらくなっています。

そこで以下のC APIの追加を提案します。

  • VALUE rb_newobj_with(VALUE, enum ruby_value_type);
  • #define NEWOBJ_WITH(obj,type,klass,flags)

ruby内部でrb_newobj()を使っているところはrb_newobj_with()に置き換えたい
と考えています。互換性のためにrb_newobj・NEWOBJ・OBJSETUP自体は残します
が、将来的には消したいですね。ただ2.0では難しそうです。

パッチは以下のとおりです。
https://github.com/authorNari/ruby/compare/trunk...rb_newobj2.patch

また、rb_newobj_withという名前よりよい名前(rb_newobj2以外)があれば教
えてもらえると嬉しいです。