ИздаванС Π½Π° Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Rust 1.73

Π•Π·ΠΈΠΊΡŠΡ‚ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ с ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Rust 1.73, основан ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Mozilla, Π½ΠΎ сСга Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΠ΄ Π΅Π³ΠΈΠ΄Π°Ρ‚Π° Π½Π° нСзависимата организация с нСстопанска Ρ†Π΅Π» Rust Foundation, бСшС пуснат. Π•Π·ΠΈΠΊΡŠΡ‚ сС фокусира Π²ΡŠΡ€Ρ…Ρƒ бСзопасността Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ прСдоставя срСдствата Π·Π° постиганС Π½Π° висок ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ сС избягва ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° изпълнСниС (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ Π΄ΠΎ основна инициализация ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°).

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° Rust спасяват Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠ°Π·Π²Π°Ρ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ област Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, слСд ΠΊΠ°Ρ‚ΠΎ тя Π΅ Π±ΠΈΠ»Π° освободСна, Π΄Π΅Ρ€Π΅Ρ„Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€ ΠΈ Ρ‚.Π½. Π—Π° разпространСниС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, прСдоставянС Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° зависимости, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Cargo. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ crates.io сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π·Π° хостванС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

БСзопасността Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ осигурСна Π² Rust ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, прослСдяванС Π½Π° собствСността Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, прослСдяванС Π½Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΆΠΈΠ²ΠΎΡ‚ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° (ΠΎΠ±Ρ…Π²Π°Ρ‚ΠΈ) ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° корСктността Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π½Π° ΠΊΠΎΠ΄Π°. Rust ΡΡŠΡ‰ΠΎ осигурява Π·Π°Ρ‰ΠΈΡ‚Π° срСщу цСлочислСни ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½ΠΈΡ, изисква ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π² стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€ΠΈΠ»Π°Π³Π° концСпцията Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΈ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° силно статично въвСТданС Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° логичСскитС Π³Ρ€Π΅ΡˆΠΊΠΈ.

Основни ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΈΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сривовС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (ΠΏΠ°Π½ΠΈΠΊΠ°), Π΅ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½. Π’Π΅ΠΊΡΡ‚ΡŠΡ‚, посочСн Π² макроса "panic!" сСга сС ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Ρ€Π΅Π΄ Π±Π΅Π· ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ-лСсно Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ ΠΈΠ»ΠΈ са Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ Π½Π° няколко Ρ€Π΅Π΄Π°. fn main() { let file = "ferris.txt"; ΠΏΠ°Π½ΠΈΠΊΠ°!("ΠΎ, Π½Π΅! {Ρ„Π°ΠΉΠ»:?} Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½!"); } ИмашС нишка 'main', паникьосана ΠΎΡ‚ 'ΠΎ, Π½Π΅! "ferris.txt" Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½!', src/main.rs:3:5 ΠΠΈΡˆΠΊΠ°Ρ‚Π° 'main' ΠΈΠ·ΠΏΠ°Π΄Π½Π° Π² ΠΏΠ°Π½ΠΈΠΊΠ° Π² src/main.rs:3:5: ΠΎ, Π½Π΅! "ferris.txt" Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½!

    Π˜Π·Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΏΠΎΠΊΠ°Π·Π²Π°Π½ ΠΏΡ€ΠΈ задСйстванС Π½Π° макроситС β€žassert_eqβ€œ ΠΈ β€žassert_neβ€œ, ΡΡŠΡ‰ΠΎ Π΅ ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½. fn main() { assert_eq!("πŸ¦€", "🐟", "Ρ„Π΅Ρ€ΠΈ Π½Π΅ Π΅ Ρ€ΠΈΠ±Π°"); } ИмашС нишка 'main', ΠΈΠ·ΠΏΠ°Π΄Π½Π°Π»Π° Π² ΠΏΠ°Π½ΠΈΠΊΠ° ΠΏΡ€ΠΈ 'Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΠ΅: `(ляво == дясно)` ляво: `"πŸ¦€"`, дясно: `"🐟"`: фСрис Π½Π΅ Π΅ Ρ€ΠΈΠ±Π°', src/main.rs: 2:5 Π’Π΅ΠΌΠ°Ρ‚Π° 'main' сС паникьоса Π² src/main.rs:2:5: Ρ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ `left == right` Π½Π΅ Π±Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ: ferris Π½Π΅ Π΅ Ρ€ΠΈΠ±Π° ляво: β€œπŸ¦€β€ дясно: β€œπŸŸβ€

  • Π’ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с RFC 3184 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π·Π° нишки (thread_local) LocalKey ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ > ΠΈ LocalKey > Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ get(), set(), take() ΠΈ replace(), вмСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° затварянС "with(|inner| ...)", ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π° нСобходимостта ΠΎΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠ΄ Π·Π° инициализация Π·Π° стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π° Π½ΠΎΠ²ΠΈ нишки, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ макроса β€œthread_local!” нишка_Π»ΠΎΠΊΠ°Π»Π½Π°! { статични НЕЩА: ΠΊΠ»Π΅Ρ‚ΠΊΠ° > = Cell::new(Vec::new()); } fn f() { // бСшС THINGS.with(|i| i.set(vec![32, 1, 2])); // стана THINGS.set(vec![3, 1, 2]); // ... // бСшС пуснато v = THINGS.with(|i| i.take()); // стана let v: Vec = НЕЩА.take(); }
  • Нова част ΠΎΡ‚ API Π΅ прСмСстСна Π² катСгорията Π½Π° стабилни, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° характСристикитС са стабилизирани:
    • НСподписано {цяло число}::div_ceil
    • Unsigned {integer}::next_multiple_of
    • Unsigned {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::ΠΏΠΎΠ»ΡƒΡ‡ΠΈ
    • LocalKey:: >::ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚
    • LocalKey:: >::Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅
    • LocalKey:: >::Π·Π°ΠΌΠ΅Π½ΠΈ
    • LocalKey:: >::с_Π·Π°Π΅ΠΌ
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚
    • LocalKey:: >::Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅
    • LocalKey:: >::Π·Π°ΠΌΠ΅Π½ΠΈ
  • ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ "const", ΠΊΠΎΠΉΡ‚ΠΎ опрСдСля Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ във всСки контСкст вмСсто константи, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° във Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:
    • rc::Π‘Π»Π°Π±::Π½ΠΎΠ²
    • синхронизиранС :: Π‘Π»Π°Π±ΠΎ :: Π½ΠΎΠ²ΠΎ
    • NonNull::as_ref
  • ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ осигурява запис Π½Π° информация Π·Π° вСрсията Π² сСкцията β€ž.commentβ€œ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° GCC ΠΈ Clang.
  • Π’Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ΠΈ x86_64-unknown-linux -охос. Π’Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° основна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ тСстванС, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π°Π»ΠΈ ΠΊΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½.
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π΅ Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° wasm32-wasi-preview1-threads. Π’Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π²Π° гаранция Π·Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€