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.60
async-compat 1.71
async-dup 1.85
async-executor 1.65
async-fs 1.85
async-io 1.71
async-lock 1.85
async-net 1.71
async-process 1.85
async-rustls 1.61
async-signal 1.85
async-task 1.57
atomic-waker 1.36
blocking 1.68
cache-padded 1.31
concurrent-queue 1.61
easy-parallel 1.63
event-listener 1.60
event-listener-strategy 1.60
fastrand 1.36
fastrand-contrib 1.43
futures-lite 1.68
nb-connect N/A
parking 1.51
piper 1.36
polling 1.71
smol 1.85
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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions