<feed xmlns='http://www.w3.org/2005/Atom'>
<title>embassy/embassy-sync/src/waitqueue/waker.rs, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.d464.sh/rust/embassy/'/>
<entry>
<title>executor,sync: add support for turbo-wakers.</title>
<updated>2023-03-30T15:55:55+00:00</updated>
<author>
<name>Dario Nieuwenhuis</name>
<email>dirbaio@dirbaio.net</email>
</author>
<published>2023-03-30T15:55:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.d464.sh/rust/embassy/commit/?id=80972f1e0e6b6d409cc4d86202608c22e5ee3e5a'/>
<id>80972f1e0e6b6d409cc4d86202608c22e5ee3e5a</id>
<content type='text'>
This is a `core` patch to make wakers 1 word (the task pointer) instead of 2 (task pointer + vtable). It allows having the "waker optimization" we had a while back on `WakerRegistration/AtomicWaker`, but EVERYWHERE, without patching all crates.

Advantages:
- Less memory usage.
- Faster.
- `AtomicWaker` can actually use atomics to load/store the waker, No critical section needed.
- No `dyn` call, which means `cargo-call-stack` can now see through wakes.

Disadvantages:
- You have to patch `core`...
- Breaks all executors and other things that create wakers, unless they opt in to using the new `from_ptr` API.

How to use:

- Run this shell script to patch `core`. https://gist.github.com/Dirbaio/c67da7cf318515181539122c9d32b395
- Enable `build-std`
- Enable `build-std-features = core/turbowakers`
- Enable feature `turbowakers` in `embassy-executor`, `embassy-sync`.
- Make sure you have no other crate creating wakers other than `embassy-executor`. These will panic at runtime.

Note that the patched `core` is equivalent to the unpached one when the `turbowakers` feature is not enabled, so it should be fine to leave it there.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is a `core` patch to make wakers 1 word (the task pointer) instead of 2 (task pointer + vtable). It allows having the "waker optimization" we had a while back on `WakerRegistration/AtomicWaker`, but EVERYWHERE, without patching all crates.

Advantages:
- Less memory usage.
- Faster.
- `AtomicWaker` can actually use atomics to load/store the waker, No critical section needed.
- No `dyn` call, which means `cargo-call-stack` can now see through wakes.

Disadvantages:
- You have to patch `core`...
- Breaks all executors and other things that create wakers, unless they opt in to using the new `from_ptr` API.

How to use:

- Run this shell script to patch `core`. https://gist.github.com/Dirbaio/c67da7cf318515181539122c9d32b395
- Enable `build-std`
- Enable `build-std-features = core/turbowakers`
- Enable feature `turbowakers` in `embassy-executor`, `embassy-sync`.
- Make sure you have no other crate creating wakers other than `embassy-executor`. These will panic at runtime.

Note that the patched `core` is equivalent to the unpached one when the `turbowakers` feature is not enabled, so it should be fine to leave it there.
</pre>
</div>
</content>
</entry>
<entry>
<title>Derive Default for WakerRegistration</title>
<updated>2022-11-06T03:33:38+00:00</updated>
<author>
<name>Matt Johnston</name>
<email>matt@ucc.asn.au</email>
</author>
<published>2022-11-05T14:55:04+00:00</published>
<link rel='alternate' type='text/html' href='http://git.d464.sh/rust/embassy/commit/?id=14a2d1524080593f7795fe14950a3f0ee6e2b409'/>
<id>14a2d1524080593f7795fe14950a3f0ee6e2b409</id>
<content type='text'>
This simplifies creating arrays of WakerRegistrations
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This simplifies creating arrays of WakerRegistrations
</pre>
</div>
</content>
</entry>
<entry>
<title>split `embassy-util` into `embassy-futures`, `embassy-sync`.</title>
<updated>2022-08-22T20:18:13+00:00</updated>
<author>
<name>Dario Nieuwenhuis</name>
<email>dirbaio@dirbaio.net</email>
</author>
<published>2022-08-22T19:46:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.d464.sh/rust/embassy/commit/?id=21072bee48ff6ec19b79e0d9527ad8cc34a4e9e0'/>
<id>21072bee48ff6ec19b79e0d9527ad8cc34a4e9e0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
