Выпуск языка программирования Rust 1.51

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· языка систСмного программирования Rust 1.51, основанного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Mozilla, Π½ΠΎ Π½Ρ‹Π½Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΏΠΎΠΊΡ€ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ нСзависимой нСкоммСрчСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Rust Foundation. Π―Π·Ρ‹ΠΊ сфокусирован Π½Π° бСзопасной Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, обСспСчиваСт автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ прСдоставляСт срСдства для достиТСния высокого ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ…ΠΎΠ΄ΡΡΡŒ Π±Π΅Π· использования сборщика мусора ΠΈ runtime (runtime сводится ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Rust избавляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ указатСлями ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Ρ‚.ΠΏ. Для распространСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, обСспСчСния сборки ΠΈ управлСния зависимостями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ развиваСтся ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo. Для размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ поддСрТиваСтся Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ crates.io.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°:

  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, связанная с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ константных Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² («const generics»), ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° статус минимально ТизнСспособного ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° (MVP), Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ свСт Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ для постоянных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚.Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ постоянных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° Π½Π΅ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π½Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ. Указанная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, ΠΈ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ создании Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ для массивов любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π΅Π· нСобходимости создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ отсутствиС Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

    Начиная с Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ выпуска, для массивов с Ρ‚ΠΈΠΏΠΎΠΌ «[T; N]» (Ρ‚ΠΈΠΏ T ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ N) прСдоставлСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ значСния с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ, Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Ρ‚ΠΈΠΏΡ‹ struct ΠΈ enum ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ). ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для использования массива, Π½Π΅ привязанного ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ: struct Array<T, const LENGTH: usize> { // ^^^^^^^^^^^^^^^^^^^ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ константного Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° list: [T; LENGTH] // ^^^^^^ Π΅Π³ΠΎ использованиС }

    ΠŸΡ€ΠΈ фактичСском использовании c этим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ «Array<u8, 32>» компилятор сгСнСрируСт ΠΌΠΎΠ½ΠΎΠΌΠΎΡ€Ρ„Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Array: struct Array<u8, 32> { list: [u8; 32] }

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ основанный Π½Π° константных Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… API std::array::IntoIter, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ для любого массива ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ: fn main() { let array = [1, 2, 3, 4, 5]; // РаньшС для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .iter() for item in array.iter().copied() { println!(«{}», item); } // Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ for item in std::array::IntoIter::new(array) { println!(«{}», item); } }
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ cargo Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ поля resolver Π² Cargo.toml, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ опрСдСлитСля доступных возмоТностСй (feature resolver). Новая вСрсия опрСдСлитСля ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ объСдинСния возмоТностСй зависимостСй, пСрСчисляСмых Π² сСкции «[features]», Ρ‚Π°ΠΌ, Π³Π΄Π΅ это нСумСстно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ зависимости, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² сборочных скриптах ΠΈ макросах, Π½ΠΎ ΠΏΡ€ΠΈ использовании нСстандартной возмоТности Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ исполняСмом Ρ„Π°ΠΉΠ»Π΅.

    Π”ΠΎ сих ΠΏΠΎΡ€ возмоТности ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΠΎΠ³ΠΎ нСсколько Ρ€Π°Π· Π² Π³Ρ€Π°Ρ„Π΅ зависимости, объСдинялись. НапримСр, Ссли ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ foo, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ возмоТности A ΠΈ B, ΠΈ этот ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… bar ΠΈ baz, ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ bar зависит ΠΎΡ‚ foo с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ A, Π° baz ΠΎΡ‚ foo с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ B, Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ cargo ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ эти возмоТности ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ foo с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ возмоТностСй A ΠΈ B. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Π°Ρ ΠΈΠ·-Π·Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ зависимости ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСсовмСстимой с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмой, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ осущСствляСтся итоговая сборка. НапримСр, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ foo с «#![no_std]» Π² исполняСмом Ρ„Π°ΠΉΠ»Π΅, собираСмом с «#![no_std]», ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ foo с «std» Π²ΠΎ врСмя сборки Π² build.rs. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ resolver=»2″ Π² Cargo.toml ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ попытаСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚, раздСляя dev-, host- ΠΈ target-зависимости.

  • Π’ cargo Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° опция split-debuginfo, задаваСмая Π² сСкции «[profile]» ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π»Π°Π³ «-Csplit-debuginfo=unpacked» Π² rustc, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сохранСния ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ нСобходимости Π²Ρ‹Π·ΠΎΠ²Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ dsymutil ΠΈ сущСствСнно ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ процСсс сборки с ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π² macOS.
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ макосы «ptr::addr_of!» ΠΈ «ptr::addr_of_mut!», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ raw-ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для Π½Π΅Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. use std::ptr; #[repr(packed)] struct Packed { f1: u8, f2: u16, } let packed = Packed { f1: 1, f2: 2 }; // &packed.f2 создаст Π½Π΅Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, приводящий ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ повСдСнию let raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
  • Π’ разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° новая порция API, Π² Ρ‚ΠΎΠΌ числС стабилизированы ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:
    • Arc::decrement_strong_count
    • Arc::increment_strong_count
    • Once::call_once_force
    • Peekable::next_if_eq
    • Peekable::next_if
    • Seek::stream_position
    • array::IntoIter
    • panic::panic_any
    • ptr::addr_of!
    • ptr::addr_of_mut!
    • slice::fill_with
    • slice::split_inclusive_mut
    • slice::split_inclusive
    • slice::strip_prefix
    • slice::strip_suffix
    • str::split_inclusive
    • sync::OnceState
    • task::Wake
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 ΠΈ aarch64_be-unknown-linux-gnu_ilp32. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования, ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТности сборки ΠΊΠΎΠ΄Π°.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