<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/library/std/src/sys/sync/once/queue.rs, branch perf-tmp</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=perf-tmp</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=perf-tmp'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2025-09-03T07:14:25+00:00</updated>
<entry>
<title>thread parking: fix docs and examples</title>
<updated>2025-09-03T07:14:25+00:00</updated>
<author>
<name>Ralf Jung</name>
<email>post@ralfj.de</email>
</author>
<published>2025-08-26T16:12:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=39d51d04e706dee462ac4a17508ed87eb52e7715'/>
<id>urn:sha1:39d51d04e706dee462ac4a17508ed87eb52e7715</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add comment why we use zero for COMPLETE</title>
<updated>2025-07-13T10:37:34+00:00</updated>
<author>
<name>Orson Peters</name>
<email>orsonpeters@gmail.com</email>
</author>
<published>2025-07-13T10:37:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=f041962694875c0f0a33f8a5e27fd00597042169'/>
<id>urn:sha1:f041962694875c0f0a33f8a5e27fd00597042169</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Use zero for initialized Once state</title>
<updated>2025-07-13T10:16:40+00:00</updated>
<author>
<name>Orson Peters</name>
<email>orsonpeters@gmail.com</email>
</author>
<published>2025-07-13T10:16:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a2d41393365df0c0c9f728de7f79b8f0d4e14ef2'/>
<id>urn:sha1:a2d41393365df0c0c9f728de7f79b8f0d4e14ef2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>use generic Atomic type where possible</title>
<updated>2025-04-26T23:18:08+00:00</updated>
<author>
<name>Christopher Durham</name>
<email>cad97@cad97.com</email>
</author>
<published>2024-09-19T04:15:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=4d93f6056824c338751f19356d33bb61ce818749'/>
<id>urn:sha1:4d93f6056824c338751f19356d33bb61ce818749</id>
<content type='text'>
in core/alloc/std only for now, and ignoring test files

Co-authored-by: Pavel Grigorenko &lt;GrigorenkoPV@ya.ru&gt;
</content>
</entry>
<entry>
<title>Move some things to `std::sync::poison` and reexport them in `std::sync`</title>
<updated>2025-01-02T12:21:41+00:00</updated>
<author>
<name>Pavel Grigorenko</name>
<email>GrigorenkoPV@ya.ru</email>
</author>
<published>2024-12-23T16:36:41+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=ee2ad4dfb1b7d3a07604efc6d9eb618d0fe3bf7d'/>
<id>urn:sha1:ee2ad4dfb1b7d3a07604efc6d9eb618d0fe3bf7d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>update cfgs</title>
<updated>2024-11-27T15:14:54+00:00</updated>
<author>
<name>Boxy</name>
<email>rust@boxyuwu.dev</email>
</author>
<published>2024-11-27T15:14:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=22998f078588cf479530ff93e4a66ab4bb666398'/>
<id>urn:sha1:22998f078588cf479530ff93e4a66ab4bb666398</id>
<content type='text'>
</content>
</entry>
<entry>
<title>std: allow after-main use of synchronization primitives</title>
<updated>2024-11-18T16:55:36+00:00</updated>
<author>
<name>joboet</name>
<email>jonasboettiger@icloud.com</email>
</author>
<published>2024-11-07T16:13:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=5a856b82f3a1bf335e0e62d92c800d8436977af1'/>
<id>urn:sha1:5a856b82f3a1bf335e0e62d92c800d8436977af1</id>
<content type='text'>
By creating an unnamed thread handle when the actual one has already been destroyed, synchronization primitives using thread parking can be used even outside the Rust runtime.

This also fixes an inefficiency in the queue-based `RwLock`: if `thread::current` was not initialized yet, it will create a new handle on every parking attempt without initializing `thread::current`. The private `current_or_unnamed` function introduced here fixes this.
</content>
</entry>
<entry>
<title>Re-do recursive const stability checks</title>
<updated>2024-10-25T18:31:40+00:00</updated>
<author>
<name>Ralf Jung</name>
<email>post@ralfj.de</email>
</author>
<published>2024-10-06T17:59:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=a0215d8e46aab41219dea0bb1cbaaf97dafe2f89'/>
<id>urn:sha1:a0215d8e46aab41219dea0bb1cbaaf97dafe2f89</id>
<content type='text'>
Fundamentally, we have *three* disjoint categories of functions:
1. const-stable functions
2. private/unstable functions that are meant to be callable from const-stable functions
3. functions that can make use of unstable const features

