誰もがData.Text
とData.ByteString.Char8
のデータ型を使用して長所と短所を説明できますか? ASCIIのみのテキストで作業すると、これらの長所と短所が変わるのですか?彼らの怠惰な変種も話を変えますか?Data.TextとData.ByteString.Char8
答えて
Data.ByteString.Char8
は、ByteString
の値を8ビットASCII文字のシーケンスとして扱い、Data.Text
は、Unicode全体をサポートする独立型です。
ByteString
およびText
は厳密な塊のリストに基づく遅延型の厳密で非ボックス化された配列である限り、基本的に同じです。主な違いは、ByteString
がオクテット(つまりWord8
秒)を格納し、Text
がChar
を格納し、UTF-16でエンコードされていることです。
ASCIIのみのテキストを使用している場合は、Data.ByteString.Char8
を使用すると、おそらくText
より速くなり、メモリを少なくします。しかし、であるかどうかは、実際にはであるかどうかを確認する必要があります。基本的には、例99%で、Text
上Data.ByteString.Char8
を使用すると、スピードハックです - オクテットは文字はなく、任意のHaskellerは正しいタイプを使用して、生の、ベアメタルスピードよりも優先されなければならないことに同意することができます。あなたがプログラムをプロファイリングしてボトルネックになっているのであれば、通常はそれを考慮する必要があります。 Text
は最適化されており、ほとんどの場合、その差はごくわずかです。
もちろん、Data.ByteString.Char8
が保証されている速度に関係しない状況があります。基本的にテキストではなく行に分かれたデータを含むファイルを考えてみましょう。 lines
を使用して完全に合理的です。さらに、バイナリ形式のコンテキストで整数をASCII 10進数でエンコードすることも考えられます。その場合にはを使用すると理にかなっています。
だから、基本的には:
Data.ByteString.Char8
:パフォーマンスが重要であり、いくつかのASCII成分を有する「ほとんどバイナリ」のデータを処理するために、純粋なASCIIの状況では。Data.Text
:テキスト(を含む) ASCII以外のものが少し使用される可能性がある状況。
- 1. Haskell:Regular Expressions and Data.Text
- 2. Text.Printf with Data.Text?
- 3. Latin1でエンコードされたData.ByteStringとData.Textの間の変換
- 4. 2つのData.Textをmappendなしで結合する標準的な方法
- 5. Data.TextのShow typeclassに相当するものはありますか?
- 6. Angular2を使用した安全なナビゲーションオペレータの使用。 htmlでインデックス配列をチェックするオプションはありますか?例:* ngIf = "data && data.text [0]"
- 7. HaskellでRegexp()SQLite関数を挿入する(Database.SQLite3、 "direct-sqlite")
- 8. $ _php [ 'credsを'] NG2
- 9. HaskellでtoLowerを正しく使うにはどうすればいいですか?
- 10. サービスワーカーのJSONの解析が定義されていない
- 11. angular 2/4 handle res.download
- 12. Swift - C APIブリッジ - nullポインタを処理する方法
- 13. tweetでのつぶやきをユーザーIDでのみ
- 14. マップテキストテキストオブジェクトの作成方法は?
- 15. のjQuery "()
- 16. テンプレートは、エラーを解析する:それは「TD」の既知の特性ではないので「アイテム-値」にバインドできません
- 17. snapframeworkを使用して、haskellの異なる 'string'タイプ間の変換を回避する方法はありますか?
- 18. チャットは無制限の段落を生成します
- 19. JavaScript each()が動作しません
- 20. Data.ByteStringを使用して7GBのファイルを解析するには?
- 21. DeriveGenericをパラメータ化された型に使用する
- 22. Haskell Scottyでどのように各ルートを手に入れる?
- 23. HaskellのUtf8とオーバーロードされた文字列
- 24. プログラムでUITextFieldにデータを追加する
- 25. Haskellの文字列を文字列に変換する
- 26. mongodbにhtmlタグ付きのデータを挿入してブラウザ上でレンダリングしたい[ejs]
- 27. jQueryの -
- 28. Swaggerで生成されたAPIを構築するときに 'Date'タイプが見つかりません
- 29. 保留中のajaxリクエストをキャンセルする方法typeahead.js
- 30. 種類 '*'と 'Nat'が一致しません
私のプログラムは非常に特定のコンピュータ生成のCファイルを処理するので、ASCIIのみのテキストがあることを保証できます。私はどちらの場合でも両方を試してみます。 –
私はおそらく 'Data.ByteString.Char8'のために行くでしょう、あなたは本質的には*テキストに似ているバイナリフォーマットを扱うことになるでしょう。 (また、ファイルを解析するために[attoparsec](http://hackage.haskell.org/package/attoparsec)をチェックすることをお勧めします)。 – ehird
テキストは、UTF-16とByteStringをオクテットとしてエンコードします。これは一般的にメモリ使用量に影響しますか?私のアプリケーションはコードリライタであり、それはそのままで、Stringを使ってトレースできる膨大な量のメモリを使います。私はすでに弦を演奏しているので、どんな改善も歓迎されるだろう。これが私がデータ型を変更したい理由です。 –