19 releases (8 stable)
2.0.0 | Mar 29, 2022 |
---|---|
1.1.0 |
|
1.0.6 | Nov 5, 2021 |
1.0.4 | Jul 9, 2021 |
0.1.0 | Mar 20, 2020 |
#88 in Data structures
185,407 downloads per month
Used in 152 crates
(13 directly)
63KB
1.5K
SLoC
KString
Key String: Optimized for map keys.
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 thanString
to use less memory.
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 usingBox<str>
, useArc<str>
. Note: allocations are fast enough that this can actually slow things down for small enough strings.
Alternatives
smol_str
- Size of String
- Always uses
Arc
instead ofBox
- Always inlines 22 bytes
- Whitespace-only optimizations
smartstring
- Size of String
- Allows mutability at the cost of relying on implementation details of
String
- Always inlines 23 bytes
compact_str
- Size of String
- Always uses
Arc
instead ofBox
- Inlines 22-23 bytes, depending on implementation
License
Licensed under either of
- Apache License, Version 2.0, (http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (http://opensource.org/licenses/MIT)
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.
Dependencies
~130KB