From: hiroshi h. <cos...@gm...> - 2014-09-27 05:20:05
|
畑ケです。 Rubinius 2.2.10がrbenvでも入るようになっていたので少しづつ見ています。 そこでRubiniusではC拡張部分のマクロにRUBY_T_XXXではなくT_XXXしか見当たら ないように見えました。 すると例えば次のように変更しないとundefinedでエラーになってしまいます。 --- @@ -828,13 +828,13 @@ rbg_inspect (VALUE object) VALUE rbg_to_array (VALUE object) { - return rb_convert_type(object, RUBY_T_ARRAY, "Array", "to_ary"); + return rb_convert_type(object, T_ARRAY, "Array", "to_ary"); } --- Ruby-GNOME2でRUBY_T_XXX形式のマクロを使っている理由は何かあるんでしょうか? ruby/ruby.hをみても https://github.com/ruby/ruby/blob/445086e56b4c847610506cf6bb072ef928329355/include/ruby/ruby.h#L457-L482 のようにRUBY_T_XXXをT_XXXへ定義しなおしているようで、 T_XXXを使ったほうがCRuby以外でも対応しやすくなるんじゃないかなぁと思いま した。 そこまでの対応をひと通り分かる範囲でやってみました: https://github.com/cosmo0920/ruby-gnome2/compare/remove-ruby_prefix ここまでは良いんですが、FL_TEST, FL_SINGLETONと言った内部のフラグ周りま では追ったことがまだないので、 この辺りで力尽きました…。 |
From: Kouhei S. <ko...@co...> - 2014-09-27 09:05:23
|
須藤です。 In <542...@gm...> "[ruby-gnome2-devel-ja] Rubinius非互換なマクロ(RUBY_T_XXX)について" on Sat, 27 Sep 2014 14:19:54 +0900, hiroshi hatake <cos...@gm...> wrote: > Ruby-GNOME2でRUBY_T_XXX形式のマクロを使っている理由は何かあるんでしょうか? それがCRubyの最新のAPIだからです。 (マクロじゃなくてenumですね。) > ruby/ruby.hをみても > https://github.com/ruby/ruby/blob/445086e56b4c847610506cf6bb072ef928329355/include/ruby/ruby.h#L457-L482 > > のようにRUBY_T_XXXをT_XXXへ定義しなおしているようで、 > T_XXXを使ったほうがCRuby以外でも対応しやすくなるんじゃないかなぁと思いま > した。 これは後方互換性のためです。(と私は思っています。) Ruby用のシンボルなのにプレフィックスを付けずに使っているのは 行儀が悪いのでRUBY_をつけるようになったんだと私は思っていま す。で、名前を変えると既存の拡張ライブラリーが動かなくなるの でご完成のためにT_XXXという別名を提供しているんだと思います。 なので、RUBY_T_XXXがないときはRUBY_T_XXXでT_XXXを参照するよ うなマクロを定義するのがよいと思います。 > ここまでは良いんですが、FL_TEST, FL_SINGLETONと言った内部のフラグ周りま > では追ったことがまだないので、 > この辺りで力尽きました…。 ここ、常にsuperclass呼んじゃっていいんじゃないですかねぇ。。。 singleton classかどうかで場合分けせずに。。。 |
From: hiroshi h. <cos...@gm...> - 2014-09-27 11:04:09
|
畑ケです。 >> Ruby-GNOME2でRUBY_T_XXX形式のマクロを使っている理由は何かあるんでしょうか? > それがCRubyの最新のAPIだからです。 > (マクロじゃなくてenumですね。) > >> ruby/ruby.hをみても >> https://github.com/ruby/ruby/blob/445086e56b4c847610506cf6bb072ef928329355/include/ruby/ruby.h#L457-L482 >> >> のようにRUBY_T_XXXをT_XXXへ定義しなおしているようで、 >> T_XXXを使ったほうがCRuby以外でも対応しやすくなるんじゃないかなぁと思いま >> した。 > これは後方互換性のためです。(と私は思っています。) > Ruby用のシンボルなのにプレフィックスを付けずに使っているのは > 行儀が悪いのでRUBY_をつけるようになったんだと私は思っていま > す。で、名前を変えると既存の拡張ライブラリーが動かなくなるの > でご完成のためにT_XXXという別名を提供しているんだと思います。 > > なので、RUBY_T_XXXがないときはRUBY_T_XXXでT_XXXを参照するよ > うなマクロを定義するのがよいと思います。 なるほど、RUBY_T_XXXの方が新しかったんですね…。 RUBY_T_XXXを定義するように…、とやろうとしました。 ですが、どうせならRubiniusのupstreamへこの辺りのenum事情を報告して、 取り込んでもらったほうが良いかな、と思ったのでプルリクを投げてみました。 https://github.com/rubinius/rubinius/pull/3141 丁度Rubiniusにも過去にglib2のgemのビルドに失敗するというIssue https://github.com/rubinius/rubinius/issues/1988 が上がっていたことも あったので、 治せるならRubinius側で対処できるような形式でした方がお互いにとって良いこ とだと思ったからです。 # 問題を治すのはできる限りupstreamで、可能ならパッチも添えて、ですよね :) >> ここまでは良いんですが、FL_TEST, FL_SINGLETONと言った内部のフラグ周りま >> では追ったことがまだないので、 >> この辺りで力尽きました…。 > ここ、常にsuperclass呼んじゃっていいんじゃないですかねぇ。。。 > singleton classかどうかで場合分けせずに。。。 > こちらはsingleton classの場合分けを削除したコミットをmasterにしました! |
From: Kouhei S. <ko...@co...> - 2014-09-28 03:45:12
|
須藤です。 In <542...@gm...> "Re: [ruby-gnome2-devel-ja] Rubinius非互換なマクロ(RUBY_T_XXX)について" on Sat, 27 Sep 2014 20:03:59 +0900, hiroshi hatake <cos...@gm...> wrote: > RUBY_T_XXXを定義するように…、とやろうとしました。 > ですが、どうせならRubiniusのupstreamへこの辺りのenum事情を報告して、 > 取り込んでもらったほうが良いかな、と思ったのでプルリクを投げてみました。 > https://github.com/rubinius/rubinius/pull/3141 > > 丁度Rubiniusにも過去にglib2のgemのビルドに失敗するというIssue > https://github.com/rubinius/rubinius/issues/1988 が上がっていたことも > あったので、 > 治せるならRubinius側で対処できるような形式でした方がお互いにとって良いこ > とだと思ったからです。 > > # 問題を治すのはできる限りupstreamで、可能ならパッチも添えて、ですよね :) さすがです! そのとおりですね。 >>> ここまでは良いんですが、FL_TEST, FL_SINGLETONと言った内部のフラグ周りま >>> では追ったことがまだないので、 >>> この辺りで力尽きました…。 >> ここ、常にsuperclass呼んじゃっていいんじゃないですかねぇ。。。 >> singleton classかどうかで場合分けせずに。。。 >> > > こちらはsingleton classの場合分けを削除したコミットをmasterにしました! ありがとうございます! |
From: hiroshi h. <cos...@gm...> - 2014-10-16 12:37:03
|
畑ケです。 >>>> ここまでは良いんですが、FL_TEST, FL_SINGLETONと言った内部のフラグ周りま >>>> では追ったことがまだないので、 >>>> この辺りで力尽きました…。 >>> ここ、常にsuperclass呼んじゃっていいんじゃないですかねぇ。。。 >>> singleton classかどうかで場合分けせずに。。。 >>> >> こちらはsingleton classの場合分けを削除したコミットをmasterにしました! > ありがとうございます! > いやーな予感というものは的中するもんですね。 という意味深な前置きをしつつ、こんなバグ報告が上がってきました。 https://twitter.com/toshi_a/statuses/522688336268247042 このコミットが原因のようです。 https://github.com/ruby-gnome2/ruby-gnome2/commit/12e7d65ce23184cf5a772263259f5dafaa7b3d97 実際にこのコミットをrevertするとウィンドウからフォーカスが外れた際に 1CPUを100%で食いつぶす挙動とびっくりするほどのもっさり感はほぼなくなりま した。 この箇所は一体何の意味があるんだろうとこの箇所を削除する前のコミットへ 戻ってgit blameをしてみました。 https://github.com/ruby-gnome2/ruby-gnome2/commit/e9e6b03700f0ebe9c80663169e69b3d04f0c76ef すると、 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/23690 に行き着きました。 Singleton class(特異クラス)のsuper classの扱いを特別扱いにするようにしな いとマズイんですかね…。 どことなく実は削除してはまずかったような感じです。 revertしますか? |
From: Kouhei S. <ko...@co...> - 2014-10-17 14:37:56
|
須藤です。 In <543...@gm...> "Re: [ruby-gnome2-devel-ja] Rubinius非互換なマクロ(RUBY_T_XXX)について" on Thu, 16 Oct 2014 21:36:49 +0900, hiroshi hatake <cos...@gm...> wrote: > どことなく実は削除してはまずかったような感じです。 > revertしますか? その前に何が原因か調べたほうがよいと思います。 小さな再現スクリプトって持っていますか? |