namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

byte order and bit length problem (Re: はじめまして )



site <takashi@xxxxxx> wrote:

>ちょっと訳あってFreeBSDからMklinux(DR2.1 UPDATE5)への移行を行っているので
>すが、
>Ver.110a以降からMklinux上で検索が出来なくなってしまったようではまりました^^;。
>
>いろいろ試した結果、Ver.1112のnamazu.cgiを使ってVer.100のmknmz.plでINDEX化し
>たものは
>検索できるようですので、Ver.110a以降のmknmzが原因ではないかと思っています。

v1.1.0 の時に mknmz.pl を Perl5 風に大幅に書き直したのでそれが原因
かもしれません。お使いの Perl のヴァージョンを教えていただけると何
か分かるかもしれません。

あ、そういえば Mklinux のマシンと FreeBSD のマシンって byte order
が違いませんか? Intel の CPU は little-endian ですが、 PowerPC は
どっちだろう…? もし違うなら、同じインデックスは使えませんね。

GNU の od(1) ならば

% perl -e 'print pack("I", 1);' | od -t x1

で byte order を調べられます。 GNU のじゃなければ

% perl -e 'print pack("I", 1);' | od -x

かな? 私は Linux + GNU Utilities の環境なのでよくわからない。

ちなみに、 Pentium の Linux だと

0000000 01 00 00 00

で、 HP-UX B.10.20 A 9000/715 のマシンだと

0000000 00 00 00 01

のような結果になります。

う〜む、やっぱり真面目に byte order の対応を考えた方が良さそうです
ね。インデックスはそのままで namazu 側で対応すればいいかな。 
NMZ.bo のようなファイルに int の 1 を記録しておいてそれをチェック
するとか。

あと、処理はすべて int で行っているのですが、これだと 32bit/64bit 
でまた問題になるかな…。周囲に 64bit なマシンはないのでテストでき
ませんが。

ところで、 K&R第2版によると

| 守るべき唯一の条件は, short と int は少なくとも 16 ビット, long 
| は少なくとも 32 ビット, short は int より長くてはならず、 int は 
| long より長くてはいけないということである。

だそうなので、もし、32bit に統一したいと思ったらなんだか結構厄介そ
うですね。この辺、 JAVA だと明確なんですが。このあたりの事情につい
て知恵をお貸しくださると助かります。

# 64bit マシンの short, long って何 bit だろう?

OS/2 対応パッチのマージと SunOS4 + perl5.003 問題を解決した版が手
元にあるのですが、どうせなら byte order の問題も一緒に解決して 
v1.1.1.3 としてリリースしようと思います。 

--
高林 哲 Satoru Takabayashi