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

From: "ko1 (Koichi Sasada)" <redmine@...>
Date: 2012-09-25 07:59:16 UTC
List: ruby-dev #46160
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
https://bugs.ruby-lang.org/issues/7047#change-29732

Author: authorNari (Narihiro Nakamura)
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以外)があれば教
えてもらえると嬉しいです。



-- 
http://bugs.ruby-lang.org/

In This Thread