From: EGUCHI Osamu Date: 1997-10-10T12:00:14+09:00 Subject: [ruby-dev:719] 64bit int support (Re: _muldi3 included in libgcc.a) えぐち です。 ---------- > 差出人 : Yukihiro Matsumoto > 件名 : [ruby-dev:718] Re: _muldi3 included in libgcc.a(Re: rbc.rb) > 送信日時 : 1997年10月10日 9:09 > > まつもと ゆきひろです > > In message "[ruby-dev:717] Re: _muldi3 included in libgcc.a(Re: rbc.rb)" > on 97/10/10, "EGUCHI Osamu" writes: > > |えぐち です。 > > |> 気を使ったつもりでもintとlongとvoid*が同じサイズである事を仮 > |> 定したコードがたくさん残ってましたから,この辺からなんとかし > |> ていかないといけませんねえ. > | > |明示に形変換を行うマクロを ruby.h で定義することになるんでしょうか? > > そうなんでしょか? まだ方針すら思い付いていません. いまさら sizeof(int) == 2 の処理系をサポートしないでしょうが、 sizeof(long) == 8 に対応するなら(困難でなければ)16 でも 32 でもコンパイル可能なようにしたいですね。 ところで、alpha-linuxでは sizeof({long,void*,int,short})は、それぞれいくつになりますか? 問題が sizeof(long) != sizeof(void*) なのか sizeof(long) != sizeof(int) なのかが理解できていないのです(面目ない)。 (もちろん他にも問題ありそうですが、、) > |まず、 > | ruby -e 'p 0.size' > | > |で 4 を返すのが仕様なのか、実装依存かを決めておく必要がありそうです。 > |marshal なデータファイルの互換性からすると > | > | 0.size == 4 > | > |を仕様にした方がいいように思えます。 > > 私はInteger#sizeは実装依存で構わないと思っています. > marshalは(まだ不十分ですが)intのサイズに依存しないように設計 > しています marshal.c の long_toobig() であきらめちゃってるところを longlong_tobig() にする必要ありって事ですね(笑) あと、Bignum の DIGIT の大きさを2バイトと仮定するのは 今後問題にならないですか?(仕様ですか?) 今の marshal はそれを仮定しているようですが如何でしょう? > |この為だけ、C++ で ruby を書き直すと言う選択は(当然)却下ですね (^^) > > ははは.私はC++がいやでrubyを作っているようなもんですからね. > それはちょっと受け入れにくいですね. ruby を KnR1 で書いているあたりに、気持ちがにじみ出ていますよね。 たぶん「あとから取ってつけたオブジェクト指向」にイビツなものを 感じるのだと思います。 少なくとも、私はそう感じます、、でも仕事では使わざるをえない という悲しい現実が、、 ぢゃ、C++ のクラスで 8byte整数ライブラリを実装するのは、 検討の余地なしと言うことにしましょう。 えぐち