Challenge 1: A Basic async Greeting — Possible Solution ==================================================================== async fn greet(name: &str) -> String { format!("Hello, {}!", name) } #[tokio::main] async fn main() { let message = greet("Ada").await; println!("{}", message); } WHY THIS WORKS AS AN ANSWER ------------------------------ greet is declared async fn, so calling greet("Ada") on its own does NOT run the function body immediately — per this chapter's core point about Rust's lazy Futures, it just produces a Future value representing "this computation, not yet done." #[tokio::main] wires up the tokio runtime and lets main itself be async — required per this chapter's own explanation that Rust ships no built-in runtime; without SOME runtime present, .await inside main would have nothing to actually drive the future forward. .await on greet("Ada") is what ACTUALLY runs the function body and produces the real String result, assigned to message and printed. WHAT WOULD HAPPEN WITHOUT .await: writing let message = greet("Ada"); (no .await) would compile — message would just be a Future value, not an actual String — and greet's body (the format! call) would NEVER RUN AT ALL. Trying to println!("{}", message) afterward wouldn't even compile, since a Future doesn't implement Display the way a String does — but even setting that aside, per this chapter's warn-box, the underlying bug (the function body silently never executing) is the real, quieter danger, separate from whatever type error happens to also occur.