From 44fe3f0e76ee22b112f6beba277cf095f77e6738 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sat, 11 Mar 2023 11:50:01 +0100 Subject: [PATCH 1/2] Make use of pin! stabilization --- src/lib.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ece529d..95ad175 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ //! ``` #![forbid(unsafe_code)] use std::future::Future; +use std::pin::Pin; use std::sync::Arc; use std::sync::Condvar; use std::sync::Mutex; @@ -60,10 +61,15 @@ impl Wake for CondvarWake { } /// Block on specified [`Future`]. +/// +/// The future will be polled until completion on the current thread. pub fn execute(f: impl Future) -> T { - // TODO: replace with std::pin::pin once it gets stabilized - let mut pinned = Box::pin(f); + // Use dynamic dispatch to save on codegen + poll(std::pin::pin!(f)) +} +/// Poll a future until completion. +fn poll(mut pinned: Pin<&mut dyn Future>) -> T { let wake = Arc::new(CondvarWake::default()); let waker = Waker::from(Arc::clone(&wake)); From b7e0f8e252be5f9f23321ba9dbcdf0ff6e646ce1 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sat, 11 Mar 2023 12:12:54 +0100 Subject: [PATCH 2/2] Increase MSRV to 1.68 --- .github/workflows/ci.yml | 2 +- CHANGELOG.md | 9 +++++++++ Cargo.toml | 5 ++--- README.md | 9 +++++---- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a20d1bb..654a813 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: - uses: dtolnay/rust-toolchain@v1 with: - toolchain: "1.51" + toolchain: "1.68" - run: cargo test diff --git a/CHANGELOG.md b/CHANGELOG.md index caabcfc..27fd992 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Use dynamic dispatch internally to save on code gen. External API unchanged. +- No longer heap-allocate futures. + +### Breaking + +- Minimum supported Rust version bumped to 1.68. + ## [0.1.1] - 2022-09-05 ### Fixed diff --git a/Cargo.toml b/Cargo.toml index dbb256e..7ee9ff5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,11 @@ [package] name = "beul" version = "0.1.1" -# Edition 2021 is not available in MSRV -edition = "2018" +edition = "2021" license = "MIT OR Apache-2.0" description = "It executes futures" repository = "https://github.com/bertptrs/beul/" -rust-version = "1.51" +rust-version = "1.68" authors = [ "Bert Peters", ] diff --git a/README.md b/README.md index e3b0e85..6b2899a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Beul -Beul is a minimalistic futures executor. No dependencies, no unsafe rust. +Beul is a minimalistic futures executor. No dependencies, no unsafe rust. It simply executes +futures. ## Usage @@ -12,8 +13,8 @@ beul::execute(async {}); ### Backwards compatibility -This crate requires at least Rust 1.51, due to its reliance on [Wake]. Increases in this version -will be considered breaking changes. This crate follows semantic versioning. +This crate requires at least Rust 1.68, due to its reliance on [std::pin::pin!]. Increases in this +version will be considered breaking changes. This crate follows semantic versioning. ### Limitations @@ -37,4 +38,4 @@ work by you, as defined in the Apache-2.0 license, shall be dual licensed as abo additional terms or conditions. [Tokio]: https://tokio.rs/ -[Wake]: https://doc.rust-lang.org/std/task/trait.Wake.html +[std::pin::pin!]: https://doc.rust-lang.org/std/pin/macro.pin.html