問題タブ [bytestring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - ByteString のシーケンスの厳密な評価を強制する方法
次の Haskell 型定義があります。
StringSeqで厳密な評価を強制したい型の式がありdeepseqます。したがって、のインスタンスを定義する必要がありますNFData。私は次のことをしました:
そこで、シーケンス自体の評価を強制するために、シーケンスの長さを計算します。これは機能しているように見えますが、これは正しい実装ですか? より良いものはありますか?シーケンスの長さを計算するとオーバーヘッドが大きくなりすぎませんか?
haskell - 文字列の UTF-8 エンコーディングを ByteString に格納します
したがって、文字列の UTF-8 エンコーディングの個々のバイトにアクセスしたいと考えています。
を使用してみData.ByteString.Char8.packましたが、各文字の最後のバイトに切り捨てられているようです:
ファイルから文字列を読み取ることができれば、これは問題ではありません。
String -> ByteStringしかし、切り捨てなしで変換する純粋な方法が欲しいのですが、 hoogle はあまり役に立ちません。
performance - HaskellでのByteString比較よりもInt比較の方がどれくらい速いですか?
私はパターンマイニングアルゴリズムを実装しており、通常、入力データは次の形式のファイルです
通常itemxは ですString。ByteString効率的にするために、以前はデフォルトよりも高速なファイルを読み取っていましたString。パターン マイニング アルゴリズムの重要なタスクは、アイテム セット間の比較です。Intを比較するのではなく、 を比較するために入力ファイル形式を変更すると、プログラムの速度がどのくらい速くなったり遅くなったりするのでしょうかByteString。これが小説のフォーマットです:
ありがとう !
haskell - ByteString を Int に変換し、エンディアンを処理する方法は?
Haskell でバイナリ形式を読み取る必要があります。形式はかなり単純です。データの長さを示す 4 つのオクテットと、それに続くデータです。4 つのオクテットは、ネットワーク バイト順の整数を表します。
ByteString4バイトを整数に変換するにはどうすればよいですか? *(int*)&data辞書式変換ではなく、直接キャスト (C では ) が必要です。また、エンディアンについてはどうすればよいですか?シリアル化された整数はネットワークのバイト順ですが、マシンは別のバイト順を使用する場合があります。
私はグーグルを試しましたが、辞書式変換に関する結果はyoldだけです。
bytestring - ByteString IOがこれほど高速になる理由は何ですか?
Haskellのacm.timus.ruから問題1330を解決しようとしています。基本的に、これは次のように要約されます。1)stdinから長さN(N <10 ^ 4)の配列Aと整数のMペア(M <10 ^ 5)を読み取ります。2)各(from、to)ペアについて、サブ配列A[from..to]の合計をstdoutに出力します。
SOでは、この質問の一部として2つを超えるURLを投稿することはできないため、以下のGithubリポジトリ内のファイルを参照します。
私は、ほとんどのコードを共有する2つのソリューションを考え出しました。最初のもの(1330_slow.hs)はプレリュード関数(getLine / read / words)を使用しており、やや遅いです:
もう1つのソリューション(1330.hs)は、これらの関数を破棄し、同等のData.ByteString.Char8(B.getLine / B.readInt / B.words)に置き換えて、適切に実行します。
この問題の制限時間は500ミリ秒なので、270ミリ秒は十分に高速ですが(C ++やGoなどの他の言語の私のソリューションに匹敵します)、2180ミリ秒では問題は解決しません。では、なぜ私の最初の解決策はとてつもなく遅いのですか?Real World Haskellのプロファイリングのヒントに従ったとしても、これを理解することはできません(私が理解できたのは、時間の大部分がreadIntPair関数に費やされたということだけでしたが、あまり役に立ちませんでした)。
独自のテストを行いたい場合は、Python入力ジェネレーター(gen_test.py)と、Pythonがインストールされていない場合に備えて事前に生成された入力ファイル(input.txt)があります。そして、2つのソリューション間の差分(slow_fast_diff.txt)。
haskell - バイト文字列から任意のビット スライスを取得する
Bytestringレイジーを使用してビット ストリームを表現したいと考えています。このストリームからビットの任意のスライスを効率的に取得できる必要があります。たとえば、長さが10 の があり、元の からビット 24 ~ 36 で構成されるByteString新しい をスライスしたいとします。ByteStringByteString
問題は、ByteStringsが の配列であるWord8ため、8 の倍数ではない範囲を取得するのが難しいことです。私が思いついた最高のものは、 and を使用Data.BinaryしたこれData.Binary.Bitsです。get32BitRange特に範囲<= 32用であることに注意してください。
アルゴリズムは次のとおりです。
Word8必要なビットを含む最初のインデックスを見つけるByteStringからそのインデックスまでドロップ- ビット範囲の下限が 8 の倍数でない場合、先頭に余分なビットがある
Word8ため、それらをスキップします。 - (hi - lo) ビットを取得し、a に格納します。
Word32 - それをに入れ
Word32ますByteString
からビットの任意のスライスを取得するより効率的な方法はありByteStringますか?
編集:これはより効率的なバージョンです
parsec - パーセクの一致するバイト文字列
私は現在、RealWorldHaskellで提示されているフルCSVパーサーを使用しようとしています。ByteStringの代わりに使用するようにコードを変更しようとしましStringたが、でstring動作するコンビネータがありStringます。
前後に変換を行うことなく、stringで動作するのと同様のParsecコンビネータはありますか?ByteString
を処理する代替パーサーがあることを確認しましたがByteString、attoparsec使用方法を学習しているだけなので、Parsecを使い続けたいと思います。
haskell - lazy `ByteString` のパラメトリック バージョンはありますか?
私の理解では、ByteStrings は s のベクトルの単なるリストですWord8。このパッケージ化により、バイナリ ストリームのメモリと速度のパフォーマンスが向上します。同様に、このタイプはストリームでのTextパフォーマンスを向上させます。Char
しかし、Intストリームがある場合はどうDoubleなりますか? ByteStringさまざまなデータ型で使いやすいパラメトリック バージョンはありますか? ボックス化できないタイプでのみ使用するのが理にかなっていると思います。
haskell - ByteString の部分文字列を取得する慣用的な方法
私は以下を広範囲に利用する必要があります:
2 つの部分からなる質問:
- これってもう名前あるの?Hoogle でそのタイプを検索しても何も見つかりませんが、非常に一般的なニーズのようです。
(Int, Int) -> ByteString -> ByteStringまた、同じもののいくつかflipのバージョンを検索してみました。[a]また、一般的に使用されている名前があるかどうかを確認するために、バージョンを探してみました。 - もっと良い書き方はないでしょうか?
多くの人が同じ道をたどっていることを強く期待していたので、何か間違ったことをしているのではないかと疑っていますが、私のgoogle-fuは何も見つけていません。