Keluaran bahasa pengaturcaraan Rust 1.66

Bahasa pengaturcaraan tujuan umum Rust 1.66, yang diasaskan oleh projek Mozilla tetapi kini dibangunkan di bawah naungan organisasi bebas tanpa untung Rust Foundation, telah dikeluarkan. Bahasa ini memberi tumpuan kepada keselamatan ingatan dan menyediakan cara untuk mencapai keselarian kerja yang tinggi sambil mengelakkan penggunaan pengumpul sampah dan masa jalan (masa jalan dikurangkan kepada permulaan asas dan penyelenggaraan perpustakaan standard).

Kaedah pengendalian memori Rust menyelamatkan pembangun daripada ralat semasa memanipulasi penunjuk dan melindungi daripada masalah yang timbul akibat pengendalian memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, menyediakan binaan dan mengurus kebergantungan, projek membangunkan pengurus pakej Kargo. Repositori crates.io disokong untuk mengehos perpustakaan.

Keselamatan memori disediakan dalam Rust pada masa penyusunan melalui semakan rujukan, menjejaki pemilikan objek, menjejaki jangka hayat objek (skop) dan menilai ketepatan akses memori semasa pelaksanaan kod. Rust juga menyediakan perlindungan terhadap limpahan integer, memerlukan permulaan mandatori nilai pembolehubah sebelum digunakan, mengendalikan ralat dengan lebih baik dalam perpustakaan standard, menggunakan konsep rujukan tidak berubah dan pembolehubah secara lalai, menawarkan penaipan statik yang kuat untuk meminimumkan ralat logik.

Inovasi utama:

  • Dalam penghitungan dengan perwakilan integer (atribut "#[repr(Int)]"), petunjuk eksplisit diskriminasi (bilangan pilihan dalam penghitungan) dibenarkan, walaupun penghitungan mengandungi medan. #[repr(u8)] enum Foo { A(u8), # diskriminasi 0 B(i8), # diskriminasi 1 C(bool) = 42, # diskriminasi 42 }
  • Menambah fungsi teras::hint::black_box, yang hanya mengembalikan nilai yang diterima. Oleh kerana pengkompil percaya bahawa fungsi tertentu melakukan perkara tertentu, fungsi black_box boleh digunakan untuk melumpuhkan pengoptimuman gelung pengkompil apabila melakukan ujian prestasi kod atau semasa memeriksa kod mesin yang dijana (supaya pengkompil tidak menganggap kod tidak boleh digunakan dan mengalih keluar ia). Sebagai contoh, dalam contoh di bawah, menyatakan black_box(v.as_ptr()) menghalang pengkompil daripada menganggap bahawa vektor v tidak digunakan. gunakan std::hint::black_box; fn push_cap(v: &mut Vec) { untuk i dalam 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • Pengurus pakej "kargo" menawarkan arahan "alih keluar", yang membolehkan anda mengalih keluar kebergantungan daripada manifes Cargo.toml daripada baris arahan.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BtreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Tambah pelaksanaan AsFd untuk jenis kunci stdio apabila menggunakan WASI.
    • impl TryFrom> untuk Box
    • teras::hint::black_box
    • Tempoh::try_from_secs_{f32,f64}
    • Pilihan:: nyahzip
    • std::os::fd
  • Penggunaan julat β€œ..X” dan β€œ..=X” dibenarkan dalam templat.
  • Apabila memasang bahagian hadapan pengkompil rustc dan bahagian belakang LLVM, mod pengoptimuman LTO (Pengoptimuman Masa Pautan) dan BOLT (Pengoptimuman Perduaan dan Alat Tata Letak) digunakan, yang membolehkan meningkatkan prestasi kod yang terhasil dan mengurangkan penggunaan memori.
  • Tahap sokongan ketiga telah dilaksanakan untuk platform armv5te-none-eabi dan thumbv5te-none-eabi. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik, menerbitkan binaan rasmi atau menyemak sama ada kod itu boleh dibina.
  • Menambah sokongan untuk memaut dengan perpustakaan universal macOS.

Selain itu, kita boleh perhatikan kemasukan hujung hadapan pengkompil bahasa Rust (gccrs) dalam pangkalan kod GCC. Bahagian hadapan disertakan dalam cawangan GCC 13, yang akan dikeluarkan pada Mei 2023. Bermula dengan GCC 13, alatan GCC asli boleh digunakan untuk menyusun atur cara dalam bahasa Rust tanpa perlu memasang pengkompil rustc, dibina menggunakan pembangunan LLVM. Pelaksanaan GCC 13 Rust akan menjadi versi beta, tidak didayakan secara lalai.

Sumber: opennet.ru

Tambah komen