Keluaran bahasa pengaturcaraan Rust 1.57

Pengeluaran bahasa pengaturcaraan sistem Rust 1.57, yang diasaskan oleh projek Mozilla, tetapi kini dibangunkan di bawah naungan organisasi bukan untung bebas Rust Foundation, telah diterbitkan. Bahasa ini menumpukan pada keselamatan ingatan, menyediakan pengurusan memori automatik dan menyediakan cara untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah atau 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.

Inovasi utama:

  • Penggunaan makro "panik!" telah distabilkan. dalam konteks yang dibuat semasa penyusunan, seperti pengisytiharan "const fn". Selain itu, selain menggunakan "panik!" pengisytiharan const membenarkan penggunaan makro β€œassert!”. dan beberapa API perpustakaan standard lain. Penstabilan belum lagi meliputi keseluruhan infrastruktur pemformatan, jadi dalam bentuk semasanya makro "panik!" hanya boleh digunakan dengan rentetan statik (panik!(β€œ...")) atau dengan nilai interpolasi tunggal "&str" apabila menggantikan (panic!("{}", a)), yang sepatutnya terhad kepada menggantikan "{ }" tanpa penentu format dan jenis lain. Pada masa hadapan, kebolehgunaan makro dalam konteks malar akan diperluaskan, tetapi keupayaan yang distabilkan sudah mencukupi untuk melakukan semakan assert pada peringkat penyusunan: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = menegaskan!(std::mem::saiz_of:: () == 8);
  • Pengurus pakej Kargo membenarkan penggunaan profil dengan nama sewenang-wenangnya, tidak terhad kepada "dev", "release", "test" dan "bench". Contohnya, untuk mendayakan pengoptimuman pada peringkat pemautan (LTO) hanya apabila himpunan produk akhir dijana, anda boleh membuat profil "pengeluaran" dalam Cargo.toml dan menambah bendera "lto = true" padanya. Walau bagaimanapun, apabila menentukan profil anda sendiri, anda mesti menentukan profil sedia ada untuk mewarisi tetapan lalai daripadanya. Contoh di bawah mencipta profil "pengeluaran" yang melengkapkan profil "keluaran" dengan memasukkan bendera "lto = benar". Profil itu sendiri diaktifkan dengan memanggil kargo dengan pilihan "--profile production", dan artifak pemasangan akan diletakkan dalam direktori "sasaran/pengeluaran". [profile.production] mewarisi = "pelepasan" lto = benar
  • Penggunaan try_reserve untuk jenis Vec, String, HashMap, HashSet dan VecDeque telah distabilkan, yang membolehkan anda menempah ruang terlebih dahulu untuk beberapa elemen tertentu bagi jenis tertentu untuk mengurangkan kekerapan operasi peruntukan memori dan mengelakkan ranap semasa operasi kerana kekurangan ingatan.
  • Ia dibenarkan untuk menentukan makro dengan pendakap kerinting dalam ungkapan seperti "m!{ .. }.method()" dan "m!{ .. }?".
  • Pelaksanaan fungsi Fail::read_to_end dan read_to_string telah dioptimumkan.
  • Sokongan untuk spesifikasi Unicode telah dikemas kini kepada versi 14.0.
  • Memperluas bilangan fungsi yang ditandakan "#[must_use]" untuk mengeluarkan amaran jika nilai pulangan diabaikan, yang membantu mengenal pasti ralat yang disebabkan oleh menganggap fungsi akan menukar nilai dan bukannya mengembalikan nilai baharu.
  • Menambah bahagian belakang percubaan untuk penjanaan kod menggunakan libgccjit.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • koleksi::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • Perintah::get_program
    • Perintah::get_args
    • Perintah::get_envs
    • Perintah::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atribut "const", yang menentukan sama ada ia boleh digunakan dalam mana-mana konteks dan bukannya pemalar, digunakan dalam fungsi hint::unreachable_unchecked.
  • Tahap sokongan ketiga telah dilaksanakan untuk armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi dan armv7a-kmc- platform solid_asp3-eabihf. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik, menerbitkan binaan rasmi atau menyemak sama ada kod itu boleh dibina.

Sumber: opennet.ru

Tambah komen