4 stable releases

1.2.0 Mar 16, 2022
1.1.1 May 13, 2020
1.1.0 May 9, 2020
1.0.0 Jan 31, 2020

#653 in Rust patterns

Download history 2716/week @ 2023-12-17 2558/week @ 2023-12-24 2444/week @ 2023-12-31 3248/week @ 2024-01-07 2933/week @ 2024-01-14 3138/week @ 2024-01-21 2431/week @ 2024-01-28 2301/week @ 2024-02-04 2404/week @ 2024-02-11 2695/week @ 2024-02-18 2592/week @ 2024-02-25 2752/week @ 2024-03-03 2809/week @ 2024-03-10 2680/week @ 2024-03-17 2360/week @ 2024-03-24 2666/week @ 2024-03-31

10,871 downloads per month
Used in 48 crates (3 directly)

MIT/Apache

68KB
1K SLoC

Known unique versions of Rc and Arc. This allows them to be used for mutable ownership.

The main reason to use RcBox or ArcBox is for types that will be reference counted, but need some "fixing up" done after being allocated behind the reference counted pointer. With the standard library types, you would use get_mut and have to handle the impossible case where the value was shared. With the known unique versions, you have DerefMut, so it's as simple as mutating behind a Box.

  • erasable: Erase pointers of their concrete type.
  • ptr-union: Pointer unions the size of a pointer.
  • rc-borrow: Borrowed forms of Rc and Arc.
  • slice-dst: Support for custom slice-based DSTs.

Why not triomphe?

Triomphe is a great atomic reference counting library! The main difference between triomphe and these utilities is that triomphe implements a new Arc type that doesn't support weak references (and as such does not have to pay the cost of handling potential weak references), whereas these pointer utilities use the standard library's reference counting types. If you need to work with standard library Arc/Rc, triomphe won't work for you.

If you want a more battle-tested library by the servo developers, use triomphe. If you want small, self-contained extensions to the standard library types, use these pointer utilities.

Additionally, triomphe only supports atomic reference counting. We provide support for both Arc and Rc.

Minimum Supported Rust Version

We require a minimum Rust version of 1.41.0. This is for an adjustment of local trait impl checking.

Minimum version support is only guaranteed with minimal version resolution (-Z minimal-versions/--minimal-versions) due to how dependencies are handled. The minimum version of Rust will only be incremented with minor version bumps, not patch version bumps, and will be deliberate and clearly noted in change notes.

License

Licensed under either of

at your option.

If you are a highly paid worker at any company that prioritises profit over people, you can still use this crate. I simply wish you will unionise and push back against the obsession for growth, control, and power that is rampant in your workplace. Please take a stand against the horrible working conditions they inflict on your lesser paid colleagues, and more generally their disrespect for the very human rights they claim to fight for.

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

~25KB