Rilis Bahasa Pemrograman Rust 1.34

ambil tempat rilis bahasa pemrograman sistem Karat 1.34, dikembangkan oleh proyek Mozilla. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau runtime.

Manajemen memori otomatis Rust membebaskan pengembang dari manipulasi penunjuk dan melindungi dari masalah yang timbul dari manipulasi memori tingkat rendah, seperti akses memori setelah bebas, dereferensi penunjuk nol, buffer overruns, dan sejenisnya. Manajer paket sedang dikembangkan untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola ketergantungan oleh proyek. Muatan, memungkinkan Anda mendapatkan perpustakaan yang diperlukan untuk program dalam satu klik. Repositori didukung untuk menghosting perpustakaan peti.io.

Utama inovasi:

  • Manajer paket Cargo telah menambahkan alat untuk bekerja dengan registrasi paket alternatif yang dapat hidup berdampingan dengan registri publik crates.io. Misalnya, pengembang aplikasi berpemilik sekarang dapat menggunakan registri pribadi mereka sendiri, yang dapat digunakan saat membuat daftar dependensi di Cargo.toml, dan menerapkan model versi yang mirip dengan crates.io untuk produk mereka, serta merujuk dependensi ke kedua peti. io dan ke registri Anda sendiri.

    Untuk menambahkan registri eksternal ke .cargo/config (terletak di $HOME atau di direktori paket)
    diramalkan bagian β€œ[registries]”, dan untuk menggunakan registry eksternal, opsi β€œregistry” telah muncul di deskripsi setiap dependensi di Cargo.toml. Untuk terhubung ke registri tambahan, cukup tempatkan token otentikasi di file ~/.cargo/credentials dan jalankan perintah
    "login kargo --registry=registrasi-saya" dan untuk menerbitkan paket -
    "penerbitan kargo -registry=registrasi-saya";

  • Menambahkan dukungan penuh untuk menggunakan operator β€œ?”. dalam tes tes dokter, memungkinkan Anda menggunakan kode contoh dari dokumentasi sebagai pengujian. Operator sebelumnya
    "?" dapat digunakan untuk menangani kesalahan selama pelaksanaan pengujian hanya dengan adanya fungsi β€œfn main()” atau dalam fungsi β€œ#[test]”;

  • Dalam atribut khusus ditentukan menggunakan makro prosedural dijamin kemampuan untuk menggunakan kumpulan token yang berubah-ubah (β€œ#[attr($tokens)]”, β€œ#[attr[$tokens]] dan #[attr{$tokens}]”). Sebelumnya, elemen hanya dapat ditentukan dalam bentuk pohon/rekursif menggunakan literal string, misalnya β€œ#[foo(bar, baz(quux, foo = β€œbar”))]”, tetapi sekarang dimungkinkan untuk menggunakan enumerasi (' #[range(0. .10)]') dan konstruksi seperti β€œ#[bound(T: MyTrait)]”;
  • Tipe yang distabilkan (sifat) CobaDari ΠΈ Cobalah, memungkinkan konversi tipe dengan penanganan kesalahan. Misalnya, metode seperti from_be_bytes dengan tipe integer menggunakan array sebagai input, namun data sering kali datang dalam tipe Slice, dan konversi antara array dan irisan sulit dilakukan secara manual. Dengan bantuan ciri-ciri baru, operasi yang ditentukan dapat dilakukan dengan cepat melalui panggilan ke .try_into(), misalnya, β€œlet num = u32::from_be_bytes(slice.try_into()?)”. Untuk konversi yang selalu berhasil (misalnya dari tipe u8 ke u32), jenis kesalahan telah ditambahkan Sempurna, memungkinkan penggunaan transparan
    TryFrom untuk semua implementasi "Dari" yang ada;

  • Fungsi sudah tidak digunakan lagi CommandExt::before_exec, yang memungkinkan suatu handler dieksekusi sebelum menjalankan exec, yang dieksekusi dalam konteks proses anak yang bercabang setelah panggilan fork(). Dalam kondisi seperti itu, beberapa sumber daya dari proses induk, seperti deskriptor file dan area memori yang dipetakan, dapat diduplikasi, yang dapat menyebabkan perilaku tidak terdefinisi dan pengoperasian perpustakaan yang salah.
    Disarankan untuk menggunakan fungsi yang tidak aman daripada before_exec CommandExt::pre_exec.

  • Jenis bilangan bulat atom bertanda dan tidak bertanda yang distabilkan dengan ukuran mulai dari 8 hingga 64 bit (misalnya, AtomU8), serta tipe yang ditandatangani BukanNolI[8|16|32|64|128].
  • Bagian baru API telah dipindahkan ke kategori stabil, termasuk Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] dan metode SystemTime telah distabilkan ::checked_[add|sub]. Fungsi iter::from_fn dan iter::successors telah distabilkan;
  • Untuk semua tipe bilangan bulat, metode check_pow, saturating_pow, wraping_pow, dan overflow_pow diimplementasikan;
  • Menambahkan kemampuan untuk mengaktifkan pengoptimalan pada tahap penautan dengan menentukan opsi build β€œ-C linker-plugin-lto”.

Sumber: opennet.ru

Tambah komentar