#future #async #no-std #green-thread

nightly no-std greenthread-future

Convert closures to futures based on greenthread on bare-metal (no_std + no_alloc)

1 unstable release

0.1.0 Feb 2, 2020

#1809 in Asynchronous

MIT license

10KB
175 lines

greenthread-future-rs

Actions Status Coverage Status

Convert closures into futures based on greenthread on bare-metal (no_std + no_alloc).

In a word, this is a #![no_std] version of Futurify.

I'm exploring to use it to implement bare-metal threading.

Example

TODO.

Now just take a unit test as an example:

#[tokio::test]
async fn test() {
  let h1 = tokio::spawn(ThreadFuture::from(|| {
    println!("1.1");
    yield_now();
    println!("1.2");
    1u32
  }));
  let h2 = tokio::spawn(ThreadFuture::from(|| {
    println!("2.1");
    yield_now();
    println!("2.2");
    2u32
  }));
  println!("join 1 => {}", h1.await.unwrap());
  println!("join 2 => {}", h2.await.unwrap());
}

Output:

1.1
2.1
1.2
2.2
join 1 => 1
join 2 => 2

Internal

stack-layout

No runtime deps