Rilis Bahasa Pemrograman Rust 1.73

Rilis bahasa pemrograman tujuan umum Rust 1.73, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Bahasa berfokus pada keamanan memori dan menyediakan sarana untuk mencapai paralelisme pekerjaan yang tinggi sambil menghindari penggunaan pengumpul sampah dan runtime (runtime dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Metode penanganan memori Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena penanganan memori tingkat rendah, seperti mengakses area memori setelah dibebaskan, dereferencing null pointer, buffer overruns, dll. Untuk mendistribusikan pustaka, menyediakan build, dan mengelola dependensi, proyek mengembangkan manajer paket Cargo. Repositori crates.io didukung untuk hosting perpustakaan.

Keamanan memori disediakan di Rust pada waktu kompilasi melalui pemeriksaan referensi, melacak kepemilikan objek, melacak masa pakai objek (cakupan), dan menilai kebenaran akses memori selama eksekusi kode. Rust juga memberikan perlindungan terhadap integer overflow, membutuhkan inisialisasi wajib dari nilai variabel sebelum digunakan, menangani kesalahan dengan lebih baik di perpustakaan standar, menerapkan konsep referensi dan variabel yang tidak dapat diubah secara default, menawarkan pengetikan statis yang kuat untuk meminimalkan kesalahan logis.

Inovasi utama:

  • Format pesan yang dikeluarkan oleh program default crash handler (panic) telah didesain ulang. Teks yang ditentukan dalam makro "panik!" sekarang ditampilkan pada baris terpisah tanpa tanda kutip, membuat pesan lebih mudah dibaca dan menghilangkan kebingungan ketika ada tanda kutip bertingkat atau terbagi menjadi beberapa baris. fn main() { biarkan file = "ferris.txt"; panik!("oh tidak! {file:?} tidak ditemukan!"); } Ada thread 'utama' yang panik karena 'oh tidak! "ferris.txt" tidak ditemukan!', src/main.rs:3:5 Thread 'main' panik di src/main.rs:3:5: oh tidak! "ferris.txt" tidak ditemukan!

    Output pesan yang ditampilkan ketika makro β€œassert_eq” dan β€œassert_ne” dipicu juga telah dikerjakan ulang. fn main() { menegaskan_eq!("πŸ¦€", "🐟", "ferris bukan ikan"); } Ada thread 'utama' yang panik karena 'pernyataan gagal: `(kiri == kanan)` kiri: `"πŸ¦€"`, kanan: `"🐟"`: ferris bukan ikan', src/main.rs: 2 :5 Thread 'main' panik di src/main.rs:2:5: pernyataan `kiri == kanan` gagal: ferris bukan ikan kiri: β€œπŸ¦€β€ kanan: β€œπŸŸβ€

  • Sesuai dengan RFC 3184, kemampuan untuk secara langsung memanipulasi kunci penyimpanan LocalKey thread-local (thread_local) telah ditambahkan > dan Kunci Lokal > melalui penggunaan metode get(), set(), take() dan replace(), daripada menggunakan penutupan "with(|inner| ...)", yang menghilangkan kebutuhan untuk melakukan kode inisialisasi tambahan untuk nilai default yang ditentukan untuk thread baru saat menggunakan makro β€œthread_local!” thread_lokal! { HAL statis: Sel > = Sel::baru(Vec::baru()); } fn f() { // adalah HAL.dengan(|i| i.set(vec![32, 1, 2])); // menjadi HAL.set(vec![3, 1, 2]); // ... // dibiarkan v = HAL.dengan(|i| i.take()); // menjadi biarkan v: Vec = HAL.ambil(); }
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • Tidak ditandatangani {integer}::div_ceil
    • Tidak ditandatangani {integer}::next_multiple_of
    • Tidak ditandatangani {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Kunci Lokal:: >::dapatkan
    • Kunci Lokal:: >::setel
    • Kunci Lokal:: >::ambil
    • Kunci Lokal:: >::ganti
    • Kunci Lokal:: >::dengan_pinjaman
    • Kunci Lokal:: >::dengan_pinjaman_mut
    • Kunci Lokal:: >::setel
    • Kunci Lokal:: >::ambil
    • Kunci Lokal:: >::ganti
  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam fungsi:
    • rc::Lemah::baru
    • sinkronisasi::Lemah::baru
    • NonNull::as_ref
  • Kompiler menyediakan rekaman informasi versi di bagian β€œ.comment”, mirip dengan GCC dan Clang.
  • Dukungan tingkat ketiga telah diterapkan untuk platform aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl dan x86_64-unknown-linux -ohos. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.
  • Dukungan tingkat kedua untuk platform target wasm32-wasi-preview1-threads telah diterapkan. Dukungan tingkat kedua melibatkan jaminan perakitan.

Sumber: opennet.ru

Tambah komentar