Keluaran bahasa pengaturcaraan Rust 1.47

diterbitkan mengeluarkan 1.47 bahasa pengaturcaraan sistem Rust, diasaskan oleh projek Mozilla. Bahasa ini memfokuskan pada keselamatan ingatan, menyediakan pengurusan memori automatik, dan menyediakan cara untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pemungut sampah ΠΈ runtime (masa jalanan bermuara kepada permulaan asas dan penyelenggaraan perpustakaan standard).

Pengurusan memori automatik Rust menghapuskan ralat semasa memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, penolakan penunjuk nol, overrun penimbal, dsb. Pengurus pakej sedang dibangunkan untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan oleh projek. Cargo. Repositori disokong untuk mengehos perpustakaan crates.io.

Utama inovasi:

  • Sokongan yang dilaksanakan untuk jenis tatasusunan sebarang saiz. Sebelum ini, disebabkan ketidakupayaan untuk mentakrifkan fungsi generik untuk semua nilai integer, perpustakaan standard menyediakan sokongan ciri terbina dalam hanya untuk tatasusunan bersaiz sehingga 32 elemen (ciri untuk setiap saiz ditakrifkan secara statik). Terima kasih kepada penciptaan fungsi generik malar ("generik const"), ia menjadi mungkin untuk mentakrifkan fungsi generik untuk sebarang saiz tatasusunan, tetapi ia belum termasuk dalam ciri bahasa yang stabil, walaupun ia dilaksanakan dalam pengkompil dan sekarang terbabit dalam perpustakaan standard untuk ciri tatasusunan dalam sebarang saiz.

    Sebagai contoh, binaan berikut dalam Rust 1.47 akan mencetak kandungan tatasusunan, walaupun sebelum ini ia akan mengakibatkan ralat:

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

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

  • Disediakan output jejak yang lebih pendek (jejak belakang), output dalam situasi kecemasan. Elemen yang tidak diminati dalam kebanyakan situasi, tetapi mengacaukan output dan mengalih perhatian perhatian daripada punca utama masalah, dikecualikan daripada jejak. Untuk mengembalikan jejak penuh, anda boleh menggunakan pembolehubah persekitaran "RUST_BACKTRACE=penuh". Sebagai contoh, untuk kod

    fn utama() {
    panik!();
    }

    Sebelum ini, jejak dikeluarkan dalam 23 peringkat, tetapi kini ia akan dikurangkan kepada
    3 langkah yang membolehkan anda untuk segera memahami intipati:

    benang 'utama' panik dengan 'panik eksplisit', src/main.rs:2:5
    timbunan jejak belakang:
    0: std::panic::begin_panic
    di /rustc/d…d75a/library/std/src/panicking.rs:497
    1: taman permainan:: utama
    di ./src/main.rs:2
    2: teras::ops::function::FnOnce::call_once
    di /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Pengkompil rustc telah dikemas kini untuk membina menggunakan LLVM 11 (Karat kegunaan LLVM sebagai backend untuk penjanaan kod). Pada masa yang sama, keupayaan untuk membina dengan LLVM yang lebih lama, sehingga versi 8, dikekalkan, tetapi secara lalai (dalam rust-lang/llvm-project) kini menggunakan LLVM 11. LLVM 11 dijangka akan dikeluarkan dalam beberapa hari akan datang.
  • Pada platform Windows, pengkompil rustc menyediakan sokongan untuk membolehkan semakan integriti aliran kawalan (Pengawal Aliran Kawalan), diaktifkan menggunakan bendera "-C control-flow-guard". Pada platform lain bendera ini diabaikan buat masa ini.
  • Bahagian baharu API telah dipindahkan ke kategori stabil, termasuk distabilkan
    Ident::new_raw,
    Julat::is_empty,
    RangeInclusive::is_empty,
    Keputusan::as_deref,
    Keputusan::as_deref_mut,
    Vec::bocor,
    penunjuk::offset_from,
    f32::TAU dan
    f64::TAU.

  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam kaedah:
    • baharu untuk semua integer selain sifar;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub dan saturating_mul untuk semua integer;
    • ialah_ascii_alphabetic, is_ascii_huruf besar, is_ascii_huruf kecil, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace dan is_ascii_control untuk jenis char dan u8.
  • Untuk FreeBSD terbabit toolkit daripada FreeBSD 11.4 (FreeBSD 10 tidak menyokong LLVM 11).

Sumber: opennet.ru

Tambah komen