14 releases

0.1.16 Dec 3, 2022
0.1.15 Dec 3, 2022
0.1.14 Nov 26, 2022
0.1.12 Oct 16, 2022
0.1.0 Mar 8, 2022

#366 in Programming languages

40 downloads per month

Apache-2.0 OR MIT

105KB
2.5K SLoC

Rust 1.5K SLoC // 0.0% comments LALRPOP 847 SLoC // 0.0% comments

Marigold

crates.io docs.rs website lines of code contributors bench tests style wasm last commit

Marigold is an imperative, domain-specific language for data pipelining and analysis using async streams. It can be used as a standalone language or within Rust programs.

use marigold::m;

let odd_digits = m!(
  fn is_odd(i: &i32) -> bool {
    i.wrapping_rem(2) == 1
  }

  range(0, 10)
    .filter(is_odd)
    .return
).await.collect::<Vec<_>>();

println!("{:?}", odd_digits); // [1, 3, 5, 7, 9]

Runtimes

By default, Marigold works in a single future and can work with any runtime.

The tokio and async-std features allow Marigold to spawn additional tasks, enabling parallelism for multithreaded runtimes.

Marigold supports async tracing, e.g. with tokio-console.

Platforms

Marigold's CI builds against aarch64, arm, WASM, and x86 targets, and builds the x86 target in mac and windows environments.

Dependencies

~5–16MB
~205K SLoC