#string #stack #inline #sso #inlinable

flexible-string

A stack heap flexible string designed to improve performance

1 unstable release

0.1.0 Jan 19, 2022

#2553 in Data structures

Download history 306/week @ 2024-11-15 98/week @ 2024-11-22 113/week @ 2024-11-29 61/week @ 2024-12-06 65/week @ 2024-12-13 76/week @ 2024-12-20 20/week @ 2024-12-27 39/week @ 2025-01-03 105/week @ 2025-01-10 56/week @ 2025-01-17 15/week @ 2025-01-24 151/week @ 2025-01-31 163/week @ 2025-02-07 106/week @ 2025-02-14 80/week @ 2025-02-21 56/week @ 2025-02-28

426 downloads per month
Used in spdlog-rs

MIT/Apache

50KB
610 lines

flexible-string

A stack heap flexible string designed to improve performance.

FlexibleString was first implemented in spdlog-rs crate, which improved performance for spdlog-rs by about double (see benchmarks of spdlog-rs). Now it is extracted to a separate crate for use by other crates.

For more details, please read the crate documentation.

Examples

You can use FlexibleString almost as well as standard String.

use flexible_string::FlexibleString;

let mut string = FlexibleString::<250>::from("hello");
string.push(',');
string.push_str("world");
assert_eq!(string, "hello,world");

Benchmarks

Run cargo +nightly bench in the root directory of this repository for benchmarking.

The following results are generated with Windows 10 64 bit and Intel i9-10900KF CPU @ 3.70GHz.

  • FlexibleString

    test bench_clone    ... bench:           7 ns/iter (+/- 0)
    test bench_from_str ... bench:           6 ns/iter (+/- 0)
    test bench_push     ... bench:           0 ns/iter (+/- 0)
    test bench_push_str ... bench:           0 ns/iter (+/- 0)
    
  • std::string::String

    test bench_clone    ... bench:          46 ns/iter (+/- 0)
    test bench_from_str ... bench:          40 ns/iter (+/- 0)
    test bench_push     ... bench:          41 ns/iter (+/- 0)
    test bench_push_str ... bench:          39 ns/iter (+/- 0)
    

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.

No runtime deps