Keluaran bahasa pengaturcaraan Rust 1.63

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

  • API std::thread::scope telah ditambahkan, membenarkan penciptaan thread berskop. Tidak seperti utas yang tersedia sebelum ini, API std::thread::scope baharu membenarkan peminjaman data bukan statik, manakala utas yang dibuat menggunakan API std::thread::spawn klasik perlu memiliki semua hujah yang diluluskan dan tidak boleh mendapatkan pembolehubah yang dipinjam. API std::thread::scope menjamin bahawa mana-mana utas yang dihasilkan akan ditamatkan sebelum memulangkan data, memberikan tahap keselamatan yang diperlukan untuk mekanisme peminjaman.
  • Jenis pengikatan deskriptor fail baharu, BorrowedFd dan OwnedFd, dicadangkan, menyediakan peminjaman dan pemilikan. Jenis ditandakan dengan "#[repr(transparent)]", membenarkannya digunakan secara langsung dalam pengikatan C luaran dengan pemilikan.
  • Menyediakan keupayaan untuk memanggil Condvar::new, Mutex::new, dan RwLock::new dalam konteks tetap untuk mencipta nilai Mutex, RwLock dan Condvar statik global tanpa menggunakan pakej lazy_static.
  • Untuk fungsi jenis fn foo (nilai: T, f: impl Copy) sintaks seperti "foo:: dibenarkan (3, 3)", dengan jelas menunjukkan jenis generik.
  • Peralihan kepada teknik NLL (Non-Lexical Lifetimes) untuk mengesan isu peminjaman berubah telah selesai. NLL melaksanakan perakaunan pada tahap set penunjuk dalam graf aliran pelaksanaan, yang meningkatkan kualiti penyemak pinjaman dan membenarkan pelaksanaan jenis kod betul tertentu yang sebelum ini mengakibatkan ralat. Sokongan untuk mekanisme lama, yang menggunakan pengikatan seumur hidup leksikal, kini telah dikeluarkan sepenuhnya daripada rustc, dan penggunaan NLL baharu telah dilaksanakan secara universal.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • tatasusunan::from_fn
    • Kotak::ke_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Path::try_exists
    • Ruj::peta_penapis
    • RefMut::penapis_peta
    • NonNull::<[T]>::len
    • ToOwned::clone_into
    • Ipv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::BorrowedFd<'fd>
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::BorrowedHandle

      Sumber: opennet.ru

Tambah komen