Shiro Kawai
shiro****@lava*****
2002年 12月 12日 (木) 12:37:11 JST
From: Kimura Fuyuki <fuyuk****@hadal*****> Subject: [Gauche-devel-jp] digest Date: Thu, 12 Dec 2002 09:38:32 +0900 > ただ、マニュアルにひとつ事実誤認があって、digest 系関数も > digest-string 系と同様結果は string で返します(port に出力でなく)。実 > はここは私も迷ったところなので、マニュアルにコードを合わせてしまったほ > うがいかもしれません。 ああ、ついrfc.base64やtext.trに引きずられて勘違いして いました。 port->portの方が他のモジュールとの一貫性はあるんですが、 digestを使う場面を考えるとportに出力する利点はあまり なさそうですね。直しておきます。 > それと、digest-string の実装は digest.scm のなかに移してしまったほうが > すっきりすると思います(添付参照)。 そうしましょう。 > の問題に個人的な結論が出ているのでついでに書いておきます。こういう用途 > やバイナリファイル操作のために Perl のpack/unpack みたいのがあればいい > なあとも思っていて、それはいまでも変わらないのですが、Scheme の場合ま > ず必要なのは「read/write のペアたくさん」です。 APIとして、pack/unpack系とread-*/write-* 系は両方使いでが あるのでいずれ用意したいですね。 実装の選択として、あくまでstream-baseでやるか、buffer-base (u8vector等から直接変換)も用意するかというissueがあります。 stream-baseのread-*/write-*関数を基本にし、それらを使って pack/unpackを書き、bufferは内部的にstreamにして読み書きする、 というのが素直なんですが、生のCの構造体をu8vectorにマップして いじりたい、というような場合は、pack!みたいな関数にバッファと オフセットを渡して直接読み書きできるほうが嬉しいかなと。 将来FFIを入れる時にも使えそうですし。 このへんは使ってみないとわからないところもあるので、 実験的にread-*/write* 系あたりから実装していって みましょうか。 --shiro