Expand description
String interning for O(1) equality comparison.
Symbols are lightweight integer handles that point to interned strings. By storing each unique string exactly once and comparing integer handles, we achieve O(1) equality checks regardless of string length.
§Example
use logicaffeine_base::{Interner, Symbol};
let mut interner = Interner::new();
let s1 = interner.intern("hello");
let s2 = interner.intern("hello"); // Same string
let s3 = interner.intern("world"); // Different string
// Same strings produce same symbols (O(1) comparison)
assert_eq!(s1, s2);
assert_ne!(s1, s3);
// Resolve back to strings when needed
assert_eq!(interner.resolve(s1), "hello");§Use Cases
- Variable names: Compared frequently during scope lookup
- Keywords: Compared during lexing and parsing
- Type names: Compared during type checking
Structs§
- Interner
- A string interner providing O(1) equality comparison via
Symbolhandles. - Symbol
- A lightweight handle to an interned string.