#async #async-await #await #future #macro #api-bindings

async-attributes

异步 Rust 的实验性语言级别补丁

6 个版本 (稳定)

1.1.2 2021 年 1 月 23 日
1.1.1 2019 年 11 月 7 日
1.0.0 2019 年 9 月 18 日
0.3.0-alpha.52019 年 9 月 18 日
0.1.0 2019 年 7 月 1 日

#1946 in 异步

Download history 78388/week @ 2024-03-14 79274/week @ 2024-03-21 70575/week @ 2024-03-28 83394/week @ 2024-04-04 104132/week @ 2024-04-11 100338/week @ 2024-04-18 91365/week @ 2024-04-25 93220/week @ 2024-05-02 104222/week @ 2024-05-09 105800/week @ 2024-05-16 115887/week @ 2024-05-23 115191/week @ 2024-05-30 100997/week @ 2024-06-06 110287/week @ 2024-06-13 111072/week @ 2024-06-20 83878/week @ 2024-06-27

426,604 每月下载量
用于 1,223 个 crate (9 个直接使用)

MIT/Apache

12KB
91 代码行

async-attributes

crates.io version build status downloads docs.rs docs

异步 Rust 的实验性语言级别补丁。

示例

#[async_attributes::main]
async fn main() {
    println!("Hello, world!");
}

关于

异步 Rust 还在开发中。这门语言使我们能够做一些非常棒的事情,但并非所有事情都已经解决。这个 crate 存在是为了在它们成为语言的一部分之前,先为异步惯用法提供语言级别的支持。

一个很好的例子是 async fn main,我们最初将其作为 runtime crate 的一部分引入。其前提是如果每个 await 调用都需要 async fn,那么将其应用于 fn main 也是有意义的。不幸的是,这需要编译器的支持才能启用,所以我们暂时提供了一个实验性的补丁。

为什么这个 crate 不是 async-std 的一部分?

我们希望确保 async-std 的表面区域是稳定的,并且只包括有意义的“std 的异步版本”中的事物。语言级别的支持确实很重要,但它 不是 标准库的一部分。

这有一些明显的优势:特别是它允许我们以不同的速度对这两个 crate 进行版本控制。并且随着语言(或我们决定最终它并不是一个好主意)中功能的添加,我们可以逐步缩小这个 crate 的表面区域。

另一个重大好处是,它允许库在无需引入相对较重的 synquoteproc-macro2 依赖的情况下依赖 async-std。这应该有助于保持所有人的编译时间快速。

安装

$ cargo add async-attributes

安全性

此软件包使用 #![deny(unsafe_code)] 确保所有内容都以 100% 安全的 Rust 实现。

贡献

想加入我们吗?查看我们的 "贡献" 指南 并查看一些这些问题

参考文献

许可证

MIT OR Apache-2.0

依赖关系

~1.5MB
~35K SLoC