From 846f5e6bb97c269da4feb171b1837c43de66a38b Mon Sep 17 00:00:00 2001 From: Dylan DPC Date: Tue, 19 Nov 2019 17:09:39 +0100 Subject: [PATCH] Update E0706.md --- src/librustc_error_codes/error_codes/E0706.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/librustc_error_codes/error_codes/E0706.md b/src/librustc_error_codes/error_codes/E0706.md index 1eb1271a9e8..909b08fb174 100644 --- a/src/librustc_error_codes/error_codes/E0706.md +++ b/src/librustc_error_codes/error_codes/E0706.md @@ -1,4 +1,4 @@ - `async fn`s are not yet supported in Rust. + `async fn`s are not yet supported in traits in Rust. Erroneous code example: @@ -10,7 +10,7 @@ trait T { } ``` -`async fn`s normally return an `impl Future`, making the following two examples equivalent: +`async fn`s return an `impl Future`, making the following two examples equivalent: ```edition2018,ignore (example-of-desugaring-equivalence) async fn foo() -> User { @@ -23,7 +23,7 @@ fn foo(&self) -> impl Future + '_ { ``` But when it comes to supporting this in traits, there are [a few implementation -issues][async-is-hard], one of which is that returning `impl Trait` in traits is not supported, +issues][async-is-hard]. One of them is returning `impl Trait` in traits is not supported, as it would require [Generic Associated Types] to be supported: ```edition2018,ignore (example-of-desugaring-equivalence) @@ -40,8 +40,8 @@ impl MyDatabase { } ``` -Until these issues are resolved, you can use the [`async-trait` crate], which allows you to use -this feature by sidesteping the language feature issue by desugaring to "boxed futures" +Until these issues are resolved, you can use the [`async-trait` crate], allowing you to use +`async fn` in traits by desugaring to "boxed futures" (`Pin>`): ```edition2018,ignore (example-of-desugaring-equivalence) @@ -75,4 +75,4 @@ You might be interested in visiting the [async book] for further information. [`async-trait` crate]: https://crates.io/crates/async-trait [async-is-hard]: https://smallcultfollowing.com/babysteps/blog/2019/10/26/async-fn-in-traits-are-hard/ [Generic Associated Types]: https://github.com/rust-lang/rust/issues/44265 -[async book]: https://rust-lang.github.io/async-book/07_workarounds/06_async_in_traits.html \ No newline at end of file +[async book]: https://rust-lang.github.io/async-book/07_workarounds/06_async_in_traits.html