ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΡΠ΅Π»ΠΈΠ· Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Rust.
ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° musl Π΄ΠΎ Π²Π΅ΡΡΠΈΡ 1.2.5
Π Π°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π»Π΅Π²ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ *-linux-musl ΡΠ΅Π³Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Ρ musl 1.2.5. Π ΡΠ°ΡΡΠ½ΠΎΡΡ, ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π΄ΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ musl Π·Π° x86_64, aarch64 ΠΈ powerpc64le, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π° Π²Π΅ΡΡΠΈΡ 1.2.3. Π’Π°Π·ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΊΠ»ΡΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΅Π΄Π½Π° "ΡΠ°Π·ΡΡΡΠ°Π²Π°ΡΠ°" ΠΏΡΠΎΠΌΡΠ½Π°, Π·Π°ΡΡΠ³Π°ΡΠ° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° Rust.
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΡΡ Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² DNS ΡΠ΅Π·ΠΎΠ»Π²Π΅ΡΠ° Π½Π° musl, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡ Π° Π² Π²Π΅ΡΡΠΈΡ 1.2.4 ΠΈ Π±ΡΡ Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π² 1.2.5. ΠΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° musl Π·Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΏΠΎΡΡΠ°ΡΠΈΠ²Π½ΠΈΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Linux, ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ DNS Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΈ ΡΡΡΠ²ΡΡΠΈ Π½Π° ΠΈΠΌΠ΅Π½Π°ΡΠ°.
ΠΠ±Π°ΡΠ΅ Π²Π΅ΡΡΠΈΡ 1.2.4 ΡΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΊΡΠΈΡΠΈΡΠ½Π° ΠΏΡΠΎΠΌΡΠ½Π°: ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° crate libc Π½Π° GitHub. ΠΠΎΡΠ΅ΠΊΡΠΈΡ Π·Π° ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½Π° Π² libc 0.2.146 ΠΎΡΠ΅ ΠΏΡΠ΅Π· ΡΠ½ΠΈ 2023 Π³. (ΠΏΡΠ΅Π΄ΠΈ 2,5 Π³ΠΎΠ΄ΠΈΠ½ΠΈ), ΠΈ ΡΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΡ Π΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΎ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠ΅Π»Π΅Π²ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ Π½Π° Rust.
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ allocator Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TLS
Rust 1.93 ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ Π°Π»ΠΎΠΊΠ°ΡΠΎΡΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Rust, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ std::thread_local! ΠΈ std::thread::current Π±Π΅Π· ΡΠΈΡΠΊ ΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ Π°Π»ΠΎΠΊΠ°ΡΠΎΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Rust.
ΠΡΡΠΈΠ±ΡΡΠΈΡΠ΅ cfg Π² asm! ΡΠ΅Π΄ΠΎΠ²Π΅
ΠΠΎ-ΡΠ°Π½ΠΎ, Π°ΠΊΠΎ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°ΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΠΈΡΡΠ° Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ cfg, ΡΠ΅ Π½Π°Π»Π°Π³Π°ΡΠ΅ Π΄Π° Π΄ΡΠ±Π»ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π»ΠΈΡ Π±Π»ΠΎΠΊ asm! Π½Π°ΠΏΡΠ»Π½ΠΎ. Π Π²Π΅ΡΡΠΈΡ 1.93 Π°ΡΡΠΈΠ±ΡΡΡΡ cfg ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΡΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π±Π»ΠΎΠΊΠ°:
asm!( // ΠΈΠ»ΠΈ global_asm! ΠΈΠ»ΠΈ naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // β¦ #[cfg(target_feature = "sse2")] a = const 123, // ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΡΠ°ΠΌΠΎ Π½Π° sse2 );
ΠΡΠ΅Π²Π΅Π΄Π΅Π½ΠΈ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° ΡΡΠ°Π±ΠΈΠ»Π΅Π½ API:
<[MaybeUninit]>::assume_init_drop <[MaybeUninit]>::assume_init_ref` <[MaybeUninit]>::assume_init_mut` <[MaybeUninit]>::write_copy_of_slice` <[MaybeUninit]>::write_clone_of_slice` String::into_raw_parts` Vec::into_raw_parts` ::unchecked_neg` ::unchecked_shl` ::unchecked_shr` ::unchecked_shl` ::unchecked_shr` ::as_array` ::as_array_mut` ::as_array` ::as_array_mut` VecDeque::pop_front_if` VecDeque::pop_back_if` Duration::from_nanos_u128` char::MAX_LEN_UTF8` char::MAX_LEN_UTF16` std::fmt::from_fn` std::fmt::FromFn`
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
