Commit Graph

82 Commits

Author SHA1 Message Date
Mark Rousskov 93eed402ad Bump bootstrap compiler 2020-04-25 09:25:33 -04:00
Jonas Schievink 1a764a7ef5 Add futures scaffolding to libcore 2020-03-17 22:17:31 +01:00
Jonas Schievink f53f9a88f1 Bump the bootstrap compiler 2020-03-15 19:43:25 +01:00
Matthew Jasper d863978f89 Fix tests after rebase 2020-02-14 22:40:03 +00:00
Jonas Schievink 044fe0f558 Add a resume type parameter to Generator 2020-02-02 13:20:57 +01:00
Wesley Wiser 717702dffd Revert "core: add IntoFuture trait and support for await"
This reverts commit f35517ee86.
2019-12-31 19:18:08 -05:00
Sean McArthur f35517ee86 core: add IntoFuture trait and support for await 2019-12-27 11:56:11 -08:00
Mark Rousskov a06baa56b9 Format the world 2019-12-22 17:42:47 -05:00
David Wood 438455d18b async/await: more improvements to non-send errors
Signed-off-by: David Wood <david@davidtw.co>
2019-12-08 16:29:08 +00:00
Steven Fackler 3fe7cfc326 Remove some stack frames from .async calls
The `Context` argument is currently smuggled through TLS for
async-generated futures. The current infrastructure is closure-based,
and results in an extra 6 stack frames when .awaiting an async-generated
future!

```
  12: foo::async_b::{{closure}}
             at src/main.rs:10
  13: <std::future::GenFuture<T> as core::future::future::Future>::poll::{{closure}}
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:43
  14: std::future::set_task_context
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:79
  15: <std::future::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:43
  16: std::future::poll_with_tls_context::{{closure}}
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:121
  17: std::future::get_task_context
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:111
  18: std::future::poll_with_tls_context
             at /rustc/4560ea788cb760f0a34127156c78e2552949f734/src/libstd/future.rs:121
  19: foo::async_a::{{closure}}
             at src/main.rs:6
```

While the long (medium?) term solution is to remove the use of TLS
entirely, we can improve things a bit in the meantime. In particular,
this commit does 2 things:

1. `get_task_context` has been inlined into `poll_with_tls_context`,
    removing 2 frames (16 and 17 above).
2. `set_task_context` now returns a guard type that resets the TLS
    rather than taking a closure, removing 2 frames (13 and 14 above).

We can also remove frame 18 by removing `poll_with_tls_context` in favor
of a `get_task_context` function which returns a guard, but that
requires adjusting the code generated for .await, so I've left that off
for now.
2019-11-13 17:14:50 -08:00
David Wood 04fa9b1b3f async/await: improve obligation errors
This commit improves obligation errors for async/await:

```
note: future does not implement `std::marker::Send` because this value is used across an
      await
  --> $DIR/issue-64130-non-send-future-diags.rs:15:5
   |
LL |     let g = x.lock().unwrap();
   |         - has type `std::sync::MutexGuard<'_, u32>`
LL |     baz().await;
   |     ^^^^^^^^^^^ await occurs here, with `g` maybe used later
LL | }
   | - `g` is later dropped here
