4

Data.Textよりもはるかに効率的な文字列データの格納方法であることはわかっていString = [Char]ます。ただし、ライブラリで見られる多くの関数は、Stringそれらに渡されることを期待しているようです。Charポインタが文字列自体よりも多くのスペースを占有することを考えると、s の連結リストは読むのが非常に効率が悪いようです。リストの融合 (常に可能であるとは限らない) 以外に、GHC が のストレージに対して行う最適化はあり[Char]ますか? また、同様の原則を他のリストに適用しますか?

4

3 に答える 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 に答える