Shiro Kawai
shiro****@lava*****
2004年 2月 21日 (土) 07:10:25 JST
ども。 私がこの方法を採用しなかったのは、 PORT_SAFE_CALLのオーバーヘッドを恐れたからです。 ファイルポートでデータをバッファに置くだけの場合 (つまり、bufport_flushを呼ばない場合)と、出力 文字列ポートの場合、コード内でエラーを投げることが 無いので、PORT_SAFE_CALLを噛ませるのが無駄になります。 そして、多分そういう状況が、文字出力のほとんどの場合を 占めると思います。 ただ、このへんはベンチ取りながらいろいろ変えたような気も するのですが、果してご指摘の組合せ (unsafe call全体を PORT_SAFE_CALLで囲む) でベンチを取ったかどうか覚えて いません。実はそんなに影響がないかもしれないです。 もしよければこんな感じでベンチとってみて下さい。 (use gauche.time) (time (dotimes (i 1000) (with-output-to-string (lambda () (dotimes (i 1000) (write-byte 0))))) #f) --shiro