Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

rust の Hash,Hasher トレイト

swift には多数のprotocolが定義されており、これを理解し有効に活用することで、読みやすいコードを書くことができる。
rustにも同じように多数のtraitが定義されている。swiftに比べて、かなり多くのtraitが定義されているが、
マイナー言語ゆえに、日本語の解説書もなかなか出なさそうなので、ちまちまとメモしていく。

Hash

pub trait Hash {
    fn hash<H>(&self, state: &mut H)
    where
        H: Hasher;
}

pub trait Hasher {
    fn finish(&self) -> u64;
    fn write(&mut self, bytes: &[u8]);
}

Hasher トレイトはハッシュ関数の実装を要求していることが分かる。
hashトレイトの一つ目の関数hash()は、呼び出すことによって、自身のデータでhasher関数Hのwrite()を呼び出させる。
ハッシュ関数の実装と、データ型をうまく分離したトレイトのようだ。
例えば、Sha256はHasherトレイトを使い、ハッシュ化する元の型(例えばトランザクションデータなど)はHashトレイトを実装すればいいようだ。