GithubHelp home page GithubHelp logo

bitset's People

Contributors

kawasin73 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bitset's Issues

バイト列の自動拡張

参考実装となる https://github.com/willf/bitset では、ビットベクトル作成時に全体のサイズを指定するものの、サイズを超過する値が設定されたときにスライス([]uint64)を自動拡張する。

bitset での自動拡張を行うかどうかを検討する

v0.2.0

v0.2.0 を実装する

v0.1.0 #1 で実装したメソッドを最適化する

最適化

  • Set の最適化
  • Unset の最適化
  • Get の最適化
  • FindFirstZero の検索範囲上限の設定
  • バイト列の自動拡張 #6

インターフェイス

  • HostEndian()

その他

  • Little Endian と Big Endian のエミュレート #5

gometalinter:unsafe を使うと警告がでる

gometalintergosec で下記の警告が発生する

bitvec.go:50::warning: Use of unsafe calls should be audited,LOW,HIGH (gosec)
bitvec.go:55::warning: Use of unsafe calls should be audited,LOW,HIGH (gosec)

[]byte から []uint64 へのキャストのために unsafe パッケージを使用している。
この警告をどのように無視するかを調査する

インターフェイスと関数ポインター

このパッケージでは、設定された状態(マシンのバイトオーダーと操作時に設定されているバイトオーダーが同じか異なるか)によってビットベクトルの操作を2種類から選択して切り替える。

この2種類の操作の抽象化をインターフェイスを用いて行うか、struct のフィールドの関数ポインターを差し替えることによって行うかを以下の観点から調査する。

  • 速度パフォーマンス
  • メモリ効率
  • 利用しやすさ

Little Endian と Big Endian のエミュレート

zcbit はバイトオーダーの異なるマシン間で作成されたビットベクトルのファイルを利用可能にするために作成されている。

PC で広く利用されている Intel CPU は主に Little Endian であるが、Big Endian のマシンでも正常に動作することをテストする必要がある。

Little Endian と Big Endian のどちらでもテストを実行する手法を調査する。

  • バイトオーダーをエミュレートする
  • CI などで異なるアーキテクチャを選択する

バイトスライスの GC 抑制

[]byte から []uint64unsafe パッケージを使って変換している。 #7
その後、[]byte の参照を消すと、[]uint64 の参照が残っているにも関わらず []byte が参照している先のメモリ列 GC されてしまい、別の処理によって値が上書きされてしまうバグがあった。

現在は、BitSetorig []byte というフィールドを持たせ、 []byte の参照を残すことで GC を抑制している。

バイト列の拡張 #6 に対応するにあたり、orig を残すと古いメモリ列が GC されなくなる課題がある。
orig を更新することで解決可能)

[]uint64 のスライスがうまく GC の考慮に含まれるようにするためにはどうすればいいかを調査する。

v0.3.0

v0.3.0 を実装する

v0.3.0 では一般的なビットベクトルの処理を追加する

インターフェイス

  • Count

その他

  • gometalinter:unsafe を使うと警告がでる #11

v0.1.0

version 0.1.0 を実装する
最低限必要なインターフェイスを備えたものを作る

  • README
  • 自動テスト CI の構築 #12

実装

  • []byte から []uint64 への変換
  • バイトオーダーの検出
  • バイトオーダーのスワップ #4

インターフェイス

  • Set
  • Clear
  • Test
  • Find Last One
  • Find First Zero
  • Find First One

仕様

  • バイト列の自動拡張 #6
  • バイト列の変換とあまりの部分の処理 #9

調査

  • インターフェイスと関数ポインター #2
  • バイトオーダーの検出 #3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.