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

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

I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori nella manipolazione dei puntatori e li proteggono da problematiche derivanti dal lavoro a basso livello con la memoria, come l'accesso a zone di memoria dopo la loro liberazione, la dereferenziazione di puntatori nulli, il superamento dei limiti del buffer, e così via. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, si è sviluppato un gestore di pacchetti chiamato Cargo. Le librerie sono ospitate nel repository crates.io.

La gestione sicura della memoria in Rust Γ¨ garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietΓ  degli oggetti, la gestione della durata degli oggetti (scope) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust offre anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita e offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

NovitΓ  principali:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ API std::thread::scope, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² привязкС ΠΊ области видимости (Scoped threads). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ€Π°Π½Π΅Π΅ доступных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½ΠΎΠ²Ρ‹ΠΉ API std::thread::scope допускаСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ заимствованных (borrowing) нСстатичСских Π΄Π°Π½Π½Ρ‹Ρ…, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, создаваСмыС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ классичСского API std::thread::spawn, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π²Π»Π°Π΄Π΅Ρ‚ΡŒ всСми ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ заимствованныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. API std::thread::scope Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹ Π΄ΠΎ возвращСния Π΄Π°Π½Π½Ρ‹Ρ…, обСспСчивая Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности для ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° заимствования.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹-обвязки для Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов β€” BorrowedFd ΠΈ OwnedFd, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ заимствованиС ΠΈ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅. Π’ΠΈΠΏΡ‹ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Β«#[repr(transparent)]Β», Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΎ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π‘ΠΈ-привязках с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ владСния.
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° Condvar::new, Mutex::new ΠΈ RwLock::new Π² контСкстС констант для создания Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… статичСских Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Mutex, RwLock ΠΈ Condvar Π±Π΅Π· примСнСния ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° lazy_static.
  • Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° fn foo<T>(value: T, f: impl Copy) Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ использованиС синтаксиса Π²ΠΈΠ΄Π° Β«foo::<u32>(3, 3)Β», явно указывая Ρ‚ΠΈΠΏ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°.
  • Π—Π°Π²Π΅Ρ€ΡˆΡ‘Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° использованиС Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ NLL (Non-Lexical Lifetimes) для выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с заимствованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. NLL осущСствляСт ΡƒΡ‡Ρ‘Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π°Π±ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π³Ρ€Π°Ρ„Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния, Ρ‡Ρ‚ΠΎ позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ качСство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ заимствования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (borrow checker) ΠΈ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, использованиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибки. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° старого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, использовавшСго привязку Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ Π½Π° лСксичСском ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· rustc, Π° использованиС Π½ΠΎΠ²ΠΎΠ³ΠΎ NLL Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ повсСмСстно.
  • Una nuova serie di API Γ¨ stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • array::from_fn
    • Box::into_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Path::try_exists
    • Ref::filter_map
    • RefMut::filter_map
    • NonNull::<[T]>::len
    • ToOwned::clone_into
    • Ipv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::BorrowedFd<β€˜fd>
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::BorrowedHandle

      Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server πŸ”₯ Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster