中川です。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
Subject: [ruby-list:8660] Re: can't build 1.1b9_28 on digital-unix
Date: Thu, 9 Jul 1998 16:36:31 +0900

> |> % ruby -e 'p 1<<1014'
> |> % ruby -e 'p 2**1014'
> 
> こちらも教えて下さいね.

1.1b9_29, 1.1b9_29+[ruby-list:8660]のパッチ、1.1b9_30 で同じ
結果になりました。

% ruby -e 'p 1<<1014'
175555970201398037864189960037990696642380564349834626243584063630598316216309534309285622385163609395625111210811907575838661883607828732903171318983861449587663958422720200465138886329341888788528401320395513446131006525725061407689368272012526598792334483090416306874948482361796597953940777665648656384

% ruby -e 'p 2**1014'
0

% ruby -e 'p (-1<<31)'
-2147483648

% ruby -e 'p (-1<<32)'
0

% ruby -e 'p (-1<<1014)'
-175555970201398037864189960037990696642380564349834626243584063630598316216309534309285622385163609395625111210811907575838661883607828732903171318983861449587663958422720200465138886329341888788528401320395513446131006525725061407689368272012526598792334483090416306874948482361796597953940777665648656384

b9_29+[ruby-list:8660]のパッチでは make test はこうなりました。
% make test
/usr/users/nakagawa/ruby-1.1b9_29/sample/test.rb:488:in `/': integer -2102132736
 too big to convert to `int'. (ArgumentError)
        from /usr/users/nakagawa/ruby-1.1b9_29/sample/test.rb:488
test failed

bignum.c が
> @@ -653,6 +653,6 @@
ではじかれるので
> @@ -653,4 +653,4 @@
にして無理矢理あてたのでやりかたが悪かったかもしれません。

b9_30 の make test は

$good = true;
for i in 1000..1014
  $good = false if ((1<<i) != (2**i))
end
ok($good)

で失敗してました。
# 正確なログを勤務先に忘れてきてしまったので
# 明日報告します。すみません。

> これだとFIXNUMはintのサイズ(4バイト)になります.個人的には
> 64 bitマシンではFIXNUMは8バイトの方が良いと思っているので,
> 以下のパッチの方を推奨します.

なるほど。
README.EXT.jp を読んで FIXNUM は環境に依存せず 31bit 整数だと
思いこんでました。失礼しました。

--
中川 剛 / nakagawa / shizuokanet.ne.jp