From 43d0cd8dc8799c7b238a90fbf7b41c9ef1f343dc Mon Sep 17 00:00:00 2001 From: Luiz Irber Date: Fri, 16 Aug 2019 20:24:51 +0000 Subject: [PATCH] fix formatting and add Futures link --- docs/src/concepts/futures.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/src/concepts/futures.md b/docs/src/concepts/futures.md index 185aa748..9b5148b5 100644 --- a/docs/src/concepts/futures.md +++ b/docs/src/concepts/futures.md @@ -28,7 +28,7 @@ While computation is a subject to write a whole [book](https://computationbook.c - they either run to succession and yield a result or they can yield an error ## Deferring computation -As mentioned above `Send` and `Sync` are about data. But programs are not only about data, they also talk about *computing* the data. And that's what \[Futures\][futures] do. We are going to have a close look at how that works in the next chapter. Let's look at what Futures allow us to express, in English. Futures go from this plan: +As mentioned above `Send` and `Sync` are about data. But programs are not only about data, they also talk about *computing* the data. And that's what [`Futures`][futures] do. We are going to have a close look at how that works in the next chapter. Let's look at what Futures allow us to express, in English. Futures go from this plan: - Do X - If X succeeds, do Y @@ -40,6 +40,8 @@ towards Remember the talk about "deferred computation" in the intro? That's all it is. Instead of telling the computer what to execute and decide upon *now*, you tell it what to start doing and how to react on potential events the... well... `Future`. +[futures]: https://doc.rust-lang.org/std/future/trait.Future.html + ## Orienting towards the beginning Let's have a look at a simple function, specifically the return value: @@ -77,8 +79,8 @@ What we are searching is something that represents ongoing work towards a result Ignore `Pin` and `Context` for now, you don't need them for high-level understanding. Looking at it closely, we see the following: it is generic over the `Output`. It provides a function called `poll`, which allows us to check on the state of the current computation. Every call to `poll()` can result in one of these two cases: -1. The future is done, `poll` will return `[Poll::Ready](https://doc.rust-lang.org/std/task/enum.Poll.html#variant.Ready)` -2. The future has not finished executing, it will return `[Poll::Pending](https://doc.rust-lang.org/std/task/enum.Poll.html#variant.Pending)` +1. The future is done, `poll` will return [`Poll::Ready`](https://doc.rust-lang.org/std/task/enum.Poll.html#variant.Ready) +2. The future has not finished executing, it will return [`Poll::Pending`](https://doc.rust-lang.org/std/task/enum.Poll.html#variant.Pending) This allows us to externally check if a `Future` has finished doing its work, or is finally done and can give us the value. The most simple way (but not efficient) would be to just constantly poll futures in a loop. There's optimistions here, and this is what a good runtime is does for you. Note that calling `poll` after case 1 happened may result in confusing behaviour. See the [futures-docs](https://doc.rust-lang.org/std/future/trait.Future.html) for details.