salsa/README.md

53 lines
2.3 KiB
Markdown
Raw Normal View History

2018-09-28 15:01:27 +00:00
# salsa
2020-06-24 18:22:51 +00:00
[![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)
2018-11-01 09:04:55 +00:00
[![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)
2018-09-28 15:01:27 +00:00
*A generic framework for on-demand, incrementalized computation.*
2022-04-15 14:14:50 +00:00
<img alt="Salsa Logo" src="https://raw.githubusercontent.com/salsa-rs/logo/main/FerrisSalsa4-01.svg" width="200" />
2018-09-28 15:01:27 +00:00
## Obligatory warning
2018-10-01 13:09:02 +00:00
Very much a WORK IN PROGRESS at this point. Ready for experimental use
but expect frequent breaking changes.
2018-09-28 15:01:27 +00:00
## Credits
2018-12-16 03:29:31 +00:00
This system is heavily inspired by [adapton](http://adapton.org/), [glimmer](https://github.com/glimmerjs/glimmer-vm), and rustc's query
2018-09-28 15:01:27 +00:00
system. So credit goes to Eduard-Mihai Burtescu, Matthew Hammer,
Yehuda Katz, and Michael Woerister.
## Key idea
2018-10-05 15:03:51 +00:00
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.
2018-10-02 09:50:38 +00:00
- **Functions**: pure functions (no side effects) that transform your
2022-08-26 16:20:21 +00:00
inputs into other values. The results of queries are memoized to
2018-10-02 09:50:38 +00:00
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:
2020-01-16 16:28:10 +00:00
- read the [heavily commented `hello_world` example](https://github.com/salsa-rs/salsa/blob/master/examples/hello_world/main.rs);
- check out the [Salsa book](https://salsa-rs.github.io/salsa);
2022-09-23 16:00:36 +00:00
- [中文版](https://rust-chinese-translation.github.io/salsa-book)
- watch one of our [videos](https://salsa-rs.github.io/salsa/videos.html).
2018-10-09 19:42:07 +00:00
2018-10-11 13:18:58 +00:00
## 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.