-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] async
and .await
chapter with listings updates
#3908
Draft
chriskrycho
wants to merge
76
commits into
main
Choose a base branch
from
chriskrycho/chapter-async-await
base: main
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
We will primarily just be re-exporting this, though we may also have a couple cases where we choose to implement something small around it.
1. Introduce an integration tests crate. Structure it the way people *should* for large crates (although this is not that) and document why, including linking to a relevant post. 2. Add a basic integration test that verifies the re-export works as it should. (This is not exactly rocket science, but we want to make sure these things don’t just stop working on accident.) An open question that remains here: do we want some structure to the crate beyond the top level re-exports? My inclination at this moment is: no, because we don’t have any *motivation* for that, and naming things is difficult. (We cannot do `trpl::async`, for example, because `async` is a keyword!)
- 17.00: Introduction to the conceptual machinery. This is very nascent but has some decent bones. - 17.01: Trying to get at the foundations for tasks, laziness, etc.; this is *especially* incomplete. - 17.02: Just a paragraph I do not want to lose, which I think *will* be useful… eventually.
Add a fair bit more material about the `futures` executor and why we might prefer to use something else. With that motivation in place, have the readers add our `trpl` crate. (We can of course rename that crate, but it does the job for now.) Use it to get the equivalent of `#[tokio::main]` equivalent and incorporate it into an example.
😬 GitHub is straight up not having a good time rendering the full diff with all the listing changes... so I'm opening a new PR without the listings moving for now 😱 |
😂 Good job, GitHub! |
Move up the installation of the futures crate: get the initial example compiling as soon as possible (even though it is just "Hello, world!") and *then* explain what was going on.
- Update the instructions to install `trpl` instead of `futures`, and move the introductory text there. - Update the note about Tokio in 17.02 to describe both `futures` and `tokio`.
- Gradually build up to the full thing, rather than dumping it all at once at the start. - Show several more “false starts” along the way, using them to teach a couple key ideas about async and control flow. - Update the listings to have their actual expected numbers.
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 27, 2024 21:13
4a92b3b
to
c705651
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
3 times, most recently
from
May 27, 2024 23:01
bd66d14
to
4a0f865
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 28, 2024 14:30
4a0f865
to
628afeb
Compare
Up to this point, the chapter has stuck to `join` and `join3`, as simple function-based APIs. The `join_all` API is obviously more convenient than those *if you can use it*, but being able to use it requires having something which `impl Iterator` of a given type, and therefore demands a homogeneous type, which motivates introducing `Box::pin`. That in turn is quite annoying to work with and requires `Output = <same>` for all the futures in the collection, because of how `join_all` is typed (Rust does not have the ability to do do variadic types, which is what would be necessary for `join_all` to work the way we might want). Thus, we get a motivation for `futures::join!`, which unlike `join_all` *can* work with heterogeneous types. This fills out a fair bit of the text here and adds a lot of the listing support, and outlines what remains to do text-wise.
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 28, 2024 19:41
628afeb
to
1f9526a
Compare
This does not yet actually *explain* either of them, but it gets us to the point where an explanation is well-motivated and can make some sense, and it (more or less successfully) covers the set of errors that gets us to that point.
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 28, 2024 22:36
1f9526a
to
fea6825
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 28, 2024 22:43
fea6825
to
2d40425
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
2 times, most recently
from
May 28, 2024 22:44
56b66e1
to
a443795
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 29, 2024 16:17
a443795
to
05688ac
Compare
This is (a) far from perfect and (b) far from done, but it represents a useful increment of work and includes a bunch of notes for where to go next with this quite tricky section. listings/ch17-async-await/listing-17-13/src/main.rs JJ: M listings/ch17-async-await/listing-17-14/src/main.rs JJ: M src/ch17-02-concurrency-with-async.md
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 29, 2024 22:47
05688ac
to
aea1ef7
Compare
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 30, 2024 18:44
aea1ef7
to
fcf1e8a
Compare
This also has the setup for showing `select`, but currently jumps ahead to showing a `timeout` example.
Tasks to be done: - [ ] Update all listing *output* to match what it should be for the version of Rust we are using at the time we actually merge this. - [ ] (Re-)Update all references to listings to be correct.
chriskrycho
force-pushed
the
chriskrycho/chapter-async-await
branch
from
May 31, 2024 20:12
fcf1e8a
to
fc98bd0
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note: Work is actually happening on #3909 – this one includes everything that one includes and the listings rework—but that means GitHub has a very bad time trying to render the diff. I am maintaining this branch and PR so that I can keep the listings in reasonably good shape as we make changes to
src
as it stands today, so that when we finally go to merge this thing it is not an extra pile of work all at once.As of the time of opening the PR, this is the earliest possible draft material. 😅
A quick note for folks watching the repo: the state of this is roughly: Ready for @carols10cents to leave comments, and we’ll invite others to do so as well over time, but please don’t comment-bomb us at this phase! 😂