Daysこの広告は、90日以上更新していないブログに表示しています。)はじめに今回のネタはcore.rrb-vectorです。core.rrb-vectorは2013年1月にContribライブラリに入った比較的新しいライブラリです。core.rrb-vectorが提供するのは,新しいベクタの実装です。Balanced)木に基づいています。VectorsRRB木の特徴は,現在のClojureコアのベクタの実装である32分木のO(log(N))でのインデクシングや更新に加え,O(log(N))の連結操作とスライシングを備えていることです。O(log(N))core.rrb-vectorが提供する連結およびスライシングのための関数は,Clojureコアのベクタを混在させて使用できるため,コアのベクタからrrb-vectorへシームレスに移行することができます。このようなClojureコアとの互換性の高さや,Reducers方面への応用に対する期待から,将来コア側へ取り込まれることも視野に入れながらcore.rrb-vectorの開発は進められています。"0.0.9"]を追加すればOKです。弱冠バージョン0.0.9ということで,位置づけとしてはまだアルファ版です。使い方では,core.rrb-vectorを使ってみましょう。ベクタを生成するには,clojure.core.rrb-vector/vectorを使います。生成したベクタはClojureコアのベクタと同じように使うことができます。4]user=>ベクタの連結とスライシングにはそれぞれclojure.core.rrb-vector/catvecおよびclojure.core.rrb-vector/subvecを使用します。5]user=>先述したように,catvecとsubvecはClojureコアのベクタを混ぜても使うことができます。*1)clojure.core.rrb_vector.rrbt.Vectoruser=>ベンチマークせっかくなので,ベンチマークもとってみましょう。以下のようなプログラムで,ベクタの連結にかかる時間を計測します。(newline)))以下,ベンチマークの実行結果です。msecs"niluser=>Clojureコアのベクタの方は綺麗に線形に時間が増加しているのが分かります。RRBベクタの方はほとんど連結にかかる時間が変わっていません。これだけ速いとちょっとどこか計測の仕方が間違ってるのかと心配になりますが,大丈夫でしょうか...?(^^;おわりに今回はcore.rrb-vectorについてでした。core.rrb-vectorはまだまだ開発途上といった感じですが,将来Clojureのベクタがさらに便利になるかもしれないと思うと期待が高まりますね。次回は,もう1つのパーシステントなコレクションの実装であるdata.finger-treeを見てみます。4はてなブログをはじめよう!athosさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。