lstring

Crates.iolstring
lib.rslstring
version2.0.2
created_at2025-05-21 15:03:50.369326+00
updated_at2025-05-21 15:03:50.369326+00
descriptionKey String: optimized for map keys
homepage
repositoryhttps://github.com/katyo/kstring
max_upload_size
id1683488
size149,060
Kayo Phoenix (katyo)

documentation

README

LString

Key String: Optimized for map keys.

github crate docs MIT Apache 2.0 CI

This crate is extended and more feature rich version of kstring with some significant changes. Internal representation of string types still is same so you can convert corresponding types between both crates (see kstring feature).

Background

Considerations:

  • Large maps
  • Most keys live and drop without being used in any other way
  • Most keys are relatively small (single to double digit bytes)
  • Keys are immutable
  • Allow zero-cost abstractions between structs and maps (e.g. no allocating when dealing with struct field names)

Ramifications:

  • Inline small strings rather than going to the heap.
  • Preserve &'static str across strings (KString), references (KStringRef), and lifetime abstractions (KStringCow) to avoid allocating for struct field names.
  • Use Box<str> rather than String to use less memory.

Significant changes:

  • Because From<&'static str> is unsound it changed to From<&str>. To instantiate from static str use KString::from_static instead of From::from (or [kstring] macro).
  • Added default generic to types KStringBase and KStringCowBase which renamed to KString and KStringCow. Corresponding type aliases is removed. To instantiate types with default backend wrap it with angle brackets (KString::from_ref("abc") => <KString>::from_ref("abc")).
  • Added KStringWriter and kformat macros. Also added FromIterator trait impls
  • Added from_utf8 and from_utf16 functions.

Features:

  • max_inline: Instead of aligning the inline-string for performance (15 bytes + length on 64-bit), use the full width (22 bytes on 64-bit)

  • arc: Instead of using Box<str>, use Arc<str>. Note: allocations are fast enough that this can actually slow things down for small enough strings.

  • serde: Enables serde support (Adds Serialize/Deserialize traits impls).

  • quote: Enables quote support (Adds ToTokens trait impls).

  • diesel: Enables diesel support (Adds ToSql/FromSql traits impls).

  • kstring: Enables conversion from/into corresponding kstring types.

Alternatives, see rust-string-comparison and string-benchmarks-rs.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 1386

cargo fmt