diff --git a/src/attributes.rst b/src/attributes.rst index 424eb817..c233a6aa 100644 --- a/src/attributes.rst +++ b/src/attributes.rst @@ -483,22 +483,49 @@ Attribute ``target_feature`` | $$aes$$ | $$avx$$ | $$avx2$$ + | $$avx512bf16$$ + | $$avx512bitalg$$ + | $$avx512bw$$ + | $$avx512cd$$ + | $$avx512dq$$ + | $$avx512f$$ + | $$avx512fp16$$ + | $$avx512ifma$$ + | $$avx512vbmi$$ + | $$avx512vbmi2$$ + | $$avx512vl$$ + | $$avx512vnni$$ + | $$avx512vp2intersect$$ + | $$avx512vpopcntdq$$ + | $$avxifma$$ + | $$avxneconvert$$ + | $$avxvnni$$ + | $$avxvnniint16$$ + | $$avxvnniint8$$ | $$bmi1$$ | $$bmi2$$ | $$fma$$ | $$fxsr$$ + | $$gfni$$ + | $$kl$$ | $$lzcnt$$ | $$pclmulqdq$$ | $$popcnt$$ | $$rdrand$$ | $$rdseed$$ | $$sha$$ + | $$sha512$$ + | $$sm3$$ + | $$sm4$$ | $$sse$$ | $$sse2$$ | $$sse3$$ | $$sse4.1$$ | $$sse4.2$$ | $$ssse3$$ + | $$vaes$$ + | $$vpclmulqdq$$ + | $$widekl$$ | $$xsave$$ | $$xsavec$$ | $$xsaveopt$$ @@ -540,6 +567,82 @@ The target architecture features are as follows: - avx2 - avx - Advanced Vector Extensions 2 + * - :dp:`fls_8HPcvIaahaB9` + - avx512bf16 + - avx512bw + - Advanced Vector Extensions 512-bit - Bfloat16 Extensions + * - :dp:`fls_lxcfj6XCKyMh` + - vx512bitalg + - avx512bw + - Advanced Vector Extensions 512-bit - Bit Algorithms + * - :dp:`fls_fh7i1Pcmqjdm` + - avx512bw + - avx512f + - Advanced Vector Extensions 512-bit - Byte and Word Instructions + * - :dp:`fls_M9ne2sqhRB5L` + - avx512cd + - avx512f + - Advanced Vector Extensions 512-bit - Conflict Detection Instructions + * - :dp:`fls_xWcGvl83bVWC` + - avx512dq + - avx512f + - Advanced Vector Extensions 512-bit - Doubleword and Quadword Instructions + * - :dp:`fls_5CVTkOoLHAvW` + - avx512f + - avx2, fma, f16c + - Advanced Vector Extensions 512-bit - Foundation + * - :dp:`fls_hThb8qn820wJ` + - avx512fp16 + - avx512bw + - Advanced Vector Extensions 512-bit - Float16 Extensions + * - :dp:`fls_1T0VYMtG3loD` + - avx512ifma + - avx512f + - Advanced Vector Extensions 512-bit - Integer Fused Multiply Add + * - :dp:`fls_AlBD9ckWKecQ` + - avx512vbmi + - avx512bw + - Advanced Vector Extensions 512-bit - Vector Byte Manipulation Instructions + * - :dp:`fls_72cwAExPDMQ8` + - avx512vbmi2 + - avx512bw + - Advanced Vector Extensions 512-bit - Vector Byte Manipulation Instructions 2 + * - :dp:`fls_pSSIwmUAnUly` + - avx512vl + - avx512f + - Advanced Vector Extensions 512-bit - Vector Length Extensions + * - :dp:`fls_YOW8lcBQ5lNI` + - avx512vnni + - avx512f + - Advanced Vector Extensions 512-bit - Vector Neural Network Instructions + * - :dp:`fls_8PrvVL6dkr31` + - avx512vp2intersect + - avx512f + - Advanced Vector Extensions 512-bit - Vector Pair Intersection to a Pair of Mask Registers + * - :dp:`fls_hKvaSExdlKgd` + - avx512vpopcntdq + - avx512f + - Advanced Vector Extensions 512-bit - Vector Population Count Instruction + * - :dp:`fls_r5KEicrmEGJt` + - avxifma + - avx2 + - Advanced Vector Extensions - Integer Fused Multiply Add + * - :dp:`fls_Qnx9nNiJeIAX` + - avxneconvert + - avx2 + - Advanced Vector Extensions - No-Exception Floating-Point conversion Instructions + * - :dp:`fls_ZrcPWy4pxlTX` + - avxvnni + - avx2 + - Advanced Vector Extensions - Vector Neural Network Instructions + * - :dp:`fls_YW7otDxAliSj` + - avxvnniint16 + - avx2 + - Advanced Vector Extensions - Vector Neural Network Instructions with 16-bit Integers + * - :dp:`fls_G4aOoX8a7i7r` + - avxvnniint8 + - avx2 + - Advanced Vector Extensions - Vector Neural Network Instructions with 8-bit Integers * - :dp:`fls_eglaup5zyfsk` - bmi1 - @@ -556,6 +659,14 @@ The target architecture features are as follows: - fxsr - - Save and restore x87 FPU, MMX technology, and SSE state + * - :dp:`fls_HGKiXfM5fGVo` + - gfni + - sse2 + - Galois Field New Instructions + * - :dp:`fls_gtoLNHFmmBzd` + - kl + - sse2 + - Intel Key Locker Instructions * - :dp:`fls_406ltkru11tk` - lzcnt - @@ -580,6 +691,18 @@ The target architecture features are as follows: - sha - sse2 - Secure Hash Algorithm + * - :dp:`fls_UPhNSZS89sYr` + - sha512 + - avx2 + - Secure Hash Algorithm with 512-bit digest + * - :dp:`fls_HoNwaLtDzwZi` + - sm3 + - avx + - ShangMi 3 Hash Algorithm + * - :dp:`fls_VqjfIihpRe9m` + - sm4 + - avx2 + - ShangMi 4 Hash Algorithm * - :dp:`fls_7c31e21g6bdj` - sse - @@ -604,6 +727,18 @@ The target architecture features are as follows: - ssse3 - sse3 - Supplemental Streaming SIMD Extensions 3 + * - :dp:`fls_gRf8F9PIGySt` + - vaes + - avx2, aes + - Vector AES Instructions + * - :dp:`fls_NNj4H6A9VTR8` + - vpclmulqdq + - avx, pclmulqdq + - Vector Carry-less multiplication of Quadwords + * - :dp:`fls_qZO82VdU5Iz9` + - widekl + - kl + - Intel Wide Keylocker Instructions * - :dp:`fls_rilqwazchfpp` - xsave - diff --git a/src/changelog.rst b/src/changelog.rst index fd40d071..1bd0db60 100644 --- a/src/changelog.rst +++ b/src/changelog.rst @@ -18,6 +18,111 @@ with the change that has been applied due to it. just the language changes that had an impact to the FLS. See the `release notes`_ for a full list of changes. +Language changes in Rust 1.89.0 +------------------------------- + +- `Stabilize explicitly inferred const arguments (feature(generic_arg_infer)) `_ + + - New paragraphs: + + - :p:`fls_reASCId0i117` + - :p:`fls_Ft5rGeL7QwJM` + - :p:`fls_7epZNsTYNmgE` + - :p:`fls_TvuMMQnR0drL` + + - Changed paragraph: :p:`fls_imr2jx6cbuzq` + +- `Add a warn-by-default mismatched_lifetime_syntaxes lint `_. + This lint detects when the same lifetime is referred to by different syntax categories between function arguments and return values, which can be confusing to read, especially in unsafe code. + This lint supersedes the warn-by-default ``elided_named_lifetimes`` lint. + + - No change: lints are not part of the FLS + +- `Expand unpredictable_function_pointer_comparisons to also lint on function pointer comparisons in external macros `_ + + - No change: lints are not part of the FLS + +- `Make the dangerous_implicit_autorefs lint deny-by-default `_ + + - No change: lints are not part of the FLS + +- `Stabilize the avx512 target features `_ + + - Changed syntax: :s:`Feature` + + - New paragraphs: + + - :p:`fls_8HPcvIaahaB9` + - :p:`fls_lxcfj6XCKyMh` + - :p:`fls_fh7i1Pcmqjdm` + - :p:`fls_M9ne2sqhRB5L` + - :p:`fls_xWcGvl83bVWC` + - :p:`fls_5CVTkOoLHAvW` + - :p:`fls_hThb8qn820wJ` + - :p:`fls_1T0VYMtG3loD` + - :p:`fls_AlBD9ckWKecQ` + - :p:`fls_72cwAExPDMQ8` + - :p:`fls_pSSIwmUAnUly` + - :p:`fls_YOW8lcBQ5lNI` + - :p:`fls_8PrvVL6dkr31` + - :p:`fls_hKvaSExdlKgd` + - :p:`fls_r5KEicrmEGJt` + - :p:`fls_Qnx9nNiJeIAX` + - :p:`fls_ZrcPWy4pxlTX` + - :p:`fls_YW7otDxAliSj` + - :p:`fls_G4aOoX8a7i7r` + - :p:`fls_HGKiXfM5fGVo` + - :p:`fls_gRf8F9PIGySt` + - :p:`fls_NNj4H6A9VTR8` + +- `Stabilize these target featires for x86: kl, widekl `_ + + - Changed syntax: :s:`Feature` + + - New paragraphs: + + - :p:`fls_gtoLNHFmmBzd` + - :p:`fls_qZO82VdU5Iz9` + +- `Stabilize these target features for x86: sha512, sm3, sm4 `_ + + - Changed syntax: :s:`Feature` + + - New paragraphs: + + - :p:`fls_UPhNSZS89sYr` + - :p:`fls_HoNwaLtDzwZi` + - :p:`fls_VqjfIihpRe9m` + +- `Stabilize these LoongArch target features: f, d, frecipe, lasx, lbt, lsx, lvz `_ + + - No change: the target is outside the scope of the FLS + +- `Remove i128 and u128 from improper_ctypes_definitions lint `_ + + - No change: lints are not part of the FLS + +- `Stabilize repr128 (#[repr(u128), #repr(i128)]) `_ + + - No change: this was erroneously documented as if it were already true + +- `Allow #![doc(test(attr(..))) everywhere `_ + + - No change: documentation tests are outside the scope of the FLS + +- `Extend temporary lifetime extension to also go through tuple struct and tuple variant constructors `_ + + - Changed paragraph: :p:`fls_DQaCUkskfXzk` + - New paragraphs: + + - :p:`fls_YeeZWqTdMivX` + - :p:`fls_wyzau8hhq74d` + - :p:`fls_eeaJtK4w5gVK` + +- `extern "C" functions on the wasm32-unknown-unknown target now have a standards compliant ABI `_ + + - No change: the target is outside the scope of the FLS + Language changes in Rust 1.88.0 ------------------------------- diff --git a/src/generics.rst b/src/generics.rst index a1df5c0f..13b9f22c 100644 --- a/src/generics.rst +++ b/src/generics.rst @@ -169,6 +169,20 @@ A :t:`constant parameter` shall be used in the following contexts: * :dp:`fls_byqjs5fvy2bj` As a :t:`value` of any :t:`expression` within a :t:`function body`. +:dp:`fls_reASCId0i117` +An :dt:`inferred constant` is a :t:`constant argument` whose :t:`value` is +inferred from the surrounding context by using ``_`` (underscore) in its place. + +:dp:`fls_Ft5rGeL7QwJM` +An :t:`inferred constant` cannot be used in :t:`item` signatures. + +:dp:`fls_7epZNsTYNmgE` +An :t:`inferred constant` cannot be surrounded by ``{}`` (curly braces). + +:dp:`fls_TvuMMQnR0drL` +An :t:`inferred constant` can be surrounded by an arbitrary number of ``()`` +(parentheses). + :dp:`fls_hidfwkwr2r73` A :t:`type parameter` has an implicit :std:`core::marker::Sized` :t:`bound`, unless an :t:`opt-out trait bound` for the :std:`core::marker::Sized` :t:`trait` diff --git a/src/glossary.rst b/src/glossary.rst index 892cf85c..7bad66f8 100644 --- a/src/glossary.rst +++ b/src/glossary.rst @@ -6912,7 +6912,7 @@ tuple struct call expression :dp:`fls_DQaCUkskfXzk` A :dt:`tuple struct call expression` is a :t:`call expression` where the -:t:`call operand` resolves to a :t:`tuple struct`. +:t:`call operand` resolves to a :t:`tuple struct` or a :t:`tuple enum variant`. .. _fls_xx4slbg8s63e: diff --git a/src/ownership-and-deconstruction.rst b/src/ownership-and-deconstruction.rst index a1f3fdc5..f8351cf2 100644 --- a/src/ownership-and-deconstruction.rst +++ b/src/ownership-and-deconstruction.rst @@ -610,16 +610,20 @@ If the :t:`pattern-without-alternation` of a :t:`let statement` is an the :t:`let statement` is extended to the :t:`drop scope` of the :t:`block expression` that contains the :t:`let statement`. +:dp:`fls_YeeZWqTdMivX` +An :dt:`extending expression` is an :t:`expression` with an +:t:`extended drop scope `. + :dp:`fls_wyzau8hhq74d` -An :dt:`extending expression` is either +An :t:`extending expression` is any of the following: * :dp:`fls_ju7cpftd8r2g` - The :t:`expression` of a :t:`let statement`, or + The :t:`expression` of a :t:`let statement`. * :dp:`fls_gjd1ow3l7swe` The :t:`operand` of an :t:`extending expression` that is an :t:`array expression`, a :t:`borrow expression`, a :t:`struct expression`, a - :t:`tuple expression`, or a :t:`type cast expression`, or + :t:`tuple expression`, or a :t:`type cast expression`. * :dp:`fls_Rj9zhVutfQod` The :t:`block expression` and :t:`else expression` of an :t:`if expression` @@ -637,6 +641,10 @@ An :dt:`extending expression` is either The :t:`tail expression` of a :t:`block expression` that is an :t:`extending expression`. +* :dp:`fls_eeaJtK4w5gVK` + The :t:`[argument operand]s` of a :t:`tuple struct call expression` + that is an :t:`extending expression`. + :dp:`fls_aq01wjpkxhq9` The :t:`drop scope` of the :t:`operand` of a :t:`borrow expression` that is an :t:`extending expression` is extended to the :t:`drop scope` of the diff --git a/src/types-and-traits.rst b/src/types-and-traits.rst index 5ad47a25..45fd5b6e 100644 --- a/src/types-and-traits.rst +++ b/src/types-and-traits.rst @@ -491,7 +491,8 @@ of elements. The :t:`element type` shall be a :t:`fixed sized type`. :dp:`fls_imr2jx6cbuzq` -The :t:`size operand` shall be a :t:`constant expression`. +The :t:`size operand` shall be a :t:`constant expression` +or an :t:`inferred constant`. :dp:`fls_r8nqxry2dlww` The :t:`type` of the :t:`size operand` is :t:`type` :c:`usize`.