This PR implements the following system:
- `#[rustc_const_stable]` puts functions in the first category. It may only be applied to `#[stable]` functions.
- `#[rustc_const_unstable]` by default puts functions in the third category. The new attribute `#[rustc_const_stable_indirect]` can be added to such a function to move it into the second category.
- `const fn` without a const stability marker are in the second category if they are still unstable. They automatically inherit the feature gate for regular calls, it can now also be used for const-calls.

Also, several holes in recursive const stability checking are being closed.
There's still one potential hole that is hard to avoid, which is when MIR
building automatically inserts calls to a particular function in stable
functions -- which happens in the panic machinery. Those need to *not* be
`rustc_const_unstable` (or manually get a `rustc_const_stable_indirect`) to be
sure they follow recursive const stability. But that's a fairly rare and special
case so IMO it's fine.

The net effect of this is that a `#[unstable]` or unmarked function can be
constified simply by marking it as `const fn`, and it will then be
const-callable from stable `const fn` and subject to recursive const stability
requirements. If it is publicly reachable (which implies it cannot be unmarked),
it will be const-unstable under the same feature gate. Only if the function ever
becomes `#[stable]` does it need a `#[rustc_const_unstable]` or
`#[rustc_const_stable]` marker to decide if this should also imply
const-stability.

Adding `#[rustc_const_unstable]` is only needed for (a) functions that need to
use unstable const lang features (including intrinsics), or (b) `#[stable]`
functions that are not yet intended to be const-stable. Adding
`#[rustc_const_stable]` is only needed for functions that are actually meant to
be directly callable from stable const code. `#[rustc_const_stable_indirect]` is
used to mark intrinsics as const-callable and for `#[rustc_const_unstable]`
functions that are actually called from other, exposed-on-stable `const fn`. No
other attributes are required.
</content>
</entry>
<entry>
<title>Abstract the state type for futexes</title>
<updated>2024-10-17T19:21:53+00:00</updated>
<author>
<name>Paul Menage</name>
<email>menage@gmail.com</email>
</author>
<published>2024-10-17T19:21:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=cf7ff15a0ddfe0713dd794cd39eb3b3b58ba8d27'/>
<id>urn:sha1:cf7ff15a0ddfe0713dd794cd39eb3b3b58ba8d27</id>
<content type='text'>
In the same way that we expose SmallAtomic and SmallPrimitive to allow
Windows to use a value other than an AtomicU32 for its futex state, this
patch switches the primary futex state type from AtomicU32 to
futex::Atomic.  The futex::Atomic type should be usable as an atomic
value with underlying primitive type equal to futex::Primitive.

This allows supporting the futex API on systems where the underlying
kernel futex implementation requires more state than simply an
AtomicU32.

All in-tree futex implementations simply define {Atomic,Primitive}
directly as {AtomicU32,u32}.
</content>
</entry>
<entry>
<title>Implement ACP 429: add `Lazy{Cell,Lock}::get[_mut]` and `force_mut`</title>
<updated>2024-09-17T16:40:34+00:00</updated>
<author>
<name>Chayim Refael Friedman</name>
<email>chayimfr@gmail.com</email>
</author>
<published>2024-08-20T21:10:13+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=d0a2ca4867c15659e28ab9c3930b5df4e60afcb0'/>
<id>urn:sha1:d0a2ca4867c15659e28ab9c3930b5df4e60afcb0</id>
<content type='text'>
In the implementation of `force_mut`, I chose performance over safety.
For `LazyLock` this isn't really a choice; the code has to be unsafe.
But for `LazyCell`, we can have a full-safe implementation, but it will
be a bit less performant, so I went with the unsafe approach.
</content>
</entry>
</feed>
