phf 0.10.1

Runtime support for perfect hash function data structures

Rust-PHF is a library to generate efficient lookup tables at compile time using perfect hash functions.

It currently uses the CHD algorithm and can generate a 100,000 entry map in roughly .4 seconds. By default statistics are not produced, but if you set the environment variable PHF_STATS it will issue a compiler note about how long it took.

MSRV (minimum supported rust version) is Rust 1.46.


PHF data structures can be constructed via either the procedural macros in the phf_macros crate or code generation supported by the phf_codegen crate. If you prefer macros, you can easily use them by enabling the macros feature of the phf crate, like:

phf = { version = "0.10", features = ["macros"] }

To compile the phf crate with a dependency on libcore instead of libstd, enabling use in environments where libstd will not work, set default-features = false for the dependency:

# to use `phf` in `no_std` environments
phf = { version = "0.10", default-features = false }

Example (with the macros feature enabled)

use phf::phf_map;

pub enum Keyword {

static KEYWORDS: phf::Map<&'static str, Keyword> = phf_map! {
"loop" => Keyword::Loop,
"continue" => Keyword::Continue,
"break" => Keyword::Break,
"fn" => Keyword::Fn,
"extern" => Keyword::Extern,

pub fn parse_keyword(keyword: &str) -> Option<Keyword> {

Alternatively, you can use the phf_codegen crate to generate PHF datatypes in a build script.


Currently, the macro syntax has some limitations and may not work as you want. See #183 or #196 for example.