I'm working on an asynchronous Rust program but the join! macro doesn't work. .await also does not work. Where is my problem ?
I saw examples in the official documentation.
This also doesn't work:
#[async_std::main]
async fn main() {}
I didn't use Tokio or Hyper because its a simple program.
use async_std::task;
use futures::executor::block_on;
use futures::join;
use futures::stream::{FuturesUnordered, StreamExt};
use rand::distributions::{Distribution, Uniform};
use std::thread;
use std::time::{Duration, Instant};
fn main() {
    let start = "bename Allah";
    println!("{}", start);
    fn fibonacci(n: u64) -> u64 {
        if n <= 1 {
            return 1;
        } else {
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
    fn fib(n: u64) {
        println!("Its : {}", fibonacci(n));
    }
    async fn calculate() {
        let do1 = fib(45);
        let do2 = fib(20);
        join!(do1, do2);
    }
    calculate();
    //i used block_on(calculate()) but got same error :(
}
[dependencies]
futures = "0.3.1"
rand = "0.7"
async-std = { version = "1.2", features = ["attributes"] }
surf = "1.0"
I get this error:
error[E0277]: the trait bound `(): core::future::future::Future` is not satisfied
  --> src\main.rs:28:15
   |
28 |         join!(do1,do2);
   |               ^^^ the trait `core::future::future::Future` is not implemented for `()`
   | 
  ::: C:\Users\Mahdi\.cargo\registry\src\github.com-1ecc6299db9ec823\futures-util-0.3.4\src\future\maybe_done.rs:42:24
   |
42 | pub fn maybe_done<Fut: Future>(future: Fut) -> MaybeDone<Fut> {
   |                        ------ required by this bound in `futures_util::future::maybe_done::maybe_done`
 
    