Rilis Bahasa Pemrograman Rust 1.34

Bahasa pemrograman sistem Rust 1.34, yang dikembangkan oleh proyek Mozilla, telah dirilis. 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. Untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola dependensi, proyek ini mengembangkan manajer paket Cargo, yang memungkinkan Anda mendapatkan perpustakaan yang diperlukan untuk program dalam satu klik. Repositori crates.io didukung untuk perpustakaan hosting.

Inovasi utama:

  • 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
    opsi baru β€œmy-registry” disediakan di bagian β€œ[registries]”, dan opsi β€œother-crate” telah ditambahkan untuk menyebutkan registri eksternal dalam dependensi di Cargo.toml di bagian β€œ[dependencies]”. 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 β€œ?”. di doctests, yang 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 yang ditentukan menggunakan makro prosedural, dimungkinkan untuk menggunakan kumpulan token arbitrer (β€œ#[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)]”;
  • Sifat TryFrom dan TryInto telah distabilkan, 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 Infallible telah ditambahkan untuk memungkinkan penggunaan transparan
    TryFrom untuk semua implementasi "Dari" yang ada;

  • Menghentikan fungsi CommandExt::before_exec, yang memungkinkan eksekusi handler sebelum 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.
    Daripada sebelum_exec, disarankan untuk menggunakan fungsi yang tidak aman CommandExt::pre_exec.

  • Tipe bilangan bulat atom bertanda tangan dan tidak bertanda yang distabilkan dengan ukuran mulai dari 8 hingga 64 bit (misalnya, AtomicU8), serta tipe bertanda NonZeroI[8|16|32|54|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” (rustc mengkompilasi kode Rust ke dalam bitcode LLVM, yang memungkinkan penerapan pengoptimalan LTO).

Sumber: opennet.ru

Tambah komentar