Basa pemrograman Rust 1.39 release

diterbitake release basa pemrograman sistem Karat 1.39, 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:

  • Stabil sintaks pemrograman bedo anyar adhedhasar fungsi "async", pamblokiran async move {... }, lan operator ".await", sing nggampangake nulis pawang sing ora ngalangi aliran printah utama. Dibandhingake karo API sing ditawakake sadurunge kanggo bedo I / O, async / .await mbangun prasaja mangertos, Highly diwaca, lan ngijini sampeyan kanggo ngleksanakake interaksi bedo Komplek nggunakake Techniques kontrol aliran menowo adhedhasar puteran, statements kondisional, lan pangecualian.

    Sintaks Async-await ngidini sampeyan nggawe fungsi sing bisa ngaso eksekusi, bali kontrol menyang utas utama, lan banjur nerusake eksekusi saka ngendi padha mungkasi. Contone, jeda kuwi dibutuhake nalika ngolah I / O, ing ngendi karya liyane bisa ditindakake nalika nunggu potongan data sabanjure teka. Fungsi lan blok sing ditetepake kanthi "async fn" lan "async move" ngasilake sipat Future, sing nemtokake perwakilan komputasi asinkron sing ditundha. Sampeyan bisa langsung miwiti pitungan sing ditundha lan entuk asil nggunakake operator ".await". Ora ana tumindak sing dileksanakake utawa wis direncanakake nganti .await diarani, ngidini konstruksi nested Komplek bisa digawe tanpa overhead tambahan.

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    ayo asil: u32 = mangsa.ngenteni;

  • Stabil "#![fitur(bind_by_move_pattern_guards)]", ngidini panggunaan variabel kanthi jinis binding "obah"ing cithakan lan gunakake referensi kanggo variabel kasebut ing bagean "yen" saka ekspresi "match". Contone, konstruksi ing ngisor iki saiki diidini:

    fn utama() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    cocog array {
    nomer
    yen nums.iter().sum::() == 10

    => {
    drop(angka);
    }
    _ => ora bisa digayuh!(),
    }
    }

  • Indikasi diijini atribut nalika nemtokake paramΓ¨ter fungsi, penutupan, lan penunjuk fungsi. Atribut kompilasi kondisional (cfg, cfg_attr) sing ngontrol diagnostik liwat lint (ngidini, ngelingake, nolak lan nglarang) lan atribut panggilan makro tambahan didhukung.

    fn len(
    #[cfg(windows)] slice: &[u16], // gunakake parameter ing Windows
    #[cfg(not(windows))] slice: &[u8], // digunakake ing OS liyane
    ) -> gunakake {
    slice.len()
    }

  • Bebaya babagan masalah sing diidentifikasi nalika mriksa peminjaman variabel (pemeriksa pinjaman) nggunakake teknik NLL (Non-Lexical Lifetimes), dijarwakake menyang kategori kesalahan fatal. Elinga yen sistem verifikasi adhedhasar mekanisme anyar kanggo nganggep umur variabel sing dipinjam bisa ngenali sawetara masalah sing ora diweruhi dening kode verifikasi lawas. Amarga output kesalahan kanggo mriksa kasebut bisa mengaruhi kompatibilitas karo kode sing digunakake sadurunge, bebaya ditanggepi tinimbang kesalahan. Bebaya saiki wis diganti karo kesalahan nalika mlaku ing mode Rust 2018. Ing rilis sabanjure, output kesalahan uga bakal dileksanakake ing mode Rust 2015, sing pungkasane bakal nyingkirake pemeriksa utang lawas;
  • Atribut "const", sing nemtokake kemungkinan nggunakake ing konteks apa wae tinimbang konstanta, digunakake kanggo fungsi Vec :: new, String :: new, LinkedList :: new, str :: len, [T] :: len , str::as_bytes,
    abs, wrapping_abs lan overflowing_abs;

  • Bagean anyar saka API wis ditransfer menyang kategori stabil, kalebu cara sing wis stabil
    Pin::ke_inner, Instant::checked_duration_since and Instant::saturating_duration_since;

  • Manajer paket kargo saiki nduweni kemampuan kanggo nggunakake ekstensi ".toml" kanggo file konfigurasi. Ditambahake dhukungan awal kanggo mbangun perpustakaan standar langsung saka Cargo. Nambahake gendera "--workspace", ngganti gendera "--all" sing kontroversial. Bidang anyar wis ditambahake menyang metadata "nerbitakΓ©", sing ngidini sampeyan nerbitake dependensi kanthi nemtokake tag git lan nomer versi. Opsi tes sing ditambahake "-Ztimings" kanggo ngasilake laporan HTML babagan wektu eksekusi saka macem-macem tahapan kompilasi.
  • Ing compiler rustc, pesen diagnostik kalebu trimming buntut kode sing ora pas menyang terminal. Nyedhiyakake dhukungan tingkat katelu kanggo platform target
    i686-unknown-uefi lan sparc64-unknown-openbsd. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis lan publikasi bangunan resmi.

Source: opennet.ru

Add a comment