Futures-rs: 0.3 alpha burndown issue

Created on 7 Jun 2018  路  9Comments  路  Source: rust-lang/futures-rs

This issue is for tracking/mentoring the steps needed to get a complete 0.3 branch together.

These issues are listed in roughly order of increasing difficulty, and in the most natural order for completion.

  • [ ] Remove futures-stable

    • This should no longer be relevant
  • [ ] Switch 0.3 branch to use task system from std. Now that the core task definitions have landed in std, the 0.3 branch should be switched over to use these definitions from nightly. That means:

    • Removing the various task/executor definitions in the futures crate and replacing them with re-exports
    • Similarly for the Future trait itself
  • [ ] Update futures-executor in 0.3. Right now, this crate is not part of the 0.3 branch, and needs to be updated:

    • Its Cargo.toml should be updated to use 0.3.0-alpha throughout
    • All uses of Future should be updated to work with the new definitions (which means dealing with pinning, etc). E.g. the Spawn future.
    • The unsafe_* macros are really useful for working with pinned data. A good example of using these macros is the Map combinator.
    • The various spawn functions will have to be updated to make the 0.3 revisions (with TaskObj etc)
  • [ ] Reinstate the prelude

  • [ ] Get the futures top-level crate compiling

  • [ ] Get tests working

    • Start with futures-core, then move to futures-util
  • [ ] Reinstate the Future::join combinator

  • [ ] Reinstate the Future::select combinator

  • [ ] Reinstate the join_all, select_all, select_ok combinators

    • This will require some design work to re-think these combinators given our new error handling approach -- i.e. how to divide with the ones here
  • [ ] Reinstate the Future::shared combinator

  • [ ] Reinstate the missing Stream combinators

  • [ ] Reinstate with_flat_map

  • [ ] Figure out how to update the async/await macro code

help wanted

Most helpful comment

My PR https://github.com/rust-lang-nursery/futures-rs/pull/1037 was merged! 馃帀

  • the futures crate works now

    • the prelude is back again

    • all the stuff from the other crates is exported

    • the tests are disabled. They need to be ported

  • futures-core: Some exports were added
  • the futures-executors crate works now

    • The LocalPool can ATM only execute Sendable futures because it uses TaskObj internally. Some kind of LocalTaskObj needs to be added to make it accept non-Send tasks. Maybe add LocalTaskObj that is ?Send inside futures-core and add a From<TaskObj> impl that uses transmute?

    • Some tests were disabled because of this

    • Benchmarks still need to be ported

    • stream::FuturesUnordered (for efficient single threaded polling of futures with support for wake up form other threads, used by LocalPool) was refactored:

    • it was made pinning-aware

    • the file was split up into submodules

    • many identifiers were renamed

    • the algorithm works as before

  • the future-util crate works now

    • The tests and doc tests run (except for Fanout. Its tests depend on not yet converted functionality)

    • Documentation remains outdated

    • Some stuff needs to be renamed now that futures don't have an associated error type anymore, e.g. TryFutureExt::recover should be renamed to unwrap_or_else

    • Some functionality still needs to be ported

    • Benchmarks still need to be ported

All 9 comments

cc @majorbreakfast @cramertj

Let's use this issue to coordinate remaining work. If you're interested in taking on any of these items, speak up here!

Btw, @cramertj estimates to be within a couple weeks of async notation landing in nightly; it'd be awesome to intercept that with an alpha release!

@Nemo157 btw, do you have any interest in taking any of these on? @cramertj and I are otherwise-occupied.

im going to try to do the first two things listed here - though ive noticed that the definitions in the crate has a lot more inherent methods and trait impls than the ones in std, how should i handle those without orphan rules getting in the way? a whole lot of extension traits?

Quick update:

1034 has been merged

@aturon can you update the checkbox?

My PR https://github.com/rust-lang-nursery/futures-rs/pull/1037 was merged! 馃帀

  • the futures crate works now

    • the prelude is back again

    • all the stuff from the other crates is exported

    • the tests are disabled. They need to be ported

  • futures-core: Some exports were added
  • the futures-executors crate works now

    • The LocalPool can ATM only execute Sendable futures because it uses TaskObj internally. Some kind of LocalTaskObj needs to be added to make it accept non-Send tasks. Maybe add LocalTaskObj that is ?Send inside futures-core and add a From<TaskObj> impl that uses transmute?

    • Some tests were disabled because of this

    • Benchmarks still need to be ported

    • stream::FuturesUnordered (for efficient single threaded polling of futures with support for wake up form other threads, used by LocalPool) was refactored:

    • it was made pinning-aware

    • the file was split up into submodules

    • many identifiers were renamed

    • the algorithm works as before

  • the future-util crate works now

    • The tests and doc tests run (except for Fanout. Its tests depend on not yet converted functionality)

    • Documentation remains outdated

    • Some stuff needs to be renamed now that futures don't have an associated error type anymore, e.g. TryFutureExt::recover should be renamed to unwrap_or_else

    • Some functionality still needs to be ported

    • Benchmarks still need to be ported

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jedisct1 picture jedisct1  路  3Comments

xrl picture xrl  路  3Comments

seanmonstar picture seanmonstar  路  4Comments

sile picture sile  路  5Comments

jannickj picture jannickj  路  3Comments