Keluaran bahasa pengaturcaraan Rust 1.47

Keluaran 1.47 bahasa pengaturcaraan sistem Rust, yang diasaskan oleh projek Mozilla, telah diterbitkan. Bahasa ini memfokuskan pada keselamatan ingatan, menyediakan pengurusan memori automatik dan menyediakan cara untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah atau masa jalan (masa jalan dikurangkan 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. Untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan, projek ini sedang membangunkan pengurus pakej Kargo. Repositori crates.io disokong untuk mengehos perpustakaan.

Inovasi utama:

  • Sokongan yang dilaksanakan untuk ciri untuk tatasusunan saiz sewenang-wenangnya. 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 const, ia menjadi mungkin untuk mentakrifkan fungsi generik untuk sebarang saiz tatasusunan, tetapi ia belum termasuk dalam ciri stabil bahasa, walaupun ia dilaksanakan dalam pengkompil dan kini digunakan dalam perpustakaan standard untuk jenis tatasusunan dari 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 peringkat, membolehkan anda 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 (Rust menggunakan LLVM sebagai backend untuk penjanaan kod). Pada masa yang sama, keupayaan untuk membina dengan LLVM lama, sehingga versi 8, dikekalkan, tetapi secara lalai (dalam rust-lang/llvm-project) LLVM 11 kini digunakan. Pengeluaran LLVM 11 dijangka akan datang hari.
  • 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 Ident::new_raw yang distabilkan, Julat::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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, kit alat daripada FreeBSD 11.4 digunakan (FreeBSD 10 tidak menyokong LLVM 11).

Diambil daripada opennet.ru

Sumber: linux.org.ru

Tambah komen