Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/salsa-rs/salsa
A generic framework for on-demand, incrementalized computation. Inspired by adapton, glimmer, and rustc's query system.
https://github.com/salsa-rs/salsa
Last synced: 3 days ago
JSON representation
A generic framework for on-demand, incrementalized computation. Inspired by adapton, glimmer, and rustc's query system.
- Host: GitHub
- URL: https://github.com/salsa-rs/salsa
- Owner: salsa-rs
- License: apache-2.0
- Created: 2018-09-28T14:56:12.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-11-25T17:52:46.000Z (17 days ago)
- Last Synced: 2024-11-30T13:47:37.065Z (12 days ago)
- Language: Rust
- Homepage: https://salsa-rs.netlify.app/
- Size: 8.29 MB
- Stars: 2,143
- Watchers: 33
- Forks: 152
- Open Issues: 100
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-rust - salsa-rs/salsa - A generic framework for on-demand, incrementalized computation. (Libraries / Data processing)
README
# salsa
[![Test](https://github.com/salsa-rs/salsa/workflows/Test/badge.svg)](https://github.com/salsa-rs/salsa/actions?query=workflow%3ATest)
[![Book](https://github.com/salsa-rs/salsa/workflows/Book/badge.svg)](https://github.com/salsa-rs/salsa/actions?query=workflow%3ABook)
[![Released API docs](https://docs.rs/salsa/badge.svg)](https://docs.rs/salsa)
[![Crates.io](https://img.shields.io/crates/v/salsa.svg)](https://crates.io/crates/salsa)*A generic framework for on-demand, incrementalized computation.*
## Obligatory warning
Very much a WORK IN PROGRESS at this point. Ready for experimental use
but expect frequent breaking changes.## Credits
This system is heavily inspired by [adapton](http://adapton.org/), [glimmer](https://github.com/glimmerjs/glimmer-vm), and rustc's query
system. So credit goes to Eduard-Mihai Burtescu, Matthew Hammer,
Yehuda Katz, and Michael Woerister.## Key idea
The key idea of `salsa` is that you define your program as a set of
**queries**. Every query is used like function `K -> V` that maps from
some key of type `K` to a value of type `V`. Queries come in two basic
varieties:- **Inputs**: the base inputs to your system. You can change these
whenever you like.
- **Functions**: pure functions (no side effects) that transform your
inputs into other values. The results of queries are memoized to
avoid recomputing them a lot. When you make changes to the inputs,
we'll figure out (fairly intelligently) when we can re-use these
memoized values and when we have to recompute them.## Want to learn more?
To learn more about Salsa, try one of the following:
- read the [heavily commented examples](https://github.com/salsa-rs/salsa/tree/master/examples);
- check out the [Salsa book](https://salsa-rs.github.io/salsa);
- [中文版](https://rust-chinese-translation.github.io/salsa-book)
- watch one of our [videos](https://salsa-rs.github.io/salsa/videos.html).## Getting in touch
The bulk of the discussion happens in the [issues](https://github.com/salsa-rs/salsa/issues)
and [pull requests](https://github.com/salsa-rs/salsa/pulls),
but we have a [zulip chat](https://salsa.zulipchat.com/) as well.