6 releases
Uses old Rust 2015
0.3.0 | May 28, 2017 |
---|---|
0.2.1 | May 27, 2017 |
0.1.2 | May 26, 2017 |
#960 in Concurrency
30KB
636 lines
N.B. this crate requires nightly, as it makes use of FnBox
and untagged unions.
thunk
: Generic lazy evaluation for Rust
The thunk
crate provides primitives for lazy evaluation in Rust.
At present, it provides five thunk types and three traits which abstract lazily
evaluated types, LazyRef
, LazyMut
, and Lazy
. The thunk types are as follows:
Thunk
: non-Send
, non-Sync
thunks.RcThunk
: a reference-counted, cloneable thunk. AnRcThunk<T>
is essentially anRc<Thunk<T>>
; however, it implementsLazy
.AtomicThunk
:Send + Sync
thunks which use atomic data internally. This is slower thanThunk
, butAtomicThunk
is thread-safe.ArcThunk
: theArc
equivalent toRcThunk
. Essentially anArc<AtomicThunk<T>>
.Strict
:Send + Sync
, paradoxically strict thunks.Strict
doesn't actually defer anything, and is provided to make it simpler to write code which is generic over strictness.
The provided traits - LazyRef
, LazyMut
, and Lazy
- abstract immutable
references to lazy values, mutable references to lazy values, and owned lazy
values, respectively. For example, Thunk
implements LazyRef
and LazyMut
and
Lazy
; however, RcThunk
only implements LazyRef
. All traits take a lifetime
parameter; this is a bandaid to cover Rust's current lack of associated lifetimes.
This parameter bounds the lifetime of the closure object representing a deferred
computation.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.
Dependencies
~11KB