Keluaran bahasa pengaturcaraan Rust 1.64

Bahasa pengaturcaraan tujuan umum Rust 1.64, 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:

  • Keperluan untuk persekitaran Linux dalam pengkompil, pengurus pakej Cargo dan perpustakaan standard libstd telah ditingkatkan - keperluan minimum untuk Glibc telah dinaikkan daripada versi 2.11 kepada 2.17, dan kernel Linux daripada versi 2.6.32 kepada 3.2. Sekatan juga dikenakan pada aplikasi boleh laku Rust yang dibina dengan libstd. Kit pengedaran RHEL 7, SLES 12-SP5, Debian 8 dan Ubuntu 14.04 memenuhi keperluan baharu. Sokongan untuk RHEL 6, SLES 11-SP4, Debian 7 dan Ubuntu 12.04 akan dihentikan. Pengguna yang menggunakan boleh laku bina Rust dalam persekitaran dengan kernel Linux yang lebih lama digalakkan untuk menaik taraf sistem mereka, kekal menggunakan keluaran pengkompil yang lebih lama atau mengekalkan garpu libstd mereka sendiri dengan lapisan untuk mengekalkan keserasian.

    Antara sebab untuk menamatkan sokongan untuk sistem Linux yang lebih lama adalah sumber yang terhad untuk terus mengekalkan keserasian dengan persekitaran yang lebih lama. Sokongan untuk Glibc warisan memerlukan penggunaan alatan lama semasa menyemak sistem penyepaduan berterusan, dalam menghadapi peningkatan keperluan versi dalam LLVM dan utiliti kompilasi silang. Peningkatan dalam keperluan versi kernel adalah disebabkan oleh keupayaan untuk menggunakan panggilan sistem baharu dalam libstd tanpa perlu mengekalkan lapisan untuk memastikan keserasian dengan kernel yang lebih lama.

  • Ciri IntoFuture telah distabilkan, yang menyerupai IntoIterator, tetapi berbeza daripada yang terakhir dengan menggunakan gelung ".await" dan bukannya "untuk ... dalam ...". Apabila digabungkan dengan IntoFuture, kata kunci ".await" boleh mengharapkan bukan sahaja sifat Masa Depan, tetapi juga jenis lain yang boleh ditukar kepada Masa Hadapan.
  • Utiliti penganalisis karat disertakan dalam koleksi utiliti yang disediakan dengan keluaran Rust. Utiliti ini juga tersedia untuk pemasangan menggunakan rustup (komponen rustup menambah rust-analyzer).
  • Pengurus pakej Kargo menyertakan warisan ruang kerja untuk menghapuskan pertindihan nilai medan biasa antara pakej, seperti versi Rust dan URL repositori. Juga menambah sokongan untuk membina beberapa platform sasaran sekaligus (kini anda boleh menentukan lebih daripada satu parameter dalam pilihan "--target").
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • masa hadapan::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::menepu_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Jenis serasi C, yang sebelum ini distabilkan dalam modul std::ffi, telah ditambahkan pada teras dan perpustakaan alloc:
    • teras::ffi::CStr
    • teras::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Jenis C yang sebelum ini stabil dalam modul std::os::raw telah ditambahkan pada modul teras::ffi dan std::ffi (contohnya, jenis c_uint dan c_ulong telah dicadangkan untuk jenis uint dan ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Pengendali peringkat rendah telah distabilkan untuk digunakan dengan mekanisme Poll (pada masa hadapan ia dirancang untuk menyediakan API dipermudahkan yang tidak memerlukan penggunaan struktur peringkat rendah seperti Pull dan Pin):

    • masa hadapan::poll_fn
    • tugas::sedia!
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi slice::from_raw_parts.
  • Untuk menyimpan data dengan lebih padat, susun atur memori struktur Ipv4Addr, Ipv6Addr, SocketAddrV4 dan SocketAddrV6 telah diubah. Mungkin terdapat isu keserasian dengan pakej peti tunggal yang menggunakan std::mem::transmute untuk manipulasi struktur peringkat rendah.
  • Binaan pengkompil karat untuk platform Windows menggunakan pengoptimuman PGO (pengoptimuman berpandukan profil), yang memungkinkan untuk meningkatkan prestasi penyusunan kod sebanyak 10-20%.
  • Pengkompil telah melaksanakan amaran baharu tentang medan yang tidak digunakan dalam struktur tertentu.

Selain itu, anda boleh mencatat laporan status tentang pembangunan pelaksanaan alternatif pengkompil bahasa Rust, yang disediakan oleh projek gccrs (GCC Rust) dan diluluskan untuk dimasukkan dalam GCC. Selepas menyepadukan bahagian hadapan, alat GCC standard boleh digunakan untuk menyusun atur cara dalam bahasa Rust tanpa perlu memasang pengkompil rustc, dibina menggunakan pembangunan LLVM. Selagi pembangunan berada di landasan yang betul, dan menghalang sebarang masalah yang tidak dijangka, bahagian hadapan Rust akan disepadukan ke dalam keluaran GCC 13 yang dijadualkan pada Mei tahun depan. Pelaksanaan GCC 13 Rust akan berada dalam status beta, belum didayakan secara lalai.

Sumber: opennet.ru

Tambah komen