Rust 1.40 Programming Language Release

diterbitkeun release basa programming sistem Karat 1.40, diadegkeun ku proyék Mozilla. Basa éta museurkeun kana kaamanan mémori, nyayogikeun manajemén mémori otomatis, sareng nyayogikeun alat pikeun ngahontal paralelisme tugas anu luhur tanpa nganggo tukang sampah sareng 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:

  • Ditambahkeun kamampuan pikeun nandaan struktur (struct) sareng enumerations (enum sareng blok Varian) nganggo atribut "#[teu_tuntas]", anu Hal ieu ngamungkinkeun dina mangsa nu bakal datang, tambahkeun widang anyar jeung pilihan kana struktur jeung enumerations dinyatakeun. Contona, pamekar modul nu mibanda struktur jeung widang dinyatakeun umum bisa make "#[non_exhaustive]" pikeun nyirian struktur nu bisa mibanda widang anyar ditambahkeun dina mangsa nu bakal datang. Dugi ka ayeuna, dina kaayaan sapertos kitu, pamekar kapaksa milih antara nyatakeun widang sacara pribadi sareng ngariung kana daptar widang anu teu tiasa dirobih. Atribut anyar ngaleungitkeun watesan ieu sareng ngamungkinkeun anjeun pikeun nambahkeun widang anyar dina mangsa nu bakal datang tanpa résiko megatkeun kode éksternal anu disusun saméméhna. Dina bungkusan peti, nalika nyocogkeun pilihan dina bagian "cocok", hiji harti eksplisit tina topeng "_ => {...}" diperlukeun, ngawengku mungkin widang hareup, disebutkeun kasalahan bakal dipintonkeun nalika nambahkeun widang anyar.
  • Ditambahkeun kamampuhan pikeun nelepon macro mac prosedural!() dina konteks tipe. Contona, anjeun ayeuna bisa nulis "type Foo = expand_to_type! (bar);" lamun "expand_to_type" mangrupakeun makro prosedural.
  • Dina blok "jaba { ... }". ditambahkeun kamampuan ngagunakeun makro prosedural sareng atribut, kalebet makro "bang!()", contona:

    macro_rules! make_item { ($ngaran:identitas) => {fn $ngaran(); }}

    jaba {
    make_item!(alfa);
    make_item!(beta);
    }

    jaba "C" {
    #[abdi_identitas_makro] fn foo ();
    }

  • Dina makro dilaksanakeun kamampuhan pikeun ngahasilkeun "macro_rules!" elemen. Ngahasilkeun "macro_rules!" mungkin duanana dina fungsi-kawas macros ("Mac! ()") jeung di macros dina bentuk atribut ("#[mac]").
  • Dina $m: elemen pemetaan meta ditambahkeun rojongan pikeun nilai enumerasi token sawenang ("[TOKEN_STREAM]", "{TOKEN_STREAM}" jeung "(TOKEN_STREAM)"), contona:

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

  • Dina modeu Rust 2015, kaluaran kasalahan diaktipkeun pikeun masalah anu diidentifikasi nalika mariksa injeuman variabel (pemeriksa pinjaman) nganggo téknik NLL (Non-Lexical Lifetimes). Saméméhna, warnings diganti ku kasalahan nalika ngajalankeun dina modeu Rust 2018.
    Saatos parobahanana diperpanjang ka modeu Rust 2015, pamekar tiasa tungtungna ngaleungitkeun ti cék injeuman heubeul.

    Hayu urang ngelingan yén sistem verifikasi dumasar kana mékanisme anyar pikeun nyokot kana akun umur variabel injeuman ngamungkinkeun pikeun ngaidentipikasi sababaraha masalah nu indit unnoticed ku kode verifikasi heubeul. Kusabab kaluaran kasalahan pikeun pamariksaan sapertos kitu tiasa mangaruhan kasaluyuan sareng kode anu dianggo sateuacana, peringatan mimitina dikaluarkeun tibatan kasalahan.

  • Atribut "const", nu nangtukeun kamungkinan ngagunakeun eta dina sagala konteks tinimbang konstanta, dipaké pikeun is_power_of_two fungsi (pikeun integer unsigned).
  • Bagian anyar tina API geus dipindahkeun ka kategori stabil, kaasup todo! () makro jeung keureutan :: ulang, mem :: nyokot, BTreeMap :: get_key_value, HashMap :: get_key_value, métode geus stabilized.
    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}::from_be_bytes, {f64,f32}::from_le_bytes, jeung {f64,f32}::from_ne_bytes.

  • Dina kargo manajer pakét
    dilaksanakeun cache compiler warnings on disk. Pilihan "metadata kargo" parantos ditambahkeun kana paréntah "metadata kargo".--filter-platform"pikeun nembongkeun ukur bungkusan kabeungkeut kana platform target nu tangtu dina kolom resolusi kagumantungan. Katambah pilihan konfigurasi http.ssl-versi pikeun nangtukeun versi TLS valid.
    Ditambahkeun kamampuan pikeun nyebarkeun bagian "dev-katergantungan" tanpa nangtukeun konci "versi".

  • Kompiler rustc nyayogikeun dukungan tingkat katilu pikeun platform target thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 sareng mips64el-unknown-linux-muslabi64. Tingkat katilu ngalibatkeun dukungan dasar, tapi tanpa tés otomatis sareng publikasi wangunan resmi.

sumber: opennet.ru

Tambahkeun komentar