| 
     
      
      
      From: KUBO T. <ku...@ji...> - 2002-08-27 13:40:43
      
     
   | 
久保@茅ヶ崎市です。
Masao Mutoh <mu...@hi...> writes:
>> > data = rb_ary_new3(3, rb_f_lambda(), INT2NUM(id), args);
>> >
>> > というようにINT2NUM(id)としていて、それの逆だから
>> > NUM2INT()を使っているだけのような気がします。
>> > #のでまぁ動いていると。
>> 
>> ID は unsigned long に typedef されているので、NUM2INT() ではなくて
>> NUM2LONG() を使わないと Tru64 ではエラーになると思われます。
>> 
>> 問題となっているところはまだ全然見てないのですが、とりいそぎメールして
>> おきます。
あれから後、実装を見てみたのですが、parse.y の rb_intern() を見てみた
ところ、
    32 - ID_SCOPE_SHIFT => 32 - 3 => 29 bit
    NUM2INT なので 符号 bit の分を 1 bit 引いて 28 bit.
    28 bit で表現できる数 => 16777216
    16777216 - LAST_TOKEN => 16777216 - 356 => 16776860
なので、これだけの数の ID が生成されないかぎり問題は起こらなそうです。
というか、問題が起こるような ID 使いまくりの ruby script があったら、
ID がひとまわりして 32 ビットシステムではちゃんと動かないでしょう。
> なるほど。
> となるとやはりSymbolにした方が素直そうですね。
というわけで、この件に関しては実用上は杞憂でしょう。
けどまあ、Symbol にしたほうが素直だとは思います。
では、再見
-- 
神奈川県茅ヶ崎市在住 久保 健洋
email: ku...@ji...
web:   http://www.jiubao.org
GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1  9F47 C001 1F93 AC08 2262
 |