2012-01-04 16 views
2

私は、メモリブロックで動作する仮想マシンの作成に興味があります。私は、ブロック内のどこでも読み書きが効率的な純粋なデータ構造で、メモリブロック(1MBと言う)をモデル化したいと思います。可変構造にはあまり興味がありません。そのような構造は存在しますか?Haskell:メモリブロックを効率的にモデル化する純粋なデータ構造ですか?

+0

おそらく 'Int32'のインデックスから' Map'ですか?あなたはコンパクトさのために最初のゼロを残すことができます。 –

+0

何が問題なの? 'STUArray's?彼らは効率的で安全です(あなたがunsafelyでそれらを使用することを決めない限り)。 –

+1

@DanielFischerはおそらく、「可変構造にはあまり興味がありません」とは何か問題があります。 – luqui

答えて

8

vectorパッケージには、不変(および変更可能)のボックス化されていないベクトルとボックス化されていないベクトルが用意されています。変更可能なものはIOとSTの両方から使用でき、Storableの任意のインスタンスのボックス化されていない配列を持つことができます。標準的な配列モジュールよりもずっと良いです。

しかし、効率的で不変な更新について述べたので、私はマップのようなデータ構造を使用することをお勧めします。おそらくHashMapはunordered-containersです。木のオーバーヘッドを避けるために、葉に小さいボックス化されていないベクトルを持つマップを持つことは価値があるかもしれません。

ユースケースによっては、開始点と終了点にO(1)アクセス権があり、シーケンスの途中でかなり良いアクセス時間を持つ標準Data.Sequenceもあります。

0

Data.Array.STは十分ですか?

+1

彼は、不変のデータ構造に関心があると明示的に述べました。 –

+2

@Niklasユーザー名 'Ana'は彼女が彼女かもしれないことを示唆しています。 –

+0

@ダニエル:絶対に!私は本当に「彼または彼女」をより頻繁に使うように自分自身を調整すべきです。 –

関連する問題