ΠΠ±ΡΠ²Π΅Π½ Π΅ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΡΠ΅Π»ΠΈΠ· Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° 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.
Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ Π°Π»ΠΎΠΊΠ°ΡΠΎΡ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° TLS
Rust 1.93 ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ Π°Π»ΠΎΠΊΠ°ΡΠΎΡΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Rust, Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ std::thread_local! ΠΈ std::thread::current Π±Π΅Π· ΡΠΈΡΠΊ ΠΎΡ re-entrancy ΡΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ Π°Π»ΠΎΠΊΠ°ΡΠΎΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Rust.
ΠΡΡΠΈΠ±ΡΡΠΈΡΠ΅ cfg Π² asm! ΡΠ΅Π΄ΠΎΠ²Π΅
ΠΠΎ-ΡΠ°Π½ΠΎ, Π°ΠΊΠΎ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°ΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΠΈΡΡΠ° Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π° ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ cfg, ΡΠ΅ Π½Π°Π»Π°Π³Π°ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΡ Π±Π»ΠΎΠΊ asm! ΠΈΠ·ΡΡΠ»ΠΎ. Π Π²Π΅ΡΡΠΈΡ 1.93 Π°ΡΡΠΈΠ±ΡΡΡΡ cfg ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π±Π»ΠΎΠΊΠ°:
asm!( // or global_asm! or naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // β¦ #[cfg(target_feature = "sse2")] a = const 123, // only used on 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
