An open API service indexing awesome lists of open source software.

https://github.com/Adapton/adapton.rust

General-purpose abstractions for incremental computing, in Rust
https://github.com/Adapton/adapton.rust

adapton rust

Last synced: about 1 year ago
JSON representation

General-purpose abstractions for incremental computing, in Rust

Awesome Lists containing this project

README

          

*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)