Keluaran bahasa pengaturcaraan Rust 1.55

Pengeluaran bahasa pengaturcaraan sistem Rust 1.55, 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:

  • Pengurus pakej Kargo mempunyai keupayaan untuk menggabungkan ralat pendua dan amaran yang berlaku semasa binaan. Apabila melaksanakan arahan seperti "ujian kargo" dan "semakan kargo --semua-sasaran" yang menghasilkan berbilang binaan pakej dengan parameter berbeza, pengguna kini ditunjukkan ringkasan kejadian masalah berulang, bukannya ditunjukkan berbilang amaran yang sama apabila membina perkara yang sama berulang kali.fail. $ kargo +1.55.0 semak β€”semua sasaran Memeriksa amaran foo v0.1.0: fungsi tidak pernah digunakan: 'foo' β€”> src/lib.rs:9:4 | 9 | fn foo() {} | ^^^ | = nota: '#[warn(dead_code)]' secara lalai amaran: 'foo' (lib) menghasilkan 1 amaran amaran: 'foo' (lib test) menjana 1 amaran (1 pendua) Selesai sasaran dev [tidak dioptimumkan + debuginfo] (s)dalam 0.84s
  • Kod penghuraian titik terapung dalam perpustakaan standard telah dialihkan untuk menggunakan algoritma Eisel-Lemire yang lebih pantas dan tepat, yang telah menyelesaikan beberapa masalah yang diperhatikan sebelum ini dengan pembundaran dan penghuraian nombor dengan bilangan digit yang sangat besar.
  • Keupayaan untuk menentukan julat tidak tertutup dalam templat telah distabilkan (β€œX..” ditafsirkan sebagai julat yang bermula dengan nilai X dan berakhir dengan nilai maksimum jenis integer): padankan x sebagai u32 { 0 => println! (β€œsifar!”), 1.. => println!("nombor positif!"), }
  • Varian ralat diperluas diliputi oleh std::io::ErrorKind (mengklasifikasikan ralat ke dalam kategori seperti NotFound dan WouldBlock). Sebelum ini, ralat yang tidak sesuai dengan kategori sedia ada termasuk dalam kategori ErrorKind::Other, yang juga digunakan untuk ralat dalam kod pihak ketiga. Kini terdapat kategori dalaman yang berasingan ErrorKind::Uncategorized untuk ralat yang tidak sesuai dengan kategori sedia ada, dan ErrorKind::Kategori lain terhad kepada ralat yang tidak berlaku dalam perpustakaan standard (fungsi perpustakaan standard yang mengembalikan io::Error tidak lagi menggunakan kategori ErrorKind:: Other).
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • Terikat::diklon
    • Longkang::as_str
    • IntoInnerError::into_error
    • IntoInnerError::into_parts
    • MaybeUninit::assume_init_mut
    • MaybeUninit::assume_init_ref
    • MungkinUninit::tulis
    • tatasusunan::peta
    • ops::ControlFlow
    • x86::_palingpaling
    • x86::_bittestandcomplement
    • x86::_bittestandreset
    • x86::_bittestandset
    • x86_64::_bittest64
    • x86_64::_bittestandcomplement64
    • x86_64::_bittestandreset64
    • x86_64::_bittestandset64
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam kaedah str::from_utf8_unchecked.
  • Tahap ketiga sokongan telah dilaksanakan untuk platform powerpc64le-unknown-freebsd. 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