6 个版本 (稳定)
1.1.2 | 2021 年 1 月 23 日 |
---|---|
1.1.1 | 2019 年 11 月 7 日 |
1.0.0 | 2019 年 9 月 18 日 |
0.3.0-alpha.5 | 2019 年 9 月 18 日 |
0.1.0 | 2019 年 7 月 1 日 |
#1946 in 异步
426,604 每月下载量
用于 1,223 个 crate (9 个直接使用)
12KB
91 代码行
async-attributes
异步 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 的表面区域。
另一个重大好处是,它允许库在无需引入相对较重的 syn
、quote
和 proc-macro2
依赖的情况下依赖 async-std
。这应该有助于保持所有人的编译时间快速。
安装
$ cargo add async-attributes
安全性
此软件包使用 #![deny(unsafe_code)]
确保所有内容都以 100% 安全的 Rust 实现。
贡献
想加入我们吗?查看我们的 "贡献" 指南 并查看一些这些问题
参考文献
- https://docs.rs/runtime-attributes - 我们对
async fn main
的原始实验。 - https://docs.rs/async-trait - 由出色的 David Tolnay 提供的异步特性支持。
- https://docs.rs/futures-async-stream - 由熟练的 Taiki Endo 提供的迭代和定义流。
许可证
MIT OR Apache-2.0
依赖关系
~1.5MB
~35K SLoC