Rollup merge of #74781 - GuillaumeGomez:cleanup-e0733, r=jyn514

Clean up E0733 explanation

r? @Dylan-DPC
This commit is contained in:
Yuki Okushi 2020-08-03 01:05:15 +09:00 committed by GitHub
commit 5323b9fd9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,6 @@
Recursion in an `async fn` requires boxing. For example, this will not compile:
An [`async`] function used recursion without boxing.
Erroneous code example:
```edition2018,compile_fail,E0733
async fn foo(n: usize) {
@ -8,8 +10,8 @@ async fn foo(n: usize) {
}
```
To achieve async recursion, the `async fn` needs to be desugared
such that the `Future` is explicit in the return type:
To perform async recursion, the `async fn` needs to be desugared such that the
`Future` is explicit in the return type:
```edition2018,compile_fail,E0720
use std::future::Future;
@ -36,5 +38,7 @@ fn foo_recursive(n: usize) -> Pin<Box<dyn Future<Output = ()>>> {
}
```
The `Box<...>` ensures that the result is of known size,
and the pin is required to keep it in the same place in memory.
The `Box<...>` ensures that the result is of known size, and the pin is
required to keep it in the same place in memory.
[`async`]: https://doc.rust-lang.org/std/keyword.async.html