RReverser/cow-utils-rs

Copy-on-write string utilities for Rust

Rust

165

17 commits

updated Apr 11, 2024

See the code

README

Copy-on-write string utils for Rust

Crate docs License

Some str methods perform destructive transformations and so they allocate, copy into and return a new String even when no modification is necessary.

This crate provides a helper trait CowUtils with drop-in variants of such methods, which behave in the same way, but avoid extra copies and allocations when no modification is necessary.

For now it's only implemented for &str and returns std::borrow::Cow<str>, but in the future might be extended to other types where even more efficient handling is possible (e.g. in-place modifications on mutable strings).

Performance

The primary motivation for this crate was ability to perform zero-alloc replacements when no match is found, so showing results only for .replace vs .cow_replace for now.

The actual results will vary depending on the inputs, but here is a taster based on "a".repeat(40) as an input and various modes (nothing matched, everything matched and replaced, everything matched from the start and deleted):

params.replace (ns).cow_replace (ns)difference (%)
("a", "")408.59290.27-29
("b", "c")98.7854.00-45
("a", "b")985.991,000.70+1

Usage

First, you need to import CowUtils into the scope:

use cow_utils::CowUtils;

Then you can start invoking following .cow_-prefixed methods on strings instead of the regular ones:

Check out the docs for detailed examples.

copy-on-write
rust
rust-lang
rustlang
strings
strings-manipulation

Contributors

RReverser

15 commits

CryZe

1 commits

thomcc

1 commits

RReverser/cow-utils-rs

Copy-on-write string utilities for Rust

Rust

165

17 commits

updated Apr 11, 2024

See the code

README

Copy-on-write string utils for Rust

Crate docs License

Some str methods perform destructive transformations and so they allocate, copy into and return a new String even when no modification is necessary.

This crate provides a helper trait CowUtils with drop-in variants of such methods, which behave in the same way, but avoid extra copies and allocations when no modification is necessary.

For now it's only implemented for &str and returns std::borrow::Cow<str>, but in the future might be extended to other types where even more efficient handling is possible (e.g. in-place modifications on mutable strings).

Performance

The primary motivation for this crate was ability to perform zero-alloc replacements when no match is found, so showing results only for .replace vs .cow_replace for now.

The actual results will vary depending on the inputs, but here is a taster based on "a".repeat(40) as an input and various modes (nothing matched, everything matched and replaced, everything matched from the start and deleted):

params.replace (ns).cow_replace (ns)difference (%)
("a", "")408.59290.27-29
("b", "c")98.7854.00-45
("a", "b")985.991,000.70+1

Usage

First, you need to import CowUtils into the scope:

use cow_utils::CowUtils;

Then you can start invoking following .cow_-prefixed methods on strings instead of the regular ones:

Check out the docs for detailed examples.

copy-on-write
rust
rust-lang
rustlang
strings
strings-manipulation

Contributors

RReverser

15 commits

CryZe

1 commits

thomcc

1 commits

Languages

Rust

100.0%