Rust 1.36 Programming Language Release

diterbitkeun release basa programming sistem Karat 1.36, diadegkeun ku proyék Mozilla. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, sarta nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa ngagunakeun collector sampah atanapi runtime.

Manajemén mémori otomatis Rust ngahémat pamekar tina ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos ngaksés daérah mémori saatos dibébaskeun, ngémutan pointer nol, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, mastikeun assembly jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét kargo, anu ngamungkinkeun anjeun kéngingkeun perpustakaan anu anjeun peryogikeun pikeun program dina hiji klik. Repository dirojong pikeun host perpustakaan crates.io.

utama inovasi:

  • Tret stabilisasi hareup, nu ngagambarkeun nilai nu evaluasi bisa jadi teu acan réngsé bari maké async / .await blok. Nilai Asynchronous anu ditetepkeun nganggo Future ngamungkinkeun pikeun neraskeun ngalaksanakeun padamelan anu mangpaat dina benang, bari sakaligus ngantosan parantosan itungan nilai anu tangtu;
  • Perpustakaan stabil alloc, nu nyadiakeun pointers pinter jeung kumpulan pikeun ngatur nilai memori-dialokasikeun. Alokasi mémori dina std ayeuna nganggo jinisna Hiji hal, nu diékspor ulang ti alloc. Pamakéan misah tina alloc asup akal dina aplikasi nu teu dihijikeun ka std ("#![no_std]"), kitu ogé di perpustakaan dirancang pikeun pamakéan dina program sarupa tanpa std;
  • Pikeun bypass cék pikeun initialization bener tina nilai diajukeun tipe panengah MeureunUnit, nu bisa dipaké gaganti mem :: fungsi uninitialized salaku alternatif aman. Fungsi mem :: uninitialized merenah pikeun gancang nyieun arrays, tapi misleads compiler sabab sigana geus initialized, tapi kanyataanana nilai tetep uninitialized. MaybeUninit ngamungkinkeun anjeun sacara eksplisit nunjukkeun ka kompiler yén nilaina henteu dipikabutuh, pikeun tumut kana paripolah anu teu jelas anu aya hubunganana sareng ieu, sareng ogé ngatur pamariksaan dina program ngaliwatan "maybe_t:" sareng initialization step-by-step, nandaan parantosan na. ngagunakeun ".assume_init ()" panggero. Kalawan mecenghulna MaybeUninit, mem :: fungsi uninitialized geus deprecated sarta henteu dianjurkeun pikeun pamakéan;
  • Téhnik NLL (Non-Lexical Lifetimes), anu ngalegaan sistem pikeun ngarékam umur variabel injeuman, parantos distabilkeun pikeun basa Rust 2015 (mimitina, NLL ngan ukur dirojong ku Rust 2018). Gantina committing lifetimes dina tingkat leksikal, NLL ngalakukeun kitu dina tingkat susunan pointers dina grafik aliran palaksanaan. Pendekatan ieu ngamungkinkeun anjeun pikeun ningkatkeun kualitas mariksa injeuman variabel (injeuman checker) sareng ngamungkinkeun palaksanaan sababaraha jinis kode anu leres, anu dianggo sateuacanna nyababkeun kasalahan. Paripolah anyar ogé ngajadikeun debugging leuwih gampang;
  • palaksanaan anyar arrays associative kaasup HashMap, dumasar kana aplikasi tina struktur Méja Swiss (otomatis dimuat hashbrown :: HashMap, iwal disebutkeun eksplisit disebutkeun, kayaning std:: HashMap, nu dumasar kana SipHash 1-3). Antarbeungeut software tetep sarua, jeung béda noticeable ka pamekar kulub handap pikeun ngaronjat kinerja sarta ngurangan konsumsi memori;
  • Dina kargo manajer pakét ditambahkeun pilihan "--offline", nu ngamungkinkeun operasi tanpa ngakses jaringan, nu ngan bungkusan sindangan dina sistem lokal dipaké nalika masang dependensi. Upami kagumantungan henteu aya dina cache lokal, kasalahan bakal dialungkeun. Pikeun ngamuat katergantungan kana cache lokal sateuacan offline, anjeun tiasa nganggo paréntah "cargo fetch";
  • Ngalaksanakeun kamampuan pikeun nyauran makro "dbg!" nunjukkeun sababaraha argumen;
  • Atribut "const", anu nangtukeun kamungkinan ngagunakeun dina konteks naon waé tinimbang konstanta, dianggo pikeun metode.
    Layout::from_size_align_unchecked,
    mem:: peryogi_drop,
    NonNull :: dangling jeung
    NonNull:: matak;

  • Bagian anyar API parantos dialihkeun kana kategori stabil, kalebet metode anu parantos distabilkeun
    tugas :: Waker, tugas :: Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Baca::read_vectored, Tulis::write_vectored,
    Iterator::disalin,
    BorrowMut (pikeun string) jeung str :: as_mut_ptr.

sumber: opennet.ru

Tambahkeun komentar