Keluaran bahasa pengaturcaraan Rust 2021 (1.56)

Pengeluaran bahasa pengaturcaraan sistem Rust 1.56, yang diasaskan oleh projek Mozilla, tetapi kini dibangunkan di bawah naungan organisasi bukan untung bebas Rust Foundation, telah diterbitkan. Selain nombor versi biasa, keluaran itu juga dilabelkan sebagai Rust 2021 dan menandakan penstabilan perubahan yang dicadangkan sejak tiga tahun lalu. Rust 2021 juga akan menjadi asas untuk binaan ciri dalam tempoh tiga tahun akan datang, sama seperti cara keluaran Rust 2018 telah menjadi asas untuk pembangunan bahasa sejak tiga tahun lalu.

Untuk mengekalkan keserasian, pembangun boleh menggunakan teg "2015", "2018" dan "2021" dalam program mereka untuk memautkan atur cara kepada kepingan keadaan bahasa yang sepadan dengan edisi Rust yang dipilih. Semakan telah diperkenalkan untuk memisahkan perubahan yang tidak serasi dan dikonfigurasikan dalam metadata pakej kargo melalui medan "edisi" dalam bahagian "[pakej]". Sebagai contoh, edisi 2018 termasuk fungsi yang telah distabilkan pada penghujung 2018 dan juga meliputi semua perubahan masa depan yang tidak melanggar keserasian. Edisi 2021 juga termasuk ciri pemecah keserasian yang dicadangkan dalam keluaran 1.56 semasa dan diluluskan untuk pelaksanaan pada masa hadapan. Selain bahasa itu sendiri, editor juga mengambil kira keadaan alat dan dokumentasi.

Ketidakserasian utama yang ditetapkan dalam Rust 2021 ialah:

  • Asingkan Tangkapan dalam Penutupan - Penutupan kini boleh menangkap nama medan individu dan bukannya keseluruhan ID. Contohnya, "|| ax + 1" hanya akan menangkap "ax" dan bukannya "a".
  • Sifat IntoIterator untuk tatasusunan: array.into_iter() membolehkan anda melelakan elemen tatasusunan mengikut nilai dan bukannya dengan rujukan.
  • Pemprosesan ungkapan "|" telah diubah dalam macro_rules (operasi logik ATAU) dalam corak - Penentu ":pat" dalam padanan kini menghormati corak "A | B".
  • Pengurus pakej kargo termasuk secara lalai versi kedua penyelesai ciri, sokongan yang diperkenalkan dalam Rust 1.51.
  • Ciri TryFrom, TryInto dan FromIterator telah ditambahkan pada modul perpustakaan standard pendahuluan.
  • Makro panik!(..) dan menegaskan!(expr, ..) kini sentiasa menggunakan format_args!(..) untuk memformat rentetan, serupa dengan println!().
  • Ungkapan ident#, ident"…" dan ident'…' dikhaskan dalam sintaks bahasa.
  • Amaran bare_trait_objects dan ellipsis_inclusive_range_patterns telah dialihkan ke kategori ralat.

Baharu dalam Rust 1.56:

  • Dalam Cargo.toml, dalam bahagian "[pakej]", medan versi karat telah ditambahkan, yang melaluinya anda boleh menentukan versi minimum Rust yang disokong untuk pakej peti. Jika versi semasa tidak sepadan dengan parameter yang ditentukan, Kargo akan dibatalkan dengan ralat.
  • Apabila padanan corak menggunakan ungkapan "mengikat @ corak", sokongan disediakan untuk menentukan pengikatan tambahan (contohnya, "biar matriks @ Matriks { row_len, .. } = get_matrix();").
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::ke_bahagian
    • teras::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::mengecut_kepada
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi
    • std::mem::transmute
    • [T]::pertama
    • [T]::split_first
    • [T]::terakhir
    • [T]::split_last
  • Pengkompil telah ditukar untuk menggunakan LLVM versi 13.
  • Melaksanakan sokongan tahap 64 untuk platform aarch32-apple-ios-sim dan sokongan tahap XNUMX untuk platform powerpc-unknown-freebsd dan riscvXNUMXimc-esp-espidf. Tahap ketiga membayangkan sokongan asas, tetapi tanpa ujian automatik, penerbitan binaan rasmi dan menyemak keupayaan untuk membina kod.

Ingat bahawa bahasa Rust memberi tumpuan kepada pengurusan memori yang selamat, menyediakan pengurusan memori automatik, dan menyediakan cara untuk mencapai keselarian tinggi pelaksanaan kerja, sambil melakukan tanpa menggunakan pengumpul sampah dan masa jalan (masa jalan dikurangkan kepada permulaan asas dan penyelenggaraan perpustakaan standard).

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

Sumber: opennet.ru

Tambah komen