about summary refs log tree commit diff
path: root/src/libcore/future
AgeCommit message (Collapse)AuthorLines
2020-07-27mv std libs to library/mark-412/+0
2020-07-16Revert "Remove spotlight usage"Manish Goregaokar-0/+1
This reverts commit 13c6d5819aae3c0de6a90e7f17ea967bf4487cbb.
2020-07-10Rollup merge of #72303 - yoshuawuyts:future-poll-fn, r=dtolnayManish Goregaokar-0/+70
Add core::future::{poll_fn, PollFn} This is a sibling PR to #70834, adding `future::poll_fn`. This is a small helper function that helps bridge the gap between "poll state machines" and "async/await". It was first introduced in [futures@0.1.7](https://docs.rs/futures/0.1.7/futures/future/fn.poll_fn.html) in December of 2016, and has been tried and tested as part of the ecosystem for the past 3.5 years. ## Implementation Much of the same reasoning from #70834 applies: by returning a concrete struct rather than an `async fn` we get to mark the future as `Unpin`. It also becomes named which allows storing it in structs without boxing. This implementation has been modified from the implementation in `futures-rs`. ## References - [`futures::future::poll_fn`](https://docs.rs/futures/0.3.5/futures/future/fn.poll_fn.html) - [`async_std::future::poll_fn`](https://docs.rs/async-std/1.5.0/async_std/future/fn.poll_fn.html)
2020-06-30Deny unsafe ops in unsafe fns, part 6LeSeulArtichaut-1/+3
And final part!!!
2020-06-25Adds a clearer message for when the async keyword is missing from a functionNell Shamrell-0/+1
Signed-off-by: Nell Shamrell <nellshamrell@gmail.com>
2020-05-25Display information about captured variable in `FnMut` errorAaron Hill-0/+1
Fixes #69446 When we encounter a region error involving an `FnMut` closure, we display a specialized error message. However, we currently do not tell the user which upvar was captured. This makes it difficult to determine the cause of the error, especially when the closure is large. This commit records marks constraints involving closure upvars with `ConstraintCategory::ClosureUpvar`. When we decide to 'blame' a `ConstraintCategory::Return`, we additionall store the captured upvar if we found a `ConstraintCategory::ClosureUpvar` in the path. When generating an error message, we point to relevant spans if we have closure upvar information available. We further customize the message if an `async` closure is being returned, to make it clear that the captured variable is being returned indirectly.
2020-05-22Add core::future::IntoFutureYoshua Wuyts-0/+31
This patch adds `core::future::IntoFuture`. However unlike earlier PRs this patch does not integrate it into the `async/.await` lowering. That integration should be done in a follow-up PR.
2020-05-18Add core::future::{poll_fn, PollFn}Yoshua Wuyts-0/+70
2020-05-09Rollup merge of #70834 - yoshuawuyts:future-pending-ready, r=sfacklerDylan DPC-0/+110
Add core::future::{pending,ready} Adds two future constructors to `core`: `future::ready` and `future::pending`. These functions enable constructing futures of any type that either immediately resolve, or never resolve which is an incredible useful tool when writing documentation. These functions have prior art in both the `futures` and `async-std` crates. This implementation has been adapted from the `futures` crate. ## Examples In https://github.com/rust-lang/rust/pull/70817 we propose adding the `ready!` macro. In the example we use an `async fn` which does not return a future that implements `Unpin`, which leads to the use of `unsafe`. Instead had we had `future::ready` available, we could've written the same example without using `unsafe`: ```rust use core::task::{Context, Poll}; use core::future::{self, Future}; use core::pin::Pin; pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> { let mut fut = future::ready(42_u8); let num = ready!(Pin::new(fut).poll(cx)); // ... use num Poll::Ready(()) } ``` ## Why future::ready? Arguably `future::ready` and `async {}` can be considered equivalent. The main differences are that `future::ready` returns a future that implements `Unpin`, and the returned future is a concrete type. This is useful for traits that require a future as an associated type that can sometimes be a no-op ([example](https://docs.rs/http-service/0.4.0/http_service/trait.HttpService.html#associatedtype.ConnectionFuture)). The final, minor argument is that `future::ready` and `future::pending` form a counterpart to the enum members of `Poll`: `Ready` and `Pending`. These functions form a conceptual bridge between `Poll` and `Future`, and can be used as a useful teaching device. ## References - [`futures::future::ready`](https://docs.rs/futures/0.3.4/futures/future/fn.ready.html) - [`futures::future::pending`](https://docs.rs/futures/0.3.4/futures/future/fn.pending.html) - [`async_std::future::pending`](https://docs.rs/async-std/1.5.0/async_std/future/fn.pending.html) - [`async_std::future::ready`](https://docs.rs/async-std/1.5.0/async_std/future/fn.ready.html)
2020-05-07Add core::future::{pending,ready}Yoshua Wuyts-0/+110
2020-04-25Bump bootstrap compilerMark Rousskov-6/+0
2020-04-05Remove a stack frame from .await callsSteven Fackler-5/+2
2020-03-17Add issue referenceJonas Schievink-1/+1
2020-03-17Clarify commentJonas Schievink-1/+1
2020-03-17Make `ResumeTy` contents privateJonas Schievink-1/+1
2020-03-17Remove useless derives on `GenFuture`Jonas Schievink-1/+0
Not sure why these were there, I guess because this type used to kind of be part of public API?
2020-03-17FormatJonas Schievink-1/+1
2020-03-17Add futures scaffolding to libcoreJonas Schievink-0/+79
2020-02-27Remove spotlight usageGuillaume Gomez-1/+0
2019-12-31Revert "core: add IntoFuture trait and support for await"Wesley Wiser-28/+0
This reverts commit f35517ee861dc012ccc26083dd4520045e2c4f6f.
2019-12-27core: add IntoFuture trait and support for awaitSean McArthur-0/+28
2019-08-08Use associated_type_bounds where applicable - closes #61738Ilija Tovilo-2/+1
2019-08-02Futures: Add link to Waker in trait doc.Bruce Mitchener-1/+3
2019-07-04Switch master to 1.38Mark Rousskov-1/+1
2019-06-27Add suggestion for missing `.await` keywordNathan Corbyn-0/+1
2019-05-27Use .await syntax instead of await!diwic-1/+1
2019-05-13Improve the "must use" lint for `Future`Benjamin Schultzer-1/+1
Co-Authored-By: Mazdak Farrokhzad <twingoow@gmail.com>
2019-04-23Stabilize futures_apiTaylor Cramer-6/+8
2019-04-19core::future::Future: Fix markup typo in docs.Jim Blandy-1/+1
2019-04-19Doc fixes for core::future::Future.Jim Blandy-13/+13
Fixed outdated reference to `waker` argument; now futures are passed a `Context`, from which one can obtain a `waker`. Cleaned up explanation of what happens when you call `poll` on a completed future. It doesn't make sense to say that `poll` implementations can't cause memory unsafety; no safe function is ever allowed to cause memory unsafety, so why mention it here? It seems like the intent is to say that the `Future` trait doesn't say what the consequences of excess polls will be, and they might be bad; but that the usual constraints that Rust imposes on any non-`unsafe` function still apply. It's also oddly specific to say 'memory corruption' instead of just 'undefined behavior'; UB is a bit jargony, so the text should provide examples.
2019-04-18libcore => 2018Taiki Endo-4/+4
2019-04-05Future-proof the Futures APITaylor Cramer-8/+10
2019-02-20Put Future trait into spotlightStjepan Glavina-0/+1
2019-02-20Rollup merge of #58565 - thomaseizinger:typo-future-docs, r=frewsxcvkennytm-1/+1
Fix typo in std::future::Future docs I am not quite sure if this is actually a typo but 1. to me the sentence doesn't make sense if it says "expect" 2. I hope that `Future`s are not really allowed to cause memory unsafety if they are polled after completion.
2019-02-20Rollup merge of #58553 - scottmcm:more-ihle, r=Centrilkennytm-1/+1
Use more impl header lifetime elision Inspired by seeing explicit lifetimes on these two: - https://doc.rust-lang.org/nightly/std/slice/struct.Iter.html#impl-FusedIterator - https://doc.rust-lang.org/nightly/std/primitive.u32.html#impl-Not And a follow-up to https://github.com/rust-lang/rust/pull/54687, that started using IHLE in libcore. Most of the changes in here fall into two big categories: - Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop`, `Debug`, and `Clone`) - Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`) I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations [where the flipped one cannot elide the lifetime](https://internals.rust-lang.org/t/impl-type-parameter-aliases/9403/2?u=scottmcm). I also removed two lifetimes that turned out to be completely unused; see https://github.com/rust-lang/rust/issues/41960#issuecomment-464557423
2019-02-19Fix typo in std::future::Future docsThomas Eizinger-1/+1
2019-02-17Use more impl header lifetime elisionScott McMurray-1/+1
There are two big categories of changes in here - Removing lifetimes from common traits that can essentially never user a lifetime from an input (particularly `Drop` & `Debug`) - Forwarding impls that are only possible because the lifetime doesn't matter (like `impl<R: Read + ?Sized> Read for &mut R`) I omitted things that seemed like they could be more controversial, like the handful of iterators that have a `Item: 'static` despite the iterator having a lifetime or the `PartialEq` implementations where the flipped one cannot elide the lifetime.
2019-02-12Merging masterMatthias Einwag-1/+1
2019-02-10libs: doc commentsAlexander Regueiro-1/+1
2019-02-05review suggestionsMatthias Einwag-2/+4
2019-02-05Apply more review suggestionsMatthias Einwag-3/+5
2019-02-03Update the future/task APIMatthias Einwag-24/+12
This change updates the future and task API as discussed in the stabilization RFC at https://github.com/rust-lang/rfcs/pull/2592. Changes: - Replacing UnsafeWake with RawWaker and RawWakerVtable - Removal of LocalWaker - Removal of Arc-based Wake trait
2019-01-13Add #[must_use] message to Iterator and FutureTaiki Endo-1/+1
2018-12-25Remove licensesMark Rousskov-20/+0
2018-12-21Update Pin API to match the one proposed for stabilizationTaylor Cramer-1/+1
Remove pin::Unpin reexport and add Unpin to the prelude. Change Pin associated functions to methods. Rename get_mut_unchecked_ to get_unchecked_mut Remove impl Unpin for Pin Mark Pin repr(transparent)
2018-12-10Add #[must_use] attribute to stdlib traitsFelix Chapman-0/+1
2018-11-10Fix documentation typos.Bruce Mitchener-1/+1
2018-09-19Remove spawning from task::ContextTaylor Cramer-227/+34
2018-09-17Cleanup and fix method resolution issueTaylor Cramer-7/+7
2018-09-01Update to a new pinning API.Without Boats-14/+40