5 unstable releases

0.10.0 Jul 6, 2020
0.9.0 Dec 27, 2019
0.8.2 Nov 20, 2019
0.8.1 Aug 17, 2019
0.8.0 Jun 23, 2019

#289 in #incremental

Download history 25/week @ 2024-07-20 67/week @ 2024-07-27 26/week @ 2024-08-03 35/week @ 2024-08-10 17/week @ 2024-08-17 29/week @ 2024-08-24 38/week @ 2024-08-31 20/week @ 2024-09-07 23/week @ 2024-09-14 63/week @ 2024-09-21 55/week @ 2024-09-28 9/week @ 2024-10-05 11/week @ 2024-10-12 21/week @ 2024-10-19 22/week @ 2024-10-26 18/week @ 2024-11-02

72 downloads per month
Used in 11 crates (via topo)

MIT/Apache

3KB

topo

The topo crate provides incremental caching and identifiers for repeated function invocations. Together with a change notification mechanism it can be used to implement a form of incremental computing.

[0.10.0] - 2020-07-05

Fixed

  • Id generation is no longer vulnerable to hashing collisions.

Added

  • #[nested] allows specifying a slot.
  • cache::{Cache, GlobalCache} types for storing interned and memoized values.
  • cache::{SharedCache, SharedGlobalCache} types for safe multiple-owner access to caches, implementing cache_with with careful locking to allow nested calls in the future.
  • root free function for allowing one to re-root a call topology (i.e. if running inside of a broader one).

Removed

  • Callsite and Point are no longer pub.
  • #![feature(track_caller)] is no longer needed, although until 1.46 hits beta/stable an MSRV of nightly-2020-07-02 applies.

Changed

  • call_in_slot accepts borrowed slots.
  • Id renamed to CallId.
  • illicit dependency updated to 1.0.
  • impl Trait has been removed from public APIs where it may cause accidental Send/!Send contracts.

[0.9.4] - 2019-12-26

Changed

  • Updated illicit dependency to 0.9.0.

[0.9.3] - 2019-12-25

Changed

  • #[track_caller] is used to generate Ids, replacing macros. Requires nightly for now.
  • Use DefaultHasher instead of FnvHasher.

Added

  • call, call_in_slot functions.

Removed

  • call! and unstable_make_topo_macro! macros.

[0.9.2] - 2019-11-23

Changed

  • Using fnv crate for hashing Ids.

[0.9.1] - 2019-11-21

Removed

  • #![warn(intra_doc_resolution_failure)] was causing docs.rs issues due to root_html_url.

[0.9.0] - 2019-11-19

Added

  • #![forbid(unsafe_code)]
  • call! accepts a "slot" other than the number of times a callsite has been seen. The callsite count is still the default.
  • Invoking call! when no Point has already been entered will now create a new root and enter it before executing the block.

Changed

  • Rename #[bound] to #[nested].
  • Rename current_callsite_count to Callsite::current_count.

Removed

  • env!, Env, #[from_env] moved to illicit crate.
  • root! removed in favor of creating a new root whenever call! is invoked outside of a Point.

[0.8.2] - 2019-08-20

Fixed

  • root! no longer hides the outer environment from the called block.

[0.8.1] - 2019-08-17

Changed

  • Id's Debug impl uses hex.

Fixed

  • Incorrect line endings.

[0.8.0] - 2019-06-23

Added

  • #[topo::bound] attaches a function to the topology.
  • root! and call! macros attach arbitrary blocks to a new or the current topology respectively, entering new Points for each call, each of which has a (mostly) unique Id.
  • env! macro allows declaring type-indexed implicit variables, produces Env instances.

[0.1.0] - 2019-05-26

Published to reserve name on crates.io.

Dependencies

~1.5MB
~37K SLoC