[#35789] [Ruby 1.9 - Bug #407] (Open) String#<< — Shyouhei Urabe <redmine@...>

チケット #407 が報告されました。 (by Shyouhei Urabe)

13 messages 2008/08/06

[#35845] [Bug #437] test_strftime(TestTime) fails on Solaris — Shugo Maeda <redmine@...>

Bug #437: test_strftime(TestTime) fails on Solaris

24 messages 2008/08/13
[#35855] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — "Shugo Maeda" <shugo@...> 2008/08/15

前田です。

[#35856] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — SATOH Fumiyasu <fumiyas@...> 2008/08/15

さとうふみやす @ OSS テクノロジです。

[#35857] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — Yukihiro Matsumoto <matz@...> 2008/08/15

まつもと ゆきひろです

[#35870] Re: [Bug #437] test_strftime(TestTime) fails on Solaris — "Shugo Maeda" <shugo@...> 2008/08/18

前田です。

[#35863] Refactoring of enumerating prime numbers — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

20 messages 2008/08/16
[#35865] Re: Refactoring of enumerating prime numbers — keiju@... (keiju ISHITSUKA) 2008/08/17

けいじゅ@いしつかです.

[#35867] Re: Refactoring of enumerating prime numbers — "Yugui (Yuki Sonoda)" <yugui@...> 2008/08/17

Yuguiです。

[#35875] Re: Refactoring of enumerating prime numbers — keiju@... (keiju ISHITSUKA) 2008/08/19

けいじゅ@いしつかです.

[#35877] Re: Refactoring of enumerating prime numbers — Nobuyoshi Nakada <nobu@...> 2008/08/19

なかだです。

[#35882] Re: Refactoring of enumerating prime numbers — keiju@... (石塚圭樹) 2008/08/20

けいじゅ@いしつかです.

[#35904] [Feature:1.9] pack format 'm' based on RFC 4648 — "Yusuke ENDOH" <mame@...>

遠藤です。

14 messages 2008/08/21
[#36442] [Feature #471] pack format 'm' based on RFC 4648 — Yuki Sonoda <redmine@...> 2008/09/22

チケット #471 が更新されました。 (by Yuki Sonoda)

[#35906] %N for Time#strftime — "Shugo Maeda" <shugo@...>

前田です。

13 messages 2008/08/21

[#35986] 1.9と1.8で、delegateのインスタンスのクラス名の違う — Fujioka <fuj@...>

xibbarこと藤岡です。

17 messages 2008/08/26
[#35987] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — Yukihiro Matsumoto <matz@...> 2008/08/26

まつもと ゆきひろです

[#35991] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — keiju@... (石塚圭樹) 2008/08/26

けいじゅ@いしつかです.

[#35994] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — Fujioka <fuj@...> 2008/08/27

藤岡です。

[#35998] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う — keiju@... (石塚圭樹) 2008/08/27

けいじゅ@いしつかです.

[#36066] Numeric#scalar? — Tadayoshi Funaba <tadf@...>

1.9 の Numeric#scalar? について、適当でないのでは (real? などのほうがい

24 messages 2008/08/31
[#36069] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/08/31

原です。

[#36104] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/02

> やはり、scalar? はずれているんじゃないかな。real? の方がいい

[#36122] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/09/03

原です。

[#36133] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/03

> ここで、scalar? を疑問視する理由を復習すると、たとえば、「複

[#36173] Re: Numeric#scalar? — Tadayoshi Funaba <tadf@...> 2008/09/05

1.9.1 までに時間がないので scalar? だけ何とかしたいと思っていましたが、

[#36183] Re: Numeric#scalar? — "Shugo Maeda" <shugo@...> 2008/09/06

前田です。

[#36186] Re: Numeric#scalar? — Shin-ichiro HARA <sinara@...> 2008/09/06

原です。

[ruby-dev:36059] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う

From: "Keita Yamaguchi" <keita.yamaguchi@...>
Date: 2008-08-30 13:58:59 UTC
List: ruby-dev #36059
山口と申します。

DelegateClassの振舞いが早く確定すると安心できていいなぁ、
と思うので気付いた点を書かせて頂きます。

2008/8/28 石塚圭樹 <keiju@ishitsuka.com>:
> けいじゅ@いしつかです.
>>というわけで、classに関しては、敢えて1.8の挙動を変更する必要
>>はないと思います。
>
> ただ, 逆にお聞きしたいですが, Ruby1.9の振る舞いで困ることあります?

直せばいいだけのことかも知れませんので
「困ること」に直接該当するかは分かりませんが、
現状の 1.9 の振舞いのまぎらわしい点を三点挙げておきます。

1. Module#===

これは既に石塚さんが挙げられました通りに、
case文において問題となります。

require "delegate"

class A; end
DA = DelegateClass(A)

da = DA.new(A.new)
da.class #=> A

case da
when A ; A
when DA; DA
end #=> DA

2. ObjectSpace.each_object

以下のように ObjectSpace.each_object が
紛らわしいことになります。

require "delegate"

class A; end
class DA < DelegateClass(A)
  def hello; "world"; end
end

da = DA.new(A.new)
da.class #=> A

ObjectSpace.each_object(DA) do |obj|
  obj.hello #=> "world"
end

ObjectSpace.each_object(A) do |obj|
  obj.hello #=> undefined method `hello'
end

da.class は A を返すのに、ObjectSpace でオブジェクトを
取り出す時にはクラス DA を指定しなければなりません。

3. UnboundMethod#bind

エラーメッセージがややこしいことになります。

require "delegate"

class A
  def hello; "world"; end
end

DA = DelegateClass(A)

da = DA.new(A.new)
da.kind_of?(A)     #=> true
da.instance_of?(A) #=> true

m = A.instance_method(:hello)
m.bind(da)
#=> bind argument must be an instance of A (TypeError)

以上に挙げた三点は基本的に C で rb_obj_is_kind_of を
呼び出しているために起きる現象であると思います。
DelegateClass を用いて #kind_of? を委譲したとしても
こうしたものに関してはどうしても無力ですので、
拡張ライブラリにおいても同様に問題になる可能性があります。

従ってもし 1.9 の今の振舞いのままにするのであれば
rb_obj_is_kind_of 及び rb_obj_is_instance_of を
修正しなければならないのだろうと思います。
また同様にして rb_obj_class や rb_obj_classname に
起因するややまぎらわしい状況が成立する可能性もあります。

私はこうした問題が全面的に解決されるのであれば
1.9 の今の振舞いのままで良いと思います。
たとえば Tempfile の例を考えれば、インスタンスがなるべく
File のように振る舞う方が嬉しいのは確かです。

一方もしこれらが解決されない場合
こうしたまぎらわしい場面に直面してしまうと、
ruby の実装に関する知識がないと状況の把握が困難です。
この場合 1.8 の振舞いに戻すのが無難であると思います。

---
山口慶太

In This Thread