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:

  • Sifat stabil Future, sing nuduhake nilai sing evaluasi bisa uga durung rampung nalika nggunakake blok async / .await. Nilai bedo sing ditetepake nggunakake Future ndadekake iku bisa kanggo terus nglakokakΓ© karya migunani ing thread, nalika bebarengan nunggu completion saka nilai tartamtu;
  • Pustaka stabil alloc, sing nyedhiyakake pitunjuk lan koleksi cerdas kanggo ngatur nilai sing diparengake memori. Alokasi memori ing std saiki nggunakake jinis kasebut Vec, sing diekspor maneh saka alloc. Panggunaan kapisah saka alloc ndadekake pangertΓ¨n ing aplikasi sing ora disambungake menyang std ("#![no_std]"), uga ing perpustakaan sing dirancang kanggo digunakake ing program sing padha tanpa std;
  • Kanggo lulus mriksa kanggo initialization bener saka nilai ngajokaken jinis penengah MungkinUnit, sing bisa digunakake tinimbang fungsi mem :: uninitialized minangka alternatif sing luwih aman. Fungsi mem :: uninitialized trep kanggo nggawe susunan cepet, nanging mislead compiler amarga katon wis initialized, nanging ing kasunyatan, Nilai tetep uninitialized. MaybeUninit ngidini sampeyan kanthi jelas nuduhake menyang kompiler yen nilai kasebut ora dikawruhi, kanggo nganggep prilaku sing ora bisa ditemtokake sing ana gandhengane, lan uga ngatur pamriksa ing program liwat "maybe_t:" lan initialization langkah-langkah, menehi tandha rampung. nggunakake ".assume_init ()" telpon. Kanthi tekane MaybeUninit, fungsi mem :: uninitialized wis ora digunakake lan ora dianjurake kanggo nggunakake;
  • Teknik NLL (Non-Lexical Lifetimes), sing ngembangake sistem kanggo ngrekam umur variabel sing dipinjam, wis distabilake kanggo basa Rust 2015 (mulane, NLL mung didhukung dening Rust 2018). Tinimbang nglakoni urip ing tingkat leksikal, NLL nindakake ing tingkat set penunjuk ing grafik aliran eksekusi. Pendekatan iki ngidini sampeyan nambah kualitas mriksa peminjaman variabel (borrow checker) lan ngidini eksekusi sawetara jinis kode sing bener, panggunaan sing sadurunge nyebabake kesalahan. Prilaku anyar uga nggawe debugging luwih gampang;
  • Implementasine anyar saka susunan asosiatif kalebu Hashmap, adhedhasar aplikasi saka struktur Tabel Swiss (otomatis dimuat hashbrown :: HashMap, kajaba kasebut kanthi tegas, kayata std :: HashMap, sing adhedhasar SipHash 1-3). Antarmuka lunak tetep padha, lan beda ngelingke kanggo pangembang godhok kanggo tambah kinerja lan suda konsumsi memori;
  • Ing kargo manager paket ditambahake opsi "--offline", sing mbisakake operasi tanpa ngakses jaringan, kang mung paket cache ing sistem lokal digunakake nalika nginstal dependensi. Yen katergantungan ora ana ing cache lokal, kesalahan bakal dibuwang. Kanggo preload dependensi menyang cache lokal sadurunge offline, sampeyan bisa nggunakake printah "cargo fetch";
  • Dilaksanakake kemampuan kanggo nelpon makro "dbg!" nuduhake sawetara argumen;
  • Atribut "const", sing nemtokake kemungkinan nggunakake ing konteks apa wae tinimbang konstanta, digunakake kanggo metode
    Tata letak::from_size_align_unchecked,
    mem::needs_drop,
    NonNull:: dangling lan
    NonNull::cast;

  • Bagean anyar saka API wis ditransfer menyang kategori stabil, kalebu cara sing wis stabil
    tugas::Waker, tugas::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Waca::waca_vectored, Tulis::write_vectored,
    Iterator:: disalin,
    BorrowMut (kanggo strings) lan str :: as_mut_ptr.

Source: opennet.ru

Add a comment