wstem のプロセス生成の部分の設計は失敗している. fork は全て親が行うべき. configure で make が pmake か gmake なのかの自動判定はまだ ext/cgi/* のファイル中で chasen が自動置換されない lib/ae/syminfo.c で epsilon が固定. 使用する機種の浮動小数点の精度に 合わせて修正されたい. lib/ae/syminfo.c の比較関数で fequal を定義して使っているが, これを止 めても, その動作は, 浮動小数点の誤差にしか影響されない. 速度が必要とい う向きには外しても構わない(はず). ただし, ext/wam/samples にあるテスト が通らなくなる. 詳細は testsuit/ppp.c を参照のこと. ./lib/ae/wsh.c の中の UC というマクロは浮動小数点を == で比較(もしくは, >, < だけで比較)する. 安定性が必要なら, ./lib/ae/syminfo.c の dcompar (fequal を使用) を参考に修正されたい. configure で --with-depend を指定する十分条件は gcc を使っていること. lib/getamu/str*.c: POSIX では, (ある状況で?) str で始まる名前は予約されている? SunOS 5.6 で, WorkShop Compilers 4.2 C compiler を使用する場合, CFLAGS="-Dinline=" CC=/opt/SUNWspro/bin/cc ./configure --prefix=$GETAROOT とする. Solaris 2.6 + gcc で, simple_unifdef.c が正しく動作しない場合がある. -> getamu.h が壊れ, 後のコンパイルが通らない. -> 私が実験に使用した環境が変なのかもしれません. Debian GNU/Linux で fseeko, ftello が declare されない. 4G を越すファ イルを作らなければ(おそらく)問題無し. 各所で使っている zfree で, p が NULL かどうか判定してからfree を呼ん でいるが, そうする必要は無い. なお, free の前後で, ポインタが指す先を zero clear したり, ポインタに NULL を set したりしているが, 不要なもの と, 必要なものがある. (特に, 不要なものについて, 一貫性をもってそうし ているわけでは無いので注意. ) wsh.c で heap を作る部分がソースコード中に展開されている. これを関数に すると, 数%程度の性能低下を招く. さらにそれらが使っているAC や UC とい うマクロ, つまり比較関数を関数にすると, 最悪で数十%程度の性能低下を招 く. (上述の fequal も同類?) Debian GNU/Linux で void * 型の変数に算術演算を施す. (iovec の定義が不便) Solaris 2.6 + gcc で wait4 が declare されない? 何かのインストールミス? 要素の値(TF) は 27 bit しか有効ではない. これは, WAM 圧縮ルーチンの 制約である. 28bit 以上の要素 (値が 2^28 以上) を扱う場合, WAM のセット アップで非圧縮を選ぶ必要がある. 非圧縮の他に, raw (データを host order で格納する) モードもある. なお, 圧縮ルーチンによる圧縮率は約 50% であ る. malloc(0) が NULL を返す処理系への対応, というか, そもそも 0 byte 確保 しようとするのが悪い? といっても, 要素が 0 個の時は例外処理する, って のはなんか変. こういう場合, 一般にはどうするのでしょう. if (n && !(ptr = malloc(n))) { return -1; /* perror("malloc"); */ } else { ptr = NULL; } /* work here. never access to *ptr if n==0 */ free(ptr); とでもするのかしら. offsetof はいつでも使えるわけではない? 少なくとも libwam は thread safe ではない (それ以外にも危険なのがあ りそう. 未確認). cw_open, xr_open などで小さな整数を返す様に設計した のが失敗. open_wam, などの様にポインタを返す様にすべきであった. freqfile で列のサイズが 0 になると mkcw がエラーする. ホント? RedHat Linux などのモダンな Linux では, MAP_FAILED が redefined さ れているという警告が出る. (実害は無いと思われる. configure にもう少し 手を入れるべきか?) Linux などでは MAP_ANON の代わりに /usr/tmp/libxrXXXXXX というファイ ルを作成し, それをキャッシュに当てている. /usr/tmp の容量が不足すると 多分困ったことになる. この問題は, wam_ open に ENABLE_CACHE を渡さない ことで回避できる. 将来はキャッシュはサポートを外す方向で検討中. (WAM に非圧縮モードを付けたので, キャッシュの存在意義はかなり薄れた. ) Platform によっては mkw がメモリ不足で動かないことがある. その場合, lib/wam/mkw.c の FRAGSZDFL を小さくするか, mkw の引き数でオーバーライ ドすること. perl, version 5.003_02 + GCC で, perl5 インタフェースが動かない(バグ ではなく仕様です. perl5.005_03 を使って下さい). perl, version 5.004* does not work.