4 releases

0.1.3 Jul 22, 2024
0.1.2 Jul 15, 2024
0.1.1 Jun 24, 2024
0.0.0 Dec 6, 2023

#2119 in Game dev

Download history 152/week @ 2024-06-26 222/week @ 2024-07-03 343/week @ 2024-07-10 303/week @ 2024-07-17 231/week @ 2024-07-24 166/week @ 2024-07-31 92/week @ 2024-08-07 108/week @ 2024-08-14 170/week @ 2024-08-21 152/week @ 2024-08-28 122/week @ 2024-09-04 168/week @ 2024-09-11 156/week @ 2024-09-18 232/week @ 2024-09-25 149/week @ 2024-10-02 118/week @ 2024-10-09

666 downloads per month
Used in 7 crates (via godot-core)

MPL-2.0 license

60KB
1K SLoC

Internal crate of godot-rust

Do not depend on this crate directly, instead use the godot crate. No SemVer or other guarantees are provided.

Contributor docs

A re-entrant cell implementation which allows for &mut references to be reborrowed even while &mut references still exist.

This is done by ensuring any existing &mut references cannot alias the new reference, and that the new reference is derived from the previous one.

This emulates rust's system for function calls. i.e my_func(&mut borrowed) creates a second &mut reference inside the function.

Instead of directly using the concept of aliasing pointers, we use the term accessible instead. A reference (or other pointer) to some value is considered accessible when it is possible to either read from or write to the value it points to without using unsafe. Importantly, if we know that a reference a is inaccessible, and then we create a new reference b derived from a to the same value, then we know for sure that b won't alias a. This is because aliasing in rust is based on accesses, and if we never access a then we cannot ever violate aliasing for a and b. And since b is derived from a (that is, b was created from a somehow such as by casting a to a raw pointer then to a reference b), then a won't get invalidated by accesses to b.

Dependencies

~0–630KB
~12K SLoC