Keluaran bahasa pengaturcaraan Rust 1.42

diterbitkan keluaran bahasa pengaturcaraan sistem Karat 1.42, diasaskan oleh projek Mozilla. Bahasa ini memberi tumpuan kepada keselamatan ingatan, menyediakan pengurusan memori automatik dan menyediakan alatan untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah dan runtime.

Pengurusan memori automatik Rust menyelamatkan pembangun daripada memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan, projek membangunkan pengurus pakej Cargo, yang membolehkan anda mendapatkan perpustakaan yang anda perlukan untuk program dalam satu klik. Repositori disokong untuk mengehos perpustakaan crates.io.

Utama inovasi:

  • Ditambah sokongan untuk templat untuk memadankan bahagian kepingan (tatasusunan dinamik, kepingan). Sebelum ini, padanan tepat dibenarkan, tetapi kini adalah mungkin untuk menggunakan binaan bertanda ".." untuk menutup elemen yang tinggal dalam tatasusunan. Sebagai contoh:

    fn foo(perkataan: &[&str]) {
    padankan perkataan {

    // menyemak elemen permulaan tatasusunan dan mengabaikan
    unsur yang mengikutinya
    ["Hello", "World", "!", ..] => println!("Hello World!"),

    // menyemak dua elemen pertama "Foo" dan "Bar", dan selebihnya tidak penting
    ["Foo", "Bar", ..] => println!("Baz"),

    // abaikan segala-galanya, tetapi elemen terakhir mestilah "!".
    [.., β€œ!”] => println!(β€œ!!!”),

    // dalam kepingan permulaan kami memasukkan segala-galanya kecuali elemen terakhir, yang sepatutnya "z"
    [mulakan @ .., "z"] => println!("bermula dengan: {:?}", mulakan),

    // pada bahagian akhir kita meletakkan segala-galanya kecuali elemen pertama, yang sepatutnya "a".
    ["a", tamat @ ..] => println!("berakhir dengan: {:?}", tamat),

    rehat => println!("{:?}", rehat),
    }
    }

  • Menambahkan "padanan!" makro baharu, yang mengambil ungkapan dan corak sebagai input dan mengembalikan "benar" jika corak sepadan dengan ungkapan. Templat boleh menggunakan operasi "|". dan jika".

    padankan self.partial_cmp(other) {
    Beberapa(Kurang) => benar,
    _ => palsu,
    }

    padan!(self.partial_cmp(other), Some(Kurang))

    let foo = 'f';
    tegaskan!(padan!(foo, 'A'..='Z' | 'a'..='z'));

    biarkan bar = Beberapa(4);
    tegaskan!(padan!(bar, Beberapa(x) jika x > 2));

  • Dalam mesej panik dipaparkan apabila digunakan secara salah
    jenis Pilihan dan Hasil, kini memaparkan nombor talian dengan pautan ke kod yang membuat panggilan bermasalah, bukannya pautan ke kod yang melaksanakan panggilan dalam libcore. Sebagai contoh, perubahan mempengaruhi panggilan untuk membuka dan menjangkakan lebih Option::None, atau ranap apabila menggunakan unwrap_err, expect, expect_err dan kaedah yang serupa pada jenis Result.

  • Pengurus pakej Kargo menyediakan penggantian automatik "krat proc_macro" ke dalam blok "luar" untuk pakej dengan makro prosedur. Perubahan ini membolehkan arahan "penggunaan" digunakan pada makro prosedur tanpa perlu menentukan "extern crate proc_macro;" dalam kod. Sebagai contoh, jika program menggunakan baris "use proc_macro::TokenStream;", maka kod itu kini akan kekal berfungsi jika "extern crate proc_macro;" dialih keluar daripadanya.
  • Keupayaan perpustakaan standard telah diperluaskan. Dalam iter::Kosong tambah Hantar dan Segerakkan sokongan untuk sebarang nilai T.
    Pin Panggilan::{map_unchecked, map_unchecked_mut} dihantar daripada perlu mengembalikan nilai jenis untuk pelaksanaan "Bersaiz".
    Dalam io::Kursor dilaksanakan PartialEq dan Eq. Atribut "const" menentukan kemungkinan penggunaan dalam mana-mana konteks dan bukannya pemalar, digunakan untuk kaedah Layout::new.

  • Bahagian baharu API telah dipindahkan ke kategori stabil, termasuk CondVar::wait_while yang stabil, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut and ptr::slice_from_raw_parts.

  • Kaedah Ralat::deskripsi telah ditamatkan.
  • Menyediakan sokongan tahap kedua untuk platform armv7a-none-eabi dan riscv64gc-unknown-linux-gnu. Sokongan untuk perpustakaan standard untuk platform riscv64gc-unknown-linux-gnu telah disediakan.
    Platform 32-bit Apple diturunkan pangkat sehingga tahap sokongan ketiga, yang membayangkan sokongan asas, tetapi tanpa ujian automatik dan penerbitan binaan rasmi. Penurunan taraf dalam sokongan adalah disebabkan Apple tidak lagi menyokong platform 32-bit.

Sumber: opennet.ru

Tambah komen