Keluaran bahasa pengaturcaraan Rust 1.34

mengambil tempat keluaran bahasa pengaturcaraan sistem Karat 1.34dibangunkan oleh projek Mozilla. Bahasa ini memberi tumpuan kepada pengurusan memori yang selamat, menyediakan pengurusan memori automatik dan menyediakan cara untuk mencapai keselarian kerja yang tinggi sambil mengelakkan penggunaan pengumpul sampah dan masa jalan.

Pengurusan memori automatik Rust menyelamatkan pembangun daripada memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan, projek membangunkan pengurus pakej Cargo, yang membolehkan anda mendapatkan perpustakaan yang anda perlukan untuk program dalam satu klik. Repositori disokong untuk mengehos perpustakaan crates.io.

Utama inovasi:

  • Alat tambahan pada pengurus pakej Kargo untuk bekerja dengan pendaftaran pakej alternatif yang boleh wujud bersama dengan pendaftaran awam crates.io. Sebagai contoh, pembangun aplikasi persendirian kini boleh menggunakan pendaftaran peribadi mereka sendiri yang boleh digunakan apabila menyenaraikan kebergantungan dalam Cargo.toml dan menggunakan model versi seperti crates.io untuk produk mereka, serta merujuk kedua-dua crates.io dan crates.io dalam kebergantungan. ke registri anda sendiri.

    Untuk menambah pendaftaran luaran pada .cargo/config (terletak dalam $HOME atau direktori pakej)
    disediakan Bahagian "[pendaftaran]", dan untuk menggunakan pendaftaran luaran, pilihan "pendaftaran" muncul dalam perihalan setiap pergantungan dalam Cargo.toml. Untuk menyambung ke pendaftaran tambahan, hanya letakkan token pengesahan dalam fail ~/.cargo/credentials dan jalankan arahan
    "log masuk kargo --registry=my-registry", dan untuk menerbitkan pakej -
    "cargo publish --registry=my-registry";

  • Menambah sokongan penuh untuk menggunakan "?" dalam ujian doctests, membolehkan anda menggunakan kod contoh daripada dokumentasi sebagai ujian. Pengendali sebelum ini
    "?" boleh digunakan untuk mengendalikan ralat semasa pelaksanaan ujian hanya jika terdapat fungsi "fn main()" atau dalam fungsi "#[test]";

  • Dalam atribut tersuai yang ditakrifkan dengan makro prosedur terjamin keupayaan untuk menggunakan set token sewenang-wenangnya ("#[attr($token)]", "#[attr[$token]] dan #[attr{$token}]"). Sebelum ini, elemen hanya boleh ditentukan dalam bentuk pokok/rekursif menggunakan literal rentetan, seperti "#[foo(bar, baz(quux, foo = "bar"))]", tetapi kini boleh menggunakan enums ('# [julat(0. .10)]') dan pembinaan seperti "#[bound(T: MyTrait)]";
  • Sifat yang stabil (sifat) TryFrom ΠΈ tryinto, yang membolehkan anda melakukan penukaran jenis dengan pengendalian ralat. Sebagai contoh, kaedah seperti from_be_bytes dengan jenis integer menggunakan tatasusunan sebagai input, tetapi data selalunya jenis Slice, dan menukar antara tatasusunan dan kepingan adalah bermasalah untuk dilakukan secara manual. Dengan ciri baharu, operasi ini boleh dilakukan dengan cepat dengan memanggil .try_into(), sebagai contoh, "let num = u32::from_be_bytes(slice.try_into()?)". Jenis ralat ditambahkan untuk penukaran yang sentiasa berjaya (cth. daripada jenis u8 hingga u32) Tidak sempurna, membolehkan anda menggunakan secara telus
    TryFrom untuk semua pelaksanaan "Daripada" sedia ada;

  • Fungsi ditamatkan CommandExt::before_exec, yang membenarkan pengendali dilaksanakan sebelum exec yang dilaksanakan dalam konteks proses anak bercabang selepas panggilan fork(). Di bawah keadaan sedemikian, beberapa sumber proses induk, seperti deskriptor fail dan kawasan memori yang dipetakan, boleh diduplikasi, yang boleh membawa kepada tingkah laku yang tidak ditentukan dan kerja perpustakaan yang salah.
    Adalah disyorkan untuk menggunakan fungsi tidak selamat dan bukannya before_exec CommandExt::pre_exec.

  • Jenis integer atom yang ditandatangani dan tidak ditandatangani daripada 8 hingga 64 bit distabilkan (contohnya, AtomicU8), serta jenis yang ditandatangani BukanSifarI[8|16|32|64|128].
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[tambah |sub] dan SystemTime distabilkan ::checked_[add|sub]. Fungsi iter::from_fn dan iter::successors telah distabilkan;
  • Untuk semua jenis integer, kaedah checked_pow, saturating_pow, wrapping_pow dan overflowing_pow dilaksanakan;
  • Menambah keupayaan untuk mendayakan pengoptimuman pada peringkat pemautan dengan menentukan pilihan binaan "-C linker-plugin-lto".

Sumber: opennet.ru

Tambah komen