Data.Text
よりもはるかに効率的な文字列データの格納方法であることはわかっていString = [Char]
ます。ただし、ライブラリで見られる多くの関数は、String
それらに渡されることを期待しているようです。Char
ポインタが文字列自体よりも多くのスペースを占有することを考えると、s の連結リストは読むのが非常に効率が悪いようです。リストの融合 (常に可能であるとは限らない) 以外に、GHC が のストレージに対して行う最適化はあり[Char]
ますか? また、同様の原則を他のリストに適用しますか?
質問する
261 次
3 に答える
5
String
すべての基本ライブラリ関数がより効率的な型の代わりに使用する理由は、必要なテキストText
ライブラリが基本ライブラリの一部ではないためです。ただし、テキスト ライブラリには、さまざまな入出力関数の独自のバリアントが用意されています。で見つけることができますData.Text.IO
。
また、効率的な I/O のために、通常はコンジット、イテレート、パイプなどの最新の抽象化の 1 つを使用することに注意してください。
于 2012-07-31T04:28:12.950 に答える
2
GHC では、平均的なケースでコード ポイントごとに 5 語String
を使用します。ただし、これは、ランタイムが ASCII 範囲の文字を事前に割り当てるという事実によって軽減されます。
于 2012-07-31T04:03:35.297 に答える
-1
これが答えです。
Bytestringは一種のリストのようなもので、各要素のみが 1 バイト (または 8 ビット) のサイズです。怠惰への対処方法も異なります。
于 2012-07-31T09:18:06.817 に答える