```

Signed-off-by: David Wood <david@davidtw.co>
2019-09-30 23:41:20 +01:00
Wim Looman 7980bc4bbc Hide gen_future API from documentation 2019-06-04 19:22:30 +02:00
Taylor Cramer 3f966dcd53 Stabilize futures_api 2019-04-23 16:13:53 -07:00
Taylor Cramer 1691e06db6 Future-proof the Futures API 2019-04-05 15:03:33 -07:00
Matthias Einwag d9a4b22d32 Update the future/task API
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-02-03 13:46:53 -08:00
Wim Looman a3fdee9a75 Change generator trait to use pinning 2019-01-27 22:58:53 +01:00
Aaron Hill 31cd65f712 Fix std::future::from_generator documentation
This function takes a generator and wraps it in a future, not
vice-versa.
2019-01-23 17:39:28 -05:00
Mark Rousskov 2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Taylor Cramer 20d694a95f Update Pin API to match the one proposed for stabilization
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-21 20:41:24 -08:00
Ralf Jung 46a683111d fix futures aliasing mutable and shared ref 2018-11-28 19:30:11 +01:00
Taylor Cramer 1b00f0b9fa Remove spawning from task::Context 2018-09-19 15:01:19 -07:00
Without Boats 974bdc80fe Update to a new pinning API. 2018-09-01 06:57:58 +02:00
Niv Kaminer 13da951868 move PinMut into pin module and export through std 2018-08-23 01:37:03 +03:00
Matthias Krüger 71120ef1e5 Fix typos found by codespell. 2018-08-19 17:41:28 +02:00
Taylor Cramer 3a93e914eb Remove unnecessary local in await! macro 2018-08-02 13:07:55 -07:00
Josef Reinhard Brandl 3bcb85ee65 PinMut: Add safe get_mut and rename unsafe fns to get_mut_unchecked and map_unchecked 2018-06-23 18:29:56 +02:00
Taylor Cramer 9a310abf79 Remove impl trait names and move bits of await into a function 2018-06-22 16:08:07 -07:00
Taylor Cramer ee51a3c10a Review nits and updates
Move future_from_generator out of raw
Update await to use $crate
Renumber errors
2018-06-22 11:36:01 -07:00
Patrick Walton 0c820d4123 libstd: Rename libcore to libstd and libstd to libextra; update makefiles.
This only changes the directory names; it does not change the "real"
metadata names.
2013-05-22 21:57:05 -07:00
Corey Richardson cc57ca012a Use assert_eq! rather than assert! where possible 2013-05-19 08:16:02 -04:00
bors 3ee479f3e9 auto merge of #6577 : brson/rust/io-upstream, r=pcwalton
r?

This is all of my scheduler work on #4419 from the last 3 weeks or so. I've had a few failed pull requests so far but I think the problems are ironed out.

* TCP
* The beginnings of runtime embedding APIs
* Porting various corners of core to be compatible with both schedulers
* libuv timer bindings
* Further refinement of I/O error handling, including a new, incomplete, `read_error` condition
* Incomplete refactoring to make tasks work without coroutines and user-space scheduling
* Implementations of Reader/Writer extension methods
* Implementations of the most important part of core::comm

I'm particularly happy with how easy the [comm types on top of the scheduler](https://github.com/brson/rust/blob/io-upstream/src/libcore/rt/comm.rs). Note that these implementations do not use pipes. If anything here needs careful review though it's this code.

This branch passes 95% of the run-pass tests (with `TESTARGS=--newrt`)

In the next week I'll probably spend some time adding preliminary multithreading and seeing how close we are to removing the old runtime.
2013-05-18 18:37:25 -07:00
Olivier Saut 4b13895c2f Remove trailing whitespaces 2013-05-18 11:53:51 +02:00
Brian Anderson 26becc308e core: Wire up oneshot pipes to newsched 2013-05-17 17:54:27 -07:00
Olivier Saut 7dc466f91f Correct the example given for a future, add punctuation where necessary 2013-05-17 23:11:18 +02:00
Björn Steinbrink bdc182cc41 Use static string with fail!() and remove fail!(fmt!())
fail!() used to require owned strings but can handle static strings
now. Also, it can pass its arguments to fmt!() on its own, no need for
the caller to call fmt!() itself.
2013-05-14 16:36:23 +02:00
Tim Chevalier ed41864464 Warning police 2013-05-11 20:36:44 -07:00
Alex Crichton 998fececd6 Stop using the '<->' operator 2013-05-10 22:51:06 -04:00
Daniel Micay 2bc12635a2 remove vecs_implicitly_copyable from libstd/libcore 2013-05-09 14:00:53 -04:00
Patrick Walton 16a0125e41 libcore: Fix tests. 2013-05-08 17:04:01 -07:00
Patrick Walton 99daec602f librustc: Fix merge fallout. 2013-05-08 17:04:00 -07:00
Patrick Walton bba0680cb0 libstd: Remove mutable fields from future and par 2013-05-08 17:03:58 -07:00
Brian Anderson 8081e8debf Register snapshots 2013-05-04 15:43:51 -07:00
Tim Chevalier 18bf9bd55a std: Warning police 2013-05-03 16:56:33 -07:00
Patrick Walton 39693e7b61 test: Fix more tests. 2013-04-29 14:30:57 -07:00
Patrick Walton 37abf4bad0 librustc: Forbid type implementations on typedefs. 2013-04-29 14:30:57 -07:00
Daniel Micay f792baba42 only use #[no_core] in libcore 2013-04-27 21:34:24 -04:00
Huon Wilson d3be98e9f5 libcore,std,syntax,rustc: move tests into mod tests, make them private (no pub mod or pub fn). 2013-04-16 09:57:47 +10:00
Niko Matsakis 03396473b8 libstd: changes to in response to #5656 2013-04-10 17:32:03 -07:00
Patrick Walton 1e91595520 librustc: Remove fail_unless! 2013-03-29 16:39:08 -07:00
Alex Crichton be57d745d2 Removing unused imports 2013-03-28 23:56:46 -04:00