36 lines
2.2 KiB
Markdown
36 lines
2.2 KiB
Markdown
# Flowmetal
|
|
|
|
> A shining mercurial metal, laden with sensors and almost infinitely reconfigurable.
|
|
> The stuff of which robots and servitors are made.
|
|
|
|
Flowmetal is a substrate for automation.
|
|
It provides a programming environment wherein programs are durable, evented and asynchronous by default.
|
|
It is aimed at scripting or coordination tasks, such as workflows and scheduled jobs.
|
|
|
|
Let's unpack these terms.
|
|
|
|
**Durable** - programs and their state are not dynamic and RAM located as with traditional models of processes.
|
|
Instead programs and their state are always persisted to storage.
|
|
This allows programs to sleep for a long time or even move seamlessly between machines.
|
|
|
|
**Evented** - durability is implemented in an event sourced style.
|
|
Each program retails - or at least has the opportunity to retain - both a log of any external events and of its own execution.
|
|
This allows for programs to easily rebuild their state, simplifies the durable programming model, and greatly simplifies debugging as intermediary states are retained and inspectable.
|
|
|
|
This also allows for external systems such as REST callback APIs, databases and such to easily integrate with Flowmetal programs as event sources.
|
|
It also allows bidirectional communication between Flowmetal programs and other more traditional programming environments.
|
|
Anything that can communicate with Flowmetal can provide function implementations, or call Flowmetal programs!
|
|
|
|
This centering of evented communication makes Flowmetal ideal for **coordination** tasks, from simple task sequencing to map/reduce and other parallelism patterns.
|
|
|
|
**Asynchronous** - thanks to Flowmetal's evented execution model, waiting for slow external events either synchronously or asynchronously is second nature!
|
|
|
|
**Scripting** - Durablity and distribution of execution come at coordination costs which make Flowmetal well suited for coordination tasks, but not for heavy processing.
|
|
|
|
- For a problem statement, see [Call/CC Airflow](docs/call_cc_airflow.md).
|
|
- For an architecture overview, see [Architecture](docs/architecture.md).
|
|
- For example doodles, see [examples](examples).
|
|
|
|
## License
|
|
|
|
Published under the MIT license. See [LICENSE.md](LICENSE.md)
|