Keluaran bahasa pengaturcaraan Rust 1.60

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

  • Pengkompil rustc mempunyai sistem berasaskan LLVM yang stabil untuk menjana data liputan yang digunakan untuk menilai liputan kod semasa ujian. Untuk mendayakan data liputan semasa pemasangan, anda mesti menggunakan bendera "-Cinstrument-coverage", contohnya, memulakan pemasangan dengan arahan "RUSTFLAGS="-C instrument-coverage" binaan kargo. Selepas menjalankan fail boleh laku yang disusun dengan cara ini, fail default.profraw akan disimpan dalam direktori semasa, untuk pemprosesan yang anda boleh gunakan utiliti llvm-profdata daripada komponen llvm-tools-preview. Output yang diproses oleh llvm-profdata kemudiannya boleh dihantar ke llvm-cov untuk menjana laporan liputan kod beranotasi. Maklumat tentang pautan ke kod sumber diambil daripada fail boleh laku yang sedang diperiksa, yang termasuk data yang diperlukan tentang sambungan antara kaunter liputan dan kod. 1| 1|fn utama() { 2| 1| println!("Hello, dunia!"); 3| 1|}
  • Dalam pengurus pakej kargo, sokongan untuk bendera "-masa" telah distabilkan, yang merangkumi penjanaan laporan terperinci tentang kemajuan binaan dan masa pelaksanaan setiap langkah. Laporan itu mungkin berguna untuk mengoptimumkan prestasi proses pemasangan.
  • Pengurus pakej kargo menawarkan sintaks baharu untuk mekanisme penyusunan bersyarat dan pemilihan kebergantungan pilihan, dikonfigurasikan dalam fail Cargo.toml dengan menyenaraikan senarai sifat yang dinamakan dalam bahagian [ciri] dan diaktifkan dengan mendayakan sifat semasa pembinaan pakej menggunakan bendera "--features". Versi baharu menambah sokongan untuk kebergantungan dalam ruang nama yang berasingan dan kebergantungan yang lemah.

    Dalam kes pertama, adalah mungkin untuk menggunakan elemen dengan awalan "dep:" di dalam bahagian "[ciri]" untuk memaut secara eksplisit kepada kebergantungan pilihan tanpa secara tersirat mewakili kebergantungan ini sebagai ciri. Dalam kes kedua, sokongan untuk menandakan dengan tanda β€œ?” telah ditambah. ("package-name?/feature-name") kebergantungan pilihan yang hanya perlu disertakan jika beberapa sifat lain termasuk kebergantungan pilihan yang diberikan. Contohnya, dalam contoh di bawah, mendayakan sifat serde akan membolehkan kebergantungan "serde", serta sifat "serde" untuk kebergantungan "rgb", tetapi hanya jika kebergantungan "rgb" didayakan di tempat lain: [dependencies] serde = { versi = " 1.0.133", pilihan = benar } rgb = { versi = "0.8.25", pilihan = benar } [ciri] serde = ["dep:serde", "rgb?/serde"]

  • Sokongan untuk kompilasi tambahan, yang telah dilumpuhkan dalam keluaran terakhir, telah dikembalikan. Pepijat pengkompil yang menyebabkan ciri dilumpuhkan telah diselesaikan.
  • Menyelesaikan beberapa masalah dengan menyediakan Pemasa Segera dengan jaminan pemasaan monotonik, yang mengambil kira masa yang dihabiskan oleh sistem dalam mod tidur. Sebelum ini, API OS digunakan apabila mungkin untuk mengendalikan pemasa, yang tidak mengambil kira situasi bermasalah yang memecahkan kebosanan masa, seperti masalah perkakasan, penggunaan virtualisasi atau ralat dalam sistem pengendalian.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • Arka::siklik_baru
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Paparan untuk io::ErrorKind
    • Daripada untuk ExitCode
    • Bukan untuk ! (taip "tidak pernah")
    • _Op_Tugaskan<$t>
    • arch::is_aarch64_feature_detected!
  • Tahap ketiga sokongan telah dilaksanakan untuk platform mips64-openwrt-linux-musl* dan armv7-unknown-linux-uclibceabi (softfloat). Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik, menerbitkan binaan rasmi atau menyemak sama ada kod itu boleh dibina.
  • Pengkompil telah ditukar untuk menggunakan LLVM 14.

Selain itu, anda boleh ambil perhatian:

  • Menambah sokongan untuk bootstrap pengkompil rustc menggunakan bahagian belakang rustc_codegen_gcc, yang membolehkan anda menggunakan perpustakaan libgccjit daripada projek GCC sebagai penjana kod dalam rustc, yang membolehkan rustc menyediakan sokongan untuk seni bina dan pengoptimuman yang tersedia dalam GCC. Promosi pengkompil bermaksud keupayaan untuk menggunakan penjana kod berasaskan GCC dalam rustc untuk membina pengkompil rustc itu sendiri. Dari segi praktikal, ciri ini membolehkan anda membina program karat untuk seni bina yang sebelum ini tidak disokong dalam rustc.
  • Keluaran kit alat uutils coreutils 0.0.13 tersedia, di mana analog pakej GNU Coreutils, yang ditulis semula dalam bahasa Rust, sedang dibangunkan. Coreutils datang dengan lebih seratus utiliti, termasuk sort, cat, chmod, chown, chroot, cp, date, dd, echo, nama hos, id, ln, dan ls. Matlamat projek ini adalah untuk mencipta pelaksanaan alternatif merentas platform bagi Coreutils, yang mampu dijalankan pada platform Windows, Redox dan Fuchsia, serta pengedaran di bawah lesen MIT permisif, bukannya lesen copyleft GPL.

    Versi baharu telah menambah baik pelaksanaan banyak utiliti, termasuk keserasian cp, dd, df, split dan tr yang telah dipertingkatkan dengan ketara daripada projek GNU. Dokumentasi dalam talian disediakan. Penghurai clap digunakan untuk menghuraikan argumen baris perintah, yang telah meningkatkan output untuk bendera "--help" dan menambah sokongan untuk singkatan perintah panjang (contohnya, anda boleh menentukan "ls -col" dan bukannya "ls -color ”).

Sumber: opennet.ru

Tambah komen