| Age | Commit message (Collapse) | Author | Lines |
|
Correct `extract_if` sample equivalent.
Tracking issue: https://github.com/rust-lang/rust/issues/43244
Original PR: #133265
The sample code marked as equivalent in the doc comment isn't currently equivalent. Given the same predicate and range, if your vector were `[1, 2, 3, 3, 3, 3, 3, 3, 4, 5, 6]`, then all of the 3s would be removed. `i` is only incremented when an element is dropped, but `range.end` is unchanged, so the items shift down. I got very confused when reading the docs and trying to square this sample code with the explanation of how the function works.
Fortunately, the real `extract_if()` does not have this problem. I've added an `end` variable to align the behavior. I've also taken the opportunity to simplify the predicate, which now just matches odd numbers, and to pad out the vec of numbers to line up the zero-indexed range with the integers in the vec.
r? the8472
|
|
Initially introduced in 63ccaf11f08fb5d0b39cc33884c5a1a63f547ace
Signed-off-by: ELginas <gintaras.z123@yahoo.com>
|
|
Weekly `cargo update`
Automation to keep dependencies in `Cargo.lock` current.
The following is the output from `cargo update`:
```txt
compiler & tools dependencies:
Locking 36 packages to latest compatible versions
Updating addr2line v0.21.0 -> v0.24.2
Updating anyhow v1.0.97 -> v1.0.98
Updating askama v0.13.0 -> v0.13.1 (available: v0.14.0)
Updating askama_derive v0.13.0 -> v0.13.1
Updating backtrace v0.3.71 -> v0.3.74
Updating blake3 v1.8.1 -> v1.8.2
Updating chrono v0.4.40 -> v0.4.41
Updating clap v4.5.36 -> v4.5.37
Updating clap_builder v4.5.36 -> v4.5.37
Updating color-eyre v0.6.3 -> v0.6.4
Updating color-spantrace v0.2.1 -> v0.2.2
Updating derive-where v1.2.7 -> v1.4.0
Updating getrandom v0.2.15 -> v0.2.16
Removing gimli v0.28.1
Updating hashbrown v0.15.2 -> v0.15.3
Updating jiff v0.2.6 -> v0.2.12
Updating jiff-static v0.2.6 -> v0.2.12
Updating libm v0.2.11 -> v0.2.13
Removing object v0.32.2
Updating openssl-sys v0.9.107 -> v0.9.108
Adding owo-colors v4.2.0
Updating proc-macro2 v1.0.94 -> v1.0.95
Updating psm v0.1.25 -> v0.1.26
Updating rand v0.9.0 -> v0.9.1
Updating redox_syscall v0.5.11 -> v0.5.12
Updating rustix v1.0.5 -> v1.0.7
Updating sha2 v0.10.8 -> v0.10.9
Updating stacker v0.1.20 -> v0.1.21
Updating syn v2.0.100 -> v2.0.101
Updating synstructure v0.13.1 -> v0.13.2
Updating toml_datetime v0.6.8 -> v0.6.9
Adding windows v0.61.1
Adding windows-collections v0.2.0
Adding windows-future v0.2.0
Adding windows-numerics v0.2.0
Updating winnow v0.7.6 -> v0.7.9
Updating zerocopy v0.8.24 -> v0.8.25
Updating zerocopy-derive v0.8.24 -> v0.8.25
note: pass `--verbose` to see 33 unchanged dependencies behind latest
library dependencies:
Locking 2 packages to latest compatible versions
Removing allocator-api2 v0.2.21
Updating hashbrown v0.15.2 -> v0.15.3
Removing proc-macro2 v1.0.94
Removing quote v1.0.40
Updating rand v0.9.0 -> v0.9.1
Removing syn v2.0.100
Removing unicode-ident v1.0.18
Removing zerocopy v0.8.24
Removing zerocopy-derive v0.8.24
note: pass `--verbose` to see 3 unchanged dependencies behind latest
rustbook dependencies:
Locking 31 packages to latest compatible versions
Updating ammonia v4.0.0 -> v4.1.0
Updating anyhow v1.0.97 -> v1.0.98
Updating cc v1.2.19 -> v1.2.21
Updating chrono v0.4.40 -> v0.4.41
Updating clap v4.5.36 -> v4.5.37
Updating clap_builder v4.5.36 -> v4.5.37
Updating clap_complete v4.5.47 -> v4.5.48
Adding cssparser v0.35.0
Adding cssparser-macros v0.6.1
Adding dtoa v1.0.10
Adding dtoa-short v0.3.5
Updating hashbrown v0.15.2 -> v0.15.3
Updating html5ever v0.27.0 -> v0.31.0
Updating jiff v0.2.6 -> v0.2.12
Updating jiff-static v0.2.6 -> v0.2.12
Updating libc v0.2.171 -> v0.2.172
Updating markup5ever v0.12.1 -> v0.16.1
Adding match_token v0.1.0
Adding phf_macros v0.11.3
Updating proc-macro2 v1.0.94 -> v1.0.95
Updating redox_syscall v0.5.11 -> v0.5.12
Updating rustix v1.0.5 -> v1.0.7
Updating sha2 v0.10.8 -> v0.10.9
Updating syn v2.0.100 -> v2.0.101
Updating synstructure v0.13.1 -> v0.13.2
Updating toml v0.8.20 -> v0.8.22
Updating toml_datetime v0.6.8 -> v0.6.9
Updating toml_edit v0.22.24 -> v0.22.26
Adding toml_write v0.1.1
Adding web_atoms v0.1.1
Updating winnow v0.7.6 -> v0.7.9
```
|
|
Includes the following changes:
* Use runtime feature detection for fma routines on x86 [1]
Fixes: https://github.com/rust-lang/rust/issues/140452
[1]: https://github.com/rust-lang/compiler-builtins/pull/896
|
|
|
|
Simpler predicate.
Compare sample code output to that of the library function.
|
|
r=Mark-Simulacrum
Suggest `retain_mut` over `retain` as `Vec::extract_if` alternative
The docs for `Vec::extract_if` suggest using `Vec::retain` if the user doesn't need the removed item. Given that `extract_if` gives a mutable reference to the evaluated element, `retain_mut` is the most appropriate alternative, not `retain`.
|
|
stabilize ptr::swap_nonoverlapping in const
Closes https://github.com/rust-lang/rust/issues/133668
The blocking issue mentioned there is resolved by documentation. We may in the future actually support such code, but that is blocked on https://github.com/rust-lang/const-eval/issues/72 which is non-trivial to implement. Meanwhile, this completes stabilization of all `const fn` in `ptr`. :)
Here's a version of the problematic example to play around with:
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=6c390452379fb593e109b8f8ee854d2a
Should be FCP'd with both `@rust-lang/libs-api` and `@rust-lang/lang` since `swap_nonoverlapping` is documented to work as an "untyped" operation but due to the limitation mentioned above, that's not entirely true during const evaluation. I expect this limitation will only be hit in niche corner cases, so the benefits of having this function work most of the time outweigh the downsides of users running into this problem. (Note that unsafe code could already hit this limitation before this PR by doing cursed pointer casts, but having it hidden inside `swap_nonoverlapping` feels a bit different.)
|
|
This reverts commit ed5f31ab01d41a01b7206eafdf97b458dc41141a.
|
|
compiler & tools dependencies:
Locking 36 packages to latest compatible versions
Updating addr2line v0.21.0 -> v0.24.2
Updating anyhow v1.0.97 -> v1.0.98
Updating askama v0.13.0 -> v0.13.1 (available: v0.14.0)
Updating askama_derive v0.13.0 -> v0.13.1
Updating backtrace v0.3.71 -> v0.3.74
Updating blake3 v1.8.1 -> v1.8.2
Updating chrono v0.4.40 -> v0.4.41
Updating clap v4.5.36 -> v4.5.37
Updating clap_builder v4.5.36 -> v4.5.37
Updating color-eyre v0.6.3 -> v0.6.4
Updating color-spantrace v0.2.1 -> v0.2.2
Updating derive-where v1.2.7 -> v1.4.0
Updating getrandom v0.2.15 -> v0.2.16
Removing gimli v0.28.1
Updating hashbrown v0.15.2 -> v0.15.3
Updating jiff v0.2.6 -> v0.2.12
Updating jiff-static v0.2.6 -> v0.2.12
Updating libm v0.2.11 -> v0.2.13
Removing object v0.32.2
Updating openssl-sys v0.9.107 -> v0.9.108
Adding owo-colors v4.2.0
Updating proc-macro2 v1.0.94 -> v1.0.95
Updating psm v0.1.25 -> v0.1.26
Updating rand v0.9.0 -> v0.9.1
Updating redox_syscall v0.5.11 -> v0.5.12
Updating rustix v1.0.5 -> v1.0.7
Updating sha2 v0.10.8 -> v0.10.9
Updating stacker v0.1.20 -> v0.1.21
Updating syn v2.0.100 -> v2.0.101
Updating synstructure v0.13.1 -> v0.13.2
Updating toml_datetime v0.6.8 -> v0.6.9
Adding windows v0.61.1
Adding windows-collections v0.2.0
Adding windows-future v0.2.0
Adding windows-numerics v0.2.0
Updating winnow v0.7.6 -> v0.7.9
Updating zerocopy v0.8.24 -> v0.8.25
Updating zerocopy-derive v0.8.24 -> v0.8.25
note: pass `--verbose` to see 33 unchanged dependencies behind latest
library dependencies:
Locking 2 packages to latest compatible versions
Removing allocator-api2 v0.2.21
Updating hashbrown v0.15.2 -> v0.15.3
Removing proc-macro2 v1.0.94
Removing quote v1.0.40
Updating rand v0.9.0 -> v0.9.1
Removing syn v2.0.100
Removing unicode-ident v1.0.18
Removing zerocopy v0.8.24
Removing zerocopy-derive v0.8.24
note: pass `--verbose` to see 3 unchanged dependencies behind latest
rustbook dependencies:
Locking 31 packages to latest compatible versions
Updating ammonia v4.0.0 -> v4.1.0
Updating anyhow v1.0.97 -> v1.0.98
Updating cc v1.2.19 -> v1.2.21
Updating chrono v0.4.40 -> v0.4.41
Updating clap v4.5.36 -> v4.5.37
Updating clap_builder v4.5.36 -> v4.5.37
Updating clap_complete v4.5.47 -> v4.5.48
Adding cssparser v0.35.0
Adding cssparser-macros v0.6.1
Adding dtoa v1.0.10
Adding dtoa-short v0.3.5
Updating hashbrown v0.15.2 -> v0.15.3
Updating html5ever v0.27.0 -> v0.31.0
Updating jiff v0.2.6 -> v0.2.12
Updating jiff-static v0.2.6 -> v0.2.12
Updating libc v0.2.171 -> v0.2.172
Updating markup5ever v0.12.1 -> v0.16.1
Adding match_token v0.1.0
Adding phf_macros v0.11.3
Updating proc-macro2 v1.0.94 -> v1.0.95
Updating redox_syscall v0.5.11 -> v0.5.12
Updating rustix v1.0.5 -> v1.0.7
Updating sha2 v0.10.8 -> v0.10.9
Updating syn v2.0.100 -> v2.0.101
Updating synstructure v0.13.1 -> v0.13.2
Updating toml v0.8.20 -> v0.8.22
Updating toml_datetime v0.6.8 -> v0.6.9
Updating toml_edit v0.22.24 -> v0.22.26
Adding toml_write v0.1.1
Adding web_atoms v0.1.1
Updating winnow v0.7.6 -> v0.7.9
|
|
Get performance closer to the glibc implementations by adding assembly
fma routines, with runtime feature detection so they are used even if
not compiled with `+fma` (as the distributed standard library is often
not). Glibc uses ifuncs, this implementation stores a function pointer
in an atomic.
Results of CPU flags are also cached in order to avoid repeating the
startup time in calls to different functions. The feature detection code
is a slightly simplified version of `std-detect`.
Musl sources were used as a reference [1].
Fixes: https://github.com/rust-lang/rust/issues/140452 once synced
[1]: https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/src/math/x32/fma.c
|
|
This module is used for both i686 and x86-64.
|
|
|
|
|
|
doc(std): fix typo lchown -> lchmod
chown is irrelevant here, as this function does not affect file ownership. chmod is the correct function to reference here.
|
|
ebkalderon:use-present-indicative-in-std-io-pipe-docs, r=tgross35
Use present indicative tense in std::io::pipe() API docs
The inline documentation for all other free functions in the `std::io` module use the phrase "creates a" instead of "create a", except for the currently nightly-only `std::io::pipe()` function. This commit updates the text to align with the predominant wording in the `std::io` module.
I recognize this PR is quite a minuscule nitpick, so feel free to ignore and close if you disagree and/or there are bigger fish to fry. Thanks in advance! :smile:
Relates to https://github.com/rust-lang/rust/issues/127154.
|
|
Change signature of File::try_lock and File::try_lock_shared
These methods now return Result<(), TryLockError> instead of Result<bool, Error> to make their use less errorprone
These methods are unstable under the "file_lock" feature. The related tracking issue is https://github.com/rust-lang/rust/pull/130999 and this PR changes the signatures as discussed by libs-api: https://github.com/rust-lang/rust/issues/130994#issuecomment-2770838848
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`Utf8Chunks`
|
|
r=workingjubilee
Stabilize `select_unpredictable`
FCP completed in tracking issue #133962.
|
|
Rename `*Guard::try_map` to `filter_map`.
Rename `std::sync::*Guard::try_map` to `filter_map`.
1. Analogous to `std::cell::Ref(Mut)::filter_map`.
2. Doesn't imply `Try` genericizability.
r? `@Amanieu` (or other T-libs-api)
Tracking issue for `mapped_lock_guards`: https://github.com/rust-lang/rust/issues/117108
|
|
|
|
Remove `avx512dq` and `avx512vl` implication for `avx512fp16`
According to Intel, `avx512fp16` requires only `avx512bw`, but LLVM also enables `avx512vl` and `avx512dq` when `avx512fp16` is active. This is relic code, and will be fixed in LLVM soon. We should remove this from Rust too asap, especially before the stabilization of AVX512
Related:
- llvm/llvm-project#136209
- #138940
- rust-lang/stdarch#1781
- #111137
``@rustbot`` label O-x86_64 O-x86_32 A-SIMD A-target-feature T-compiler -T-libs
r? ``@Amanieu``
**Update: the LLVM fix has been merged**
cc ``@rust-lang/wg-llvm`` will it be possible to update the rustc llvm version to something after llvm/llvm-project#137450
|
|
Document breaking out of a named code block
Closes #110758.
|
|
Avoid redundant WTF-8 checks in `PathBuf`
Eliminate checks for WTF-8 boundaries in `PathBuf::set_extension` and `add_extension`, where joining WTF-8 surrogate halves is impossible. Don't convert the `str` to `OsStr`, because `OsString::push` specializes to skip the joining when given strings.
To assist in this, mark the internal methods `OsString::truncate` and `extend_from_slice` as `unsafe` to communicate their safety invariants better than with module privacy.
Similar to #137777.
cc `@joboet` `@ChrisDenton`
|
|
Delegate to inner `vec::IntoIter` from `env::ArgsOs`
Delegate from `std::env::ArgsOs` to the methods of the inner platform-specific iterators, when it would be more efficient than just using the default methods of its own impl. Most platforms use `vec::IntoIter` as the inner type, so prioritize delegating to the methods it provides.
`std::env::Args` is implemented atop `std::env::ArgsOs` and performs UTF-8 validation with a panic for invalid data. This is a visible effect which users certainly rely on, so we can't skip any arguments. Any further iterator methods would skip some elements, so no change is needed for that type.
Add `#[inline]` for any methods which simply wrap the inner iterator.
|
|
Clarify `async` block behaviour
Adds some documentation for control flow behaviour pertaining to `return` and `?` within `async` blocks. Fixes (or at least improves) #101444.
r? rust-lang/docs
|
|
std: use the address of `errno` to identify threads in `unique_thread_exit`
Getting the address of `errno` should be just as cheap as `pthread_self()` and avoids having to use the expensive `Mutex` logic because it always results in a pointer.
|
|
|
|
These methods now return Result<(), TryLockError> instead of
Result<bool, Error> to make their use less errorprone
|
|
|
|
This is a known problem in the MinGW fmaf implementation, identified at
[1]. Make sure our implementation passes this edge case.
[1]: https://github.com/rust-lang/rust/issues/140515
|
|
Delegate from `std::env::ArgsOs` to the methods of the inner
platform-specific iterators, when it would be more efficient than just
using the default methods of its own impl. Most platforms use
`vec::IntoIter` as the inner type, so prioritize delegating to the
methods it provides.
`std::env::Args` is implemented atop `std::env::ArgsOs` and performs
UTF-8 validation with a panic for invalid data. This is a visible effect
which users certainly rely on, so we can't skip any arguments. Any
further iterator methods would skip some elements, so no change is
needed for that type.
Add `#[inline]` for any methods which simply wrap the inner iterator.
|
|
Clean up "const" situation in format_args!().
This cleans up the "const" situation in the format_args!() expansion/lowering.
Rather than marking the Argument::new_display etc. functions as non-const, this marks the Arguments::new_v1 functions as non-const.
Example expansion/lowering of format_args!() in const:
```rust
// Error: cannot call non-const formatting macro in constant functions
const {
fmt::Arguments::new_v1( // Now the error is produced here.
&["Hello, ", "!\n"],
&[
fmt::Argument::new_display(&world) // The error used to be produced here.
],
)
}
```
|
|
std: mention `remove_dir_all` can emit `DirectoryNotEmpty` when concurrently written into
Closes #139958
The current documentation for `std::fs::remove_dir_all` function does not explicitly mention the error types that may be returned in concurrent scenarios. Specifically, when one thread attempts to remove a directory tree while another thread simultaneously writes files to that directory, the function may return an `io::ErrorKind::DirectoryNotEmpty` error, but this behavior is not clearly mentioned in the current documentation.
r? libs
|
|
simd_select_bitmask: the 'padding' bits in the mask are just ignored
Fixes https://github.com/rust-lang/rust/issues/137942: we documented simd_select_bitmask to require the 'padding' bits in the mask (the mask can sometimes be longer than the vector; I am referring to these extra bits as 'padding' here) to be zero, mostly because nobody felt like doing the research for what should be done when they are non-zero. However, codegen is already perfectly happy just ignoring them, so in practice they can have any value. Some of the intrinsic wrappers in stdarch have trouble ensuring that they are zero. So let's just adjust the docs and Miri to permit non-zero 'padding' bits.
Cc ````@Amanieu```` ````@workingjubilee````
|
|
Fix some grammar errors and hyperlinks in doc for `trait Allocator`
I was reading the allocator docs and noticed some weird sentences and missing hyperlink, so I fixed them and made this small PR.
* "while until either" could also be changed to "for a while until either", but I just deleted "while".
* fixed sentence with incorrect "at" and "has/have".
* linked [*currently allocated*] similar to other methods. All other hyperlinks are fine.
|
|
r=workingjubilee
docs: Add example to `Iterator::take` with `by_ref`
If you want to logically split an iterator after `n` items, you might first discover `take`. Before this change, you'd find that `take` consumes the iterator, and you'd probably be stuck. The answer involves `by_ref`, but that's hard to discover, especially since `by_ref` is a bit abstract and `Iterator` has many methods.
After this change, you'd see the example showing `take` along with `by_ref`, which allows you to continue using the rest of the iterator. `by_ref` had a good example involving `take` already, so this change just duplicates that existing example under `take`.
|
|
Refactor `diy_float`
The refactor replaces bespoke algorithms with functions already inside the standard library, improving both codegen and readability.
|
|
chore: remove redundant words in comment
remove redundant words in comment
|
|
The inline documentation for all other free functions in the `std::io`
module use the phrase "creates a" instead of "create a", except for the
currently nightly-only `std::io::pipe()` function. This commit updates
the text to align with the predominant wording in the `std::io` module.
I recognize this PR is quite a minuscule nitpick, so feel free to ignore
and close if you disagree and/or there are bigger fish to fry. :smile:
|
|
|
|
Rustc now mangles these symbols on its own, so `no_mangle` is rejected
as an error.
|