#string-interning #interning #string #symbol #str

已删除 ry-interner

易于使用的字符串互斥锁,快速访问底层字符串,内存占用最小

2 个版本

0.1.1 2023年4月3日
0.1.0 2023年4月2日

#interner 中排名第 10

MIT 许可证

12KB
219 行代码,不包括注释

ry_interner 包。

从 Ry 编程语言编译器实现了字符串互斥锁的 Rust 代码中提取了 327 行代码。

示例

fn main() {
    let interner = Interner::default();
    let s1 = interner.get_or_intern("test");
    let s2 = interner.get_or_intern("test");
    assert_eq!(s1, s2);

    assert_eq!(interner.resolve(0).unwrap(), "test");
}

lib.rs:

327 行 Rust 代码,实现了 Ry 编程语言编译器的字符串互斥锁。

该包缓存字符串并与之关联唯一符号。这允许对底层互斥字符串进行常数时间的比较和查找。

示例

互斥

use ry_interner::Interner;

let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");
let symbol2 = interner.get_or_intern("C");
let symbol3 = interner.get_or_intern("A");

assert_ne!(symbol0, symbol1);
assert_ne!(symbol0, symbol2);
assert_ne!(symbol1, symbol2);
assert_eq!(symbol0, symbol3);

解析符号

use ry_interner::Interner;

let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");

assert_eq!(interner.resolve(0), Some("A"));
assert_eq!(interner.resolve(1), Some("B"));
assert_eq!(interner.resolve(2), None);

依赖

~1.5MB
~24K SLoC