haskell-ja > Archives > 2013/02/09

2013/02/09 01:54:20 UTCcutsea110
#
ByteStringの正格、非正格の使い分けについて詳説プリーズ。
#
> 使い方の結論を述べると、入力には正格 ByteString、出力は遅延 ByteString を用います。そういう風に使えてないとなると、あなたのコードはまだまだアマチュアなのです。(あどけない話: http://d.hatena.ne.jp/kazu-yamamoto/20110525/1306298046)
#
これって SB.ByteString -> LB.ByteString的にしろってこと?
#
入力出力ってどういう意味だろう
#
大抵ライブラリ見てるとLB->LBだったりSB->SBだったりするんだけど、複数のライブラリを使うとうまく口金が合わなくて毎回from/toしまくることになっていやな感じ。
#
例えばRSAのencrypt/decryptはLBなんだけど、一方でBase64のencode/decodeはSBで口金合わんのでfrom/toで変換噛ますんだけどダセーの。
#
TextとByteStringはまぁ別物だからしょうがないけど、それでも変換いろいろ必要になったりして邪魔くさいと思うことがある。
#
この辺なんとかならんもんか。
2013/02/09 02:10:39 UTCnotogawa
#
遅延 -> 正格 は"遅い"から,実装したい処理全体としては 正格 -> 正格 / 正格 -> 遅延 / 遅延 -> 遅延 のどれかになっているべきというのはありますよね.
2013/02/09 03:13:09 UTCcutsea110
#
ああ、そうなの?
#
遅延て正格なByteStringのリストってことなので、リスト処理の感覚から言えば遅延 -> 正格の方が融通が効くのかなーとか思ったりもしました。生産者消費者パターンであれば生産者が無限リスト的なものでも待たされないという感覚で。
#
正格 -> 遅延なのか、なんかcategory出来そう。
2013/02/09 03:17:15 UTCnotogawa
#
遅延BSの頭のほうだけ見て結果の正格BSが出せるなら"待たされない"のですけどね.
2013/02/09 03:17:34 UTCcutsea110
#
ええ。
2013/02/09 03:26:23 UTCcutsea110
#
全てを処理する必要があるなら正格 -> 正格で組むのがいいのかしらん。
2013/02/09 03:30:52 UTCcutsea110
#
長さと、その文字列に対してどういう処理をするかによるか。
2013/02/09 03:31:04 UTCnotogawa
#
遅延 -> 遅延は"入力の先頭から出力の先頭を少しづつ確定していける処理"つまりストリームに対するon the flyな処理ですね.
#
正格 -> 遅延は"入力全体の情報を使いながら出力の先頭を少しづつ確定していける処理"ということになります.
2013/02/09 03:32:02 UTCcutsea110
#
ええ、RSAとかはそうなんでしょうね。LBになってる。
#
Base64って最後の=*の部分があるけど、基本的にはあれは遅延でもいけるんじゃないだろうか。
#
SBなんだよなーあれ。
2013/02/09 03:34:18 UTCnotogawa
#
まぁ確かになんかよくわかんないIF持ってる奴結構いる気はします.
2013/02/09 03:34:21 UTCcutsea110
#
遅延 -> 正格は"入力全部を必要としないかもしれない処理"でしょうか。
#
ですよねぇ。
2013/02/09 03:35:31 UTCnotogawa
#
そうですね.もっと言うなら"入力の前半しか"とかでしょうか?
2013/02/09 03:37:35 UTCcutsea110
#
正格 -> 正格は"あまり巨大ではない列の全体の情報を使う処理"ってところかなぁ。