Crates.io | humpty_dumpty |
lib.rs | humpty_dumpty |
version | 0.0.1 |
source | src |
created_at | 2015-05-10 11:20:07.05484 |
updated_at | 2015-12-11 23:53:29.779383 |
description | A plugin to prevent certain types from being dropped, thus making them linear |
homepage | |
repository | https://github.com/Manishearth/humpty_dumpty |
max_upload_size | |
id | 2072 |
size | 29,977 |
The goal of this library is to be able to define types that cannot be implicitly dropped except in controlled situations.
A sketch of the design can be found here. The design does not handle branches, though it can be extended to do so. It's also a bit different from what I finally implemented
The idea is, that for a type that is marked #[drop_protection]
, only functions annotated with #[allowed_on_protected]
can use these,
and each local must be dropped with a function marked #[allowed_drop]
before its scope finishes.
Current status: Is able to track such types and report on their usage. Maintains a list of what has been dropped properly to detect implicit drops.
Some missing (but planned) functionality:
Cannot yet handle conditional drops, i.e. those in branches.
Cannot yet handle any bindings other than a let binding
Allowed functions cannot yet take &/&mut inputs
Cannot yet mark method calls as allowed
To test, run cargo run --example test
, or even better rustc examples/test.rs -L target
(after building). The latter is better
because it will rebuild every time, and we're only interested in build output.