Rilis bahasa pemrograman karat 2021 (1.56)

Rilis bahasa pemrograman sistem Rust 1.56, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Selain nomor versi reguler, rilis ini juga diberi label Rust 2021 dan menandai stabilisasi dari perubahan yang diusulkan selama tiga tahun terakhir. Rust 2021 juga akan menjadi dasar untuk pembuatan fitur selama tiga tahun ke depan, mirip dengan rilis Rust 2018 yang menjadi dasar pengembangan bahasa selama tiga tahun terakhir.

Untuk mempertahankan kompatibilitas, pengembang dapat menggunakan tag "2015", "2018", dan "2021" dalam program mereka untuk menautkan program ke irisan status bahasa yang sesuai dengan edisi Rust yang dipilih. Revisi diperkenalkan untuk memisahkan perubahan yang tidak kompatibel dan dikonfigurasi dalam metadata paket kargo melalui bidang "edisi" di bagian "[paket]". Misalnya, edisi 2018 menyertakan fungsionalitas yang distabilkan pada akhir 2018 dan juga mencakup semua perubahan di masa mendatang yang tidak melanggar kompatibilitas. Edisi 2021 juga menyertakan fitur yang merusak kompatibilitas yang diusulkan dalam rilis 1.56 saat ini dan disetujui untuk diterapkan di masa mendatang. Selain bahasa itu sendiri, editor juga mempertimbangkan keadaan alat dan dokumentasi.

Ketidakcocokan utama yang diperbaiki di Rust 2021 adalah:

  • Pengambilan Terpisah dalam Penutupan - Penutupan sekarang dapat menangkap nama bidang individual, bukan seluruh ID. Misalnya, "|| ax + 1" hanya akan menangkap "ax" bukan "a".
  • Sifat IntoIterator untuk array: array.into_iter() memungkinkan Anda untuk mengulang elemen-elemen array dengan nilai, bukan dengan referensi.
  • Pemrosesan ekspresi "|" telah diubah dalam aturan_makro (operasi logis ATAU) dalam pola - Penentu ":pat" dalam pertandingan sekarang mengikuti pola "A | B".
  • Pengelola paket kargo secara default menyertakan versi kedua dari penyelesai fitur, yang dukungannya diperkenalkan di Rust 1.51.
  • Ciri-ciri TryFrom, TryInto, dan FromIterator telah ditambahkan ke modul pustaka standar pendahuluan.
  • Panik!(..) dan menegaskan!(expr, ..) makro sekarang selalu menggunakan format_args!(..) untuk memformat string, mirip dengan println!().
  • Ekspresi ident#, ident"…" dan ident'…' dicadangkan dalam sintaks bahasa.
  • Peringatan bare_trait_objects dan ellipsis_inclusive_range_patterns telah dipindahkan ke kategori kesalahan.

Baru di Rust 1.56:

  • Di Cargo.toml, di bagian "[paket]", bidang versi karat telah ditambahkan, di mana Anda dapat menentukan versi minimum Rust yang didukung untuk paket peti. Jika versi saat ini tidak cocok dengan parameter yang ditentukan, Cargo akan dibatalkan dengan kesalahan.
  • Saat pencocokan pola menggunakan ekspresi "binding @ pattern", dukungan disediakan untuk menentukan binding tambahan (misalnya, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • inti::panik::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinerHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam fungsi
    • std::mem::transmutasi
    • [T]::pertama
    • [T]::split_pertama
    • [T]::terakhir
    • [T]::split_last
  • Kompiler telah dialihkan untuk menggunakan LLVM versi 13.
  • Menerapkan dukungan level 64 untuk platform aarch32-apple-ios-sim dan dukungan level XNUMX untuk platform powerpc-unknown-freebsd dan riscvXNUMXimc-esp-espidf. Tingkat ketiga menyiratkan dukungan dasar, tetapi tanpa pengujian otomatis, menerbitkan build resmi dan memeriksa kemampuan untuk membuat kode.

Ingatlah bahwa bahasa Rust berfokus pada manajemen memori yang aman, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme yang tinggi dari eksekusi pekerjaan, sambil melakukannya tanpa menggunakan pengumpul sampah dan runtime (runtime direduksi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Manajemen memori otomatis Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena manipulasi memori tingkat rendah, seperti mengakses area memori setelah dibebaskan, dereferencing null pointer, buffer overruns, dll. Untuk mendistribusikan pustaka, menyediakan build, dan mengelola dependensi, proyek mengembangkan manajer paket Cargo. Repositori crates.io didukung untuk hosting perpustakaan.

Sumber: opennet.ru

Tambah komentar