えぐち@エスアンドイー です。

>>> In message [ruby-list:19506] Re: build on alpha
    On Wed, 15 Dec 1999 01:24:23 +0900, tokoma / sco.bekkoame.ne.jp (中川 誠) said:

tokoma> 中川です。

tokoma> # 能力では貢献できそうもないので、属性で勝負。

おかげさまで、64 Bit CPU での完成度も、格段に上がったと思います。

tokoma> ところで、何故 gcc では現象が起きないのでしょう。

たぶん gcc では cc の -taso 相当が、ディフォルトなのでは?
#根拠希薄 ^^;;

反対に -taso なしの cc では、ヒープを 4G 越に置くようです。
この副作用で、int からポインタの変換のバグが発見できたわけで、
バグ再現には適した環境ですね。(^^)

tokoma> gcc 自身は 64bit 化されていないということなのでしょうか。

  % ruby -ve 'p 0.size'
  ruby 1.5.0 (1999-12-14) [i386-freebsd3.4]
  4

が 4 でなく 8 を返したら、 long は 8 バイトですので、
「64bit 化されている」と考えていいでしょう。

ところで、ちょっと 64bit 化 による恩恵について考えましたが、
演算単位が倍になるので Bignum が速くなりそうな気がします。
しかし、調べてみたら

  typedef unsigned short USHORT;

に固定でしたので、現状は貢献していないようです。

末尾のパッチを当てて、make test してみてください。

	えぐち

Index: bignum.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp/ruby/bignum.c,v retrieving revision 1.4 diff -d -u -r1.4 bignum.c --- bignum.c 1999/12/06 09:03:49 1.4 +++ bignum.c 1999/12/15 01:53:09 @@ -13,7 +13,13 @@ #include <ctype.h> VALUE rb_cBignum; +#if SIZEOF_LONG == SIZEOF_SHORT * 2 typedef unsigned short USHORT; +#elif SIZEOF_LONG == SIZEOF_INT * 2 +typedef unsigned int USHORT; +#else +typedef unsigned char USHORT; +#endif #define BDIGITS(x) RBIGNUM(x)->digits #define BITSPERDIG (sizeof(short)*CHAR_BIT)