64bit Linux対応
R6RS関連のデバッグが一通り終わったのでイプシロンを64bit Linux対応にしてみました。
開発用のUbuntu 64bitをWindows VistaのNTFSパーティションにインストール。32bit版と64bit版の動作を比較しながら開発するのでgcc-multilibとg++-multilibを導入しています。これらは標準で入ってると思ってたんですがオプション扱いでしたね :p
心配してたGC関連は良かったのですが、sizeof(fixnum) == sizeof(int)と仮定している古いコードに問題が発生してしまいました。主に5000行を越える算術演算部分(arith.cpp)と格闘すること十数時間(*1)でFFIを除くすべてのテストが通りました。いやいや最初LinuxがILP64だと勘違いしてたのは痛かったです。FFIは次のリリースまでに作成しようと思います :)
さて、気になるパフォーマンスですが・・・・・まあ思った通りパッとしません :o
やはりペアが8バイトから16バイトに増加するペナルティーが大きいのではないでしょうか。感覚的には64bit-binary-on-Linux64 >= 32bit-binary-on-linux32 > 32bit-binary-on-linux64といった所です。ただ妙に高速化するテストがいくつかあるのが気になります。なにか秘密が隠されているかもしれませんね!
64bitのバイナリはsvn repositoryのtrunkで以下のようにすると作成できます(*2)
$ make -f Makefile.x64 clean $ make -f Makefile.x64 $ make -f Makefile.x64 check $ make -f Makefile.x64 install
*1: fixnumのレベルでバグがあるとテストプログラムも動かないので大変です orz
*2: 現在のバージョンはFFIが使えないことに注意してください。