Skip to content

Tracking issue for potentially useful features in future Rust versions #244

@notgull

Description

@notgull

As of the time of writing (updated 2024-01-14), the current MSRV for every crate in the smol-rs organization is as follows:

Repository Name MSRV
async-broadcast N/A
async-channel 1.61
async-compat N/A
async-dup 1.59
async-executor 1.60
async-fs 1.63
async-io 1.63
async-lock 1.60
async-net 1.63
async-process 1.63
async-rustls 1.61
async-signal 1.63
async-task 1.57
atomic-waker 1.36
blocking 1.61
cache-padded 1.31
concurrent-queue 1.61
easy-parallel 1.63
event-listener 1.61
event-listener-strategy 1.60
fastrand 1.36
fastrand-contrib 1.43
futures-lite 1.61
nb-connect N/A
parking 1.51
piper 1.36
polling 1.63
smol 1.63
smol-macros 1.63
vec-arena N/A
waker-fn 1.51

The lowest MSRV here is 1.36 (aside from cache-padded, which we are planning on deprecating, see smol-rs/cache-padded#7). As a whole, the policy is usually to not bump the MSRV past the current Rust version used by Debian Stable (currenly 1.63), but once Debian Stable upgrades to a new Rust version, or a bump in an important crate (such as libc) happens, we will upgrade to a newer Rust version. This issue keeps track of features that may be useful to smol, but cannot be used yet because we don't have the required Rust version.

  • 1.64
    • We may want to implement IntoFuture on certain structures (like async_process::Child).
    • futures-lite may want to re-export the newly stable ready!() and poll_fn items. As before, this would be a breaking change.
  • 1.65
  • 1.66
    • The std::os::fd module could be used to replace parts of std::os::unix::io in a way that helps support WASI.
  • 1.67
    • must_use can now be used successfully on async fn.
  • 1.68
    • The pin! macro could be used to reimplement the pin macro in futures-lite without unsafe code. This means futures-lite could not contain any unsafe code.
    • We can use the constant VecDeque::new to avoid using OnceCell in blocking. (Remove the dependency on async-lock blocking#59)
  • Nightly
    • Async functions in traits will likely cause the entire async ecosystem to be revamped, we should look out for potentially breaking bumps in futures-lite or async-io.
    • AsyncIterator may replace Stream in futures.
    • Custom allocators would be nice to use for several instances of allocation. See Custom allocators async-task#24 and Support Custom Allocator of Channel async-channel#110
    • Once ReadBuf is supported, we can use that in piper to avoid needing to initialize/zero out parts of the pipe.
      • I consider this to be a blocker for piper v1.0.

(Feel free to add any that I missed)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions