Basa pemrograman Rust 1.36 release

diterbitake release basa pemrograman sistem Karat 1.36, didegaké déning proyèk Mozilla. Basa fokus ing safety memori, menehi Manajemen memori otomatis, lan menehi liya kanggo entuk podo tugas dhuwur tanpa nggunakake kolektor uwuh utawa runtime.

Manajemen memori otomatis Rust mbebasake pangembang saka manipulasi pointer lan nglindhungi saka masalah sing muncul saka manipulasi memori tingkat rendah, kayata akses memori sawise-free, dereferensi null pointer, overruns buffer, lan liya-liyane. Pangatur paket dikembangake kanggo nyebarake perpustakaan, mesthekake perakitan lan ngatur dependensi dening proyek kasebut. Cargo, ngidini sampeyan entuk perpustakaan sing dibutuhake kanggo program ing siji klik. Repositori didhukung kanggo dadi tuan rumah perpustakaan peti.io.

Utama inovasi:

  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΈΠΏΠ°ΠΆ (trait) Future, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, вычислСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ Π² процСссС использования Π±Π»ΠΎΠΊΠΎΠ² async / .await. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Future асинхронныС значСния Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ оТидая Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ вычислСний ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ значСния;
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° alloc, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΡƒΠΌΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ для управлСния Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² памяти значСниями. Для выдСлСния памяти Π² std Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ примСняСтся Ρ‚ΠΈΠΏ Vec, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠ· alloc. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС alloc ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π² прилоТСниях Π½Π΅ привязанных ΠΊ std (Β«#![no_std]Β»), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, рассчитанных Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π±Π΅Π· std;
  • Для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ngajokaken ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ MungkinUnit, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mem::uninitialized, Π² качСствС Π΅Ρ‘ Π±ΠΎΠ»Π΅Π΅ бСзопасной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹. Ѐункция mem::uninitialized ΡƒΠ΄ΠΎΠ±Π½Π° для быстрого создания массивов, Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ компилятор Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ создаёт Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ остаётся Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. MaybeUninit позволяСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, ΡƒΡ‡Π΅ΡΡ‚ΡŒ связанноС с этим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· Β«maybe_t:Β» ΠΈ ΠΏΠΎΡΡ‚Π°ΠΏΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Π΅Ρ‘ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Β«.assume_init()Β». Π‘ появлСниСм MaybeUninit функция mem::uninitialized ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° Π² разряд ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΈ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π° ΠΊ использованию;
  • Π’Π΅Ρ…Π½ΠΈΠΊΠ° NLL (Non-Lexical Lifetimes), Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ²ΡˆΠ°Ρ систСму ΡƒΡ‡Ρ‘Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ заимствованных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, стабилизирована для языка Rust 2015 (ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ NLL поддСрТивался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Rust 2018). ВмСсто привязки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ Π½Π° лСксичСском ΡƒΡ€ΠΎΠ²Π½Π΅, NLL осущСствляСт ΡƒΡ‡Ρ‘Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π°Π±ΠΎΡ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π³Ρ€Π°Ρ„Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ качСство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ заимствования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (borrow checker) ΠΈ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, использованиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибки. НовоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ;
  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Π° новая рСализация ассоциативных массивов Hashmap, основанная Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры Swiss Table (автоматичСски загруТаСтся hashbrown::HashMap, Ссли явно Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, std::HashMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ основан Π½Π° SipHash 1-3). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс остался ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ, Π° Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ отличия сводятся ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ сниТСнию потрСблСния памяти;
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ cargo ditambahake опция Β«β€”offlineΒ», Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Π· обращСния ΠΏΠΎ сСти, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈ установкС зависимостСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² локальной систСмС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Если Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ отсутствуСт Π² локальном кэшС, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° ошибка. Для ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ зависимостСй Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ кэш ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π² offline ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«cargo fetchΒ»;
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° макроса Β«dbg!Β» с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²;
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Β«constΒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::dangling ΠΈ
    NonNull::cast;

  • Bagean anyar saka API wis ditransfer menyang kategori stabil, kalebu cara sing wis stabil
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (для строк) ΠΈ str::as_mut_ptr.

Source: opennet.ru

Add a comment