adapton 0.3.7

programming abstractions for general-purpose incremental computations
Documentation
*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<Box<Fn (_) -> _>>` instead of `Rc<Fn (_) -> _>`?  
Why?  
- Done:
  - [trait-objects-with-associated-types]http://users.rust-lang.org/t/trait-objects-with-associated-types/746/16?u=matthewhammer