File: README.md

package info (click to toggle)
rust-async-attributes 1.1.2-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 136 kB
  • sloc: makefile: 2; sh: 1
file content (91 lines) | stat: -rw-r--r-- 3,382 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# async-attributes
[![crates.io version][1]][2] [![build status][3]][4]
[![downloads][5]][6] [![docs.rs docs][7]][8]

Experimental language-level polyfills for Async Rust.

- [Documentation][8]
- [Crates.io][2]
- [Releases][releases]

## Examples

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

## About

Async Rust is a work in progress. The language has enabled us to do some
fantastic things, but not everything is figured out yet. This crate exists
to polyfill language-level support for async idioms before they can be part
of the language.

A great example of this is `async fn main`, which we first introduced as
part of the [`runtime`](https://docs.rs/runtime/0.3.0-alpha.7/runtime/) crate.
Its premise is that if `async fn` is required for every `await` call, it
makes sense to apply that even to `fn main`. Unfortunately this would
require compiler support to enable, so we've provided an experimental
polyfill for it in the mean time.

## Why isn't this crate part of async-std?

We want to make sure `async-std`'s surface area is stable, and only includes
things that would make sense to be part of "an async version of std".
Language level support is really important, but _not_ part of the standard
library.

This has some distinct benefits: in particular it allows us to
version both crates at a different pace. And as features are added to the
language (or we decide they weren't a great idea after all), we can
incrementally shrink the surface area of this crate.

The other big benefit is that it allows libraries to depend on `async-std`
without needing to pull in the rather heavy `syn`, `quote`, and
`proc-macro2` crates. This should help keep compilation times snappy for
everyone.

## Installation

```sh
$ cargo add async-attributes
```

## Safety
This crate uses ``#![deny(unsafe_code)]`` to ensure everything is implemented in
100% Safe Rust.

## Contributing
Want to join us? Check out our ["Contributing" guide][contributing] and take a
look at some of these issues:

- [Issues labeled "good first issue"][good-first-issue]
- [Issues labeled "help wanted"][help-wanted]

## References
- https://docs.rs/runtime-attributes - our original experiments with
  `async fn main`.
- https://docs.rs/async-trait - async trait support by the fantastic
  [David Tolnay](https://github.com/dtolnay/).
- https://docs.rs/futures-async-stream - for iterating and defining streams by
  the skilled [Taiki Endo](https://github.com/taiki-e/).

## License
[MIT](./LICENSE-MIT) OR [Apache-2.0](./LICENSE-APACHE)

[1]: https://img.shields.io/crates/v/async-attributes.svg?style=flat-square
[2]: https://crates.io/crates/async-attributes
[3]: https://travis-ci.com/async-rs/async-attributes.svg?branch=master
[4]: https://travis-ci.com/async-rs/async-attributes
[5]: https://img.shields.io/crates/d/async-attributes.svg?style=flat-square
[6]: https://crates.io/crates/async-attributes
[7]: https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square
[8]: https://docs.rs/async-attributes

[releases]: https://github.com/async-rs/async-attributes/releases
[contributing]: https://github.com/async-rs/async-attributes/blob/master.github/CONTRIBUTING.md
[good-first-issue]: https://github.com/async-rs/async-attributes/labels/good%20first%20issue
[help-wanted]: https://github.com/async-rs/async-attributes/labels/help%20wanted