Basa pemrograman Rust 1.40 release

diterbitake release basa pemrograman sistem Karat 1.40, didegaké déning proyèk Mozilla. Basa kasebut fokus ing safety memori, nyedhiyakake manajemen memori otomatis, lan nyedhiyakake alat kanggo nggayuh paralelisme tugas sing dhuwur tanpa nggunakake pengumpul sampah lan 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:

  • Nambahake kemampuan kanggo menehi tandha struktur (struct) lan enumerasi (enum karo blok Varian) nggunakake atribut "#[ora lengkap]", kang Nanging ngidini ing mangsa, nambah lapangan anyar lan opsi kanggo struktur lan enumerasi ngumumakΓ©. Contone, pangembang modul sing duwe struktur karo lapangan sing diumumake umum bisa nggunakake "#[non_exhaustive]" kanggo menehi tandha struktur sing bisa ditambahake kolom anyar ing mangsa ngarep. Nganti saiki, ing kahanan iki, pangembang dipeksa milih antarane ngumumake lapangan kanthi pribadi lan ngiket dhaptar lapangan sing ora bisa diganti. Atribut anyar mbusak watesan iki lan ngidini sampeyan nambah kolom anyar ing mangsa ngarep tanpa risiko ngrusak kode eksternal sing wis disusun sadurunge. Ing paket peti, nalika pilihan sing cocog ing bagean "cocok", definisi eksplisit saka topeng "_ => {...}" dibutuhake, nyakup lapangan sing bakal teka, yen ora, kesalahan bakal ditampilake nalika nambah kolom anyar.
  • Ditambahake kemampuan kanggo nelpon macro mac prosedural!() ing konteks jinis. Contone, sampeyan saiki bisa nulis "jinis Foo = expand_to_type! (bar);" yen "expand_to_type" minangka makro prosedural.
  • Ing blok "eksternal { ... }". ditambahake kemampuan kanggo nggunakake makro prosedural lan atribut, kalebu makro "bang!()", contone:

    macro_rules! make_item { ($name:ident) => {fn $jeneng(); }}

    njaba {
    gawe_item!(alfa);
    make_item!(beta);
    }

    njaba "C" {
    #[makro_identitas_ku] fn foo();
    }

  • Ing macro dileksanakake kemampuan kanggo ngasilake unsur "macro_rules!". Ngasilake "macro_rules!" bisa uga ing makro kaya fungsi ("mac! ()") lan ing makro ing wangun atribut ("#[mac]").
  • Ing $m: unsur pemetaan meta ditambahake dhukungan kanggo nilai enumerasi token sing sewenang-wenang ("[TOKEN_STREAM]", "{TOKEN_STREAM}" lan "(TOKEN_STREAM)"), contone:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • Ing mode Rust 2015, output kesalahan diaktifake kanggo masalah sing diidentifikasi nalika mriksa peminjaman variabel (pemeriksa pinjaman) nggunakake teknik NLL (Non-Lexical Lifetimes). Sadurunge, bebaya diganti karo kesalahan nalika mlaku ing mode Rust 2018.
    Sawise pangowahan ditambahi menyang mode Rust 2015, pangembang bisa pungkasane nyingkirake saka mriksa utang lawas.

    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.

  • Atribut "const", sing nemtokake kamungkinan nggunakake ing sembarang konteks tinimbang konstanta, digunakake kanggo is_power_of_two fungsi (kanggo unsigned integer).
  • A bagean anyar saka API wis dipindhah menyang kategori stabil, kalebu todo! () makro lan irisan :: baleni, mem :: njupuk, BTreeMap :: get_key_value, HashMap :: get_key_value, cara wis stabil.
    Pilihan :: as_deref, Pilihan :: as_deref_mut, Pilihan :: flatten, UdpSocket :: peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, f32}:: saka_be_bytes, {f64,f32}::saka_le_bytes, lan {f64,f32}::saka_ne_bytes.

  • Ing kargo manager paket
    dileksanakake caching bebaya compiler ing disk. Nambahake opsi "metadata kargo" menyang printah "metadata kargo".--filter-platform" kanggo nuduhake mung paket sing kaiket menyang platform target sing ditemtokake ing kolom resolusi dependensi. Nambahake opsi konfigurasi http.ssl-versi kanggo nemtokake versi TLS sing bener.
    Nambahake kemampuan kanggo nerbitake bagean "dependensi dev" tanpa nemtokake tombol "versi".

  • Kompiler rustc nyedhiyakake dhukungan tingkat katelu kanggo platform target thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 lan mips64el-unknown-linux-muslabi64. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis lan publikasi bangunan resmi.

Source: opennet.ru

Add a comment