Rust 1.47 Programming Language Release

diterbitkeun ngabebaskeun 1.47 tina basa programming sistem karahaan, diadegkeun ku proyék Mozilla. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, jeung nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa pamakéan pamulung runtah и runtime (runtime bisul handap pikeun initialization dasar tur pamaliharaan perpustakaan baku).

Manajemén mémori otomatis Rust ngaleungitkeun kasalahan nalika ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos ngaksés daérah mémori saatos dibébaskeun, dereferences pointer null, overruns panyangga, jsb. Pangatur pakét dikembangkeun pikeun ngadistribusikaeun perpustakaan, mastikeun ngumpul sareng ngatur kagumantungan ku proyék. kargo. Repository dirojong pikeun host perpustakaan crates.io.

utama inovasi:

  • Dilaksanakeun rojongan pikeun jenis susunan sagala ukuran. Saméméhna, alatan henteu mampuh pikeun nangtukeun fungsi generik pikeun sakabéh nilai integer, perpustakaan baku nyadiakeun diwangun-di rojongan tret ngan pikeun arrays nepi ka 32 elemen dina ukuranana (Tret pikeun tiap ukuran anu statically tangtu). Hatur nuhun kana kreasi pungsionalitas generik konstan ("const generics"), éta janten mungkin keur ngartikeun fungsi generik pikeun sagala ukuran Asép Sunandar Sunarya, tapi maranéhna teu acan kaasup kana fitur basa stabil, sanajan aranjeunna dilaksanakeun dina compiler jeung. ayeuna aub dina perpustakaan baku pikeun Tret Asép Sunandar Sunarya ti ukuranana mana wae.

    Salaku conto, konstruksi di handap ieu dina Rust 1.47 bakal nyitak eusi array, sanaos sateuacana bakal nyababkeun kasalahan:

    fn utama() {
    hayu xs = [0; 34];

    println!("{:?}", xs);
    }

  • Disadiakeun kaluaran tina ngambah pondok (backtrace), kaluaran dina kaayaan darurat. Unsur anu teu dipikaresep dina kalolobaan kaayaan, tapi clutter kaluaran jeung ngaganggu perhatian ti ngabalukarkeun primér masalah, anu kaasup ti renik. Pikeun mulangkeun jejak pinuh, anjeun tiasa nganggo variabel lingkungan "RUST_BACKTRACE = pinuh". Contona, pikeun kode

    fn utama() {
    panik!();
    }

    Saméméhna, renik ieu kaluaran dina 23 tahap, tapi ayeuna bakal diréduksi jadi
    3 léngkah anu ngamungkinkeun anjeun langsung nangkep hakekat:

    thread 'utama' panik di 'panik eksplisit', src/main.rs:2:5
    tumpukan backtrace:
    0: std:: panik:: begin_panic
    di /rustc/d…d75a/library/std/src/panicking.rs:497
    1: tempat kaulinan:: utama
    di ./src/main.rs:2
    2: inti :: ops :: fungsi :: FnOnce :: call_once
    di /rustc/d…d75a/library/core/src/ops/function.rs:227

  • The rustc compiler geus diropéa pikeun ngawangun ngagunakeun LVM 11 (Karat ngagunakeun LLVM salaku backend pikeun generasi kode). Dina waktos anu sami, kamampuan ngawangun sareng LLVM anu langkung lami, dugi ka versi 8, dipertahankeun, tapi sacara standar (dina karat-lang / llvm-proyék) ayeuna ngagunakeun LLVM 11. LLVM 11 diperkirakeun dileupaskeun dina poé datang.
  • Dina platform Windows, kompiler rustc nyayogikeun dukungan pikeun ngaktipkeun cék integritas aliran kontrol (Control Flow Guard), diaktipkeun nganggo bandéra "-C control-flow-guard". Dina platform anu sanés, bandéra ieu teu dipaliré ayeuna.
  • Bagian anyar API parantos dialihkeun kana kategori stabil, kalebet distabilkeun
    Ident::new_raw,
    Rentang:: is_empty,
    RangeInclusive:: is_empty,
    Hasil::as_deref,
    Hasil::as_deref_mut,
    Vec::bocor,
    pointer::offset_ti,
    f32::TAU jeung
    f64::TAU.

  • Atribut "const", anu nangtukeun kamungkinan ngagunakeunana dina konteks naon waé tinimbang konstanta, dianggo dina metode:
    • anyar pikeun sakabéh integer lian ti enol;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub na saturating_mul pikeun sakabéh integer;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and is_ascii_control pikeun tipe char jeung u8.
  • Pikeun FreeBSD aub toolkit ti FreeBSD 11.4 (FreeBSD 10 teu ngarojong LLVM 11).

sumber: opennet.ru

Tambahkeun komentar