*This file is stuff I removed from the readme, but have not (yet) decided to completely delete from the repo.* Library Components: ===================== - The library exposes a small **core interface**. For details, see the documentation of `engine` interface: ``` cargo doc open target/doc/adapton/engine/index.html ``` - The library uses rust macros to provide **syntactic sugar**. See [`macros.rs`](https://github.com/cuplv/adapton.rust/blob/master/src/macros.rs). - The library implements this interface with an **imperative data structure**, and **without garbage collection**. See [`engine.rs`](https://github.com/cuplv/adapton.rust/blob/master/src/engine.rs). - The library provides generic **incremental data structures and algorithms**. See also: [`collections.rs`](https://github.com/cuplv/adapton.rust/blob/master/src/collections.rs). **This collections module is a work in progress.** - **Next**: - sequences as random access zippers (See also: https://arxiv.org/abs/1608.06009) - tries that represent sets, maps (See also: https://arxiv.org/abs/1503.07792, Section 3.2), - generic fixed-point loop - graphs, graph exploration algorithms (e.g., search) Supported Incremental Computation Paradigms: ============================================== - **Pure Function Caching**: [*Incremental computation via function caching*](http://dl.acm.org/citation.cfm?id=75305) *Bill Pugh and Tim Teitelbaum.* **POPL 1989.** - hash-cons'd, purely-functional data structures - memoized function calls (to pure computations) - **Structural Adapton**: [Adapton: Composable, Demand-Driven Incremental Computation.](https://www.cs.umd.edu/~hammer/adapton/) *Matthew A. Hammer, Yit Phang Khoo, Michael Hicks and Jeffrey S. Foster.* **PLDI 2014.** - changeable input cells - bidirectional DCG structure - dirtying traversal; repair traversal. - **Nominal Adapton:** [Incremental Computation with Names](http://arxiv.org/abs/1503.07792) *Matthew A. Hammer, Joshua Dunfield, Kyle Headley, Nicholas Labich, Jeffrey S. Foster, Michael Hicks, David Van Horn.* **OOPSLA 2015.** - first-class names - nominal memoization Future work ============ - Benchmarking based on tests: - report time statistics - [report memory statistics](http://stackoverflow.com/questions/30869007/how-to-benchmark-memory-usage-of-a-function) Technicalities specific to Rust ============================================ Deconstruction of DCG as Rust traits and types ----------------------------------------------------------------- See draft on [play.Rust-lang.org](http://is.gd/4czIEG) This provides a 1000-foot view of how we are encoding the Demanded Computation Graph (DCG) into Rust's universe of legal type and trait definitions. Technical Debt ------------------ - In `engine.rs` I wrote `Producer::copy` and the `ShapeShifter` trait. Both avoid returning a `Self`. Is there a better way? See also: [0255-object-safety](https://github.com/rust-lang/rfcs/blob/master/text/0255-object-safety.md) - Do I need really need `Rc _>>` instead of `Rc _>`? Why? - Done: - [trait-objects-with-associated-types](http://users.rust-lang.org/t/trait-objects-with-associated-types/746/16?u=matthewhammer)