mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2026-04-20 21:27:03 +00:00
Auto-loaded via the debugger_visualizer attribute. Tested on smolstr's unittest: $ RUSTFLAGS="-C debuginfo=2 -C opt-level=0" cargo test -p smol_str --no-run $ rust-gdb target/debug/deps/test-a806b111557a7133 (gdb) break test::conversions (gdb) run (gdb) next (gdb) print s (and other locations in that file, to test the three cases: Inline, Static and Heap)
smol_str
A SmolStr is a string type that has the following properties:
size_of::<SmolStr>() == 24(therefore== size_of::<String>()on 64 bit platforms)CloneisO(1)- Strings are stack-allocated if they are:
- Up to 23 bytes long
- Longer than 23 bytes, but substrings of
WS(seesrc/lib.rs). Such strings consist solely of consecutive newlines, followed by consecutive spaces
- If a string does not satisfy the aforementioned conditions, it is heap-allocated
- Additionally, a
SmolStrcan be explicitly created from a&'static strwithout allocation
Unlike String, however, SmolStr is immutable. The primary use case for
SmolStr is a good enough default storage for tokens of typical programming
languages. Strings consisting of a series of newlines, followed by a series of
whitespace are a typical pattern in computer programs because of indentation.
Note that a specialized interner might be a better solution for some use cases.
Benchmarks
Run criterion benches with
cargo bench --bench \* -- --quick
MSRV Policy
Minimal Supported Rust Version: latest stable.
Bumping MSRV is not considered a semver-breaking change.