Rilis Bahasa Pemrograman Rust 1.66

Rilis bahasa pemrograman tujuan umum Rust 1.66, 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:

  • Dalam enumerasi dengan representasi bilangan bulat (atribut "#[repr(Int)]"), indikasi eksplisit diskriminan (nomor varian dalam enumerasi) diperbolehkan, bahkan jika enumerasi berisi bidang. #[repr(u8)] enum Foo { A(u8), # diskriminan 0 B(i8), # diskriminan 1 C(bool) = 42, # diskriminan 42 }
  • Menambahkan fungsi core::hint::black_box yang hanya mengembalikan nilai yang diterima. Karena kompiler berpikir bahwa fungsi ini melakukan sesuatu, fungsi black_box dapat digunakan untuk menonaktifkan pengoptimalan kompiler untuk loop saat melakukan pengujian kinerja kode atau saat memeriksa kode mesin yang dihasilkan (sehingga kompiler tidak menganggap kode tidak terpakai dan menghapusnya). Misalnya, dalam contoh di bawah ini, black_box(v.as_ptr()) mencegah kompiler berpikir bahwa vektor v tidak digunakan. gunakan std::hint::black_box; fn push_cap(v: &mut Vec) { untuk saya di 0..4 { v.push(i); kotak_hitam(v.as_ptr()); } }
  • Manajer paket "kargo" menawarkan perintah "hapus", yang memungkinkan Anda menghapus dependensi dari manifes Cargo.toml dari baris perintah.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflow_add_signed, saturating_add_signed, wraping_add_signed}
    • i*::{checked_add_unsigned, overflow_add_unsigned, saturating_add_unsigned, wraping_add_unsigned}
    • i*::{checked_sub_unsigned, overflow_sub_unsigned, saturating_sub_unsigned, wraping_sub_unsigned}
    • BTreeSet::{pertama, terakhir, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Tambahkan implementasi AsFd untuk jenis kunci stdio saat menggunakan WASI.
    • impl CobaDari > untuk Kotak<[T; N]>
    • inti::petunjuk::kotak_hitam
    • Durasi::try_from_secs_{f32,f64}
    • Opsi::unzip
    • std::os::fd
  • Rentang "..X" dan "..=X" diizinkan di template.
  • Saat membangun ujung depan kompiler rustc dan backend LLVM, mode pengoptimalan LTO (Link Time Optimization) dan BOLT (Binary Optimization and Layout Tool) digunakan untuk meningkatkan kinerja kode yang dihasilkan dan mengurangi konsumsi memori.
  • Menerapkan dukungan level 5 untuk platform armv5te-none-eabi dan thumbvXNUMXte-none-eabi. Tingkat ketiga menyiratkan dukungan dasar, tetapi tanpa pengujian otomatis, menerbitkan build resmi dan memeriksa kemampuan untuk membuat kode.
  • Menambahkan dukungan untuk menautkan ke macOS Generic Libraries.

Selain itu, kami dapat mencatat penyertaan dalam basis kode GCC dari kompiler front-end bahasa Rust (gccrs). Frontend termasuk dalam cabang GCC 13, yang akan dirilis pada Mei 2023. Dimulai dengan GCC 13, toolkit GCC standar akan dapat digunakan untuk mengkompilasi program Rust tanpa perlu menginstal kompiler rustc yang dibangun menggunakan pengembangan LLVM. Implementasi Rust di GCC 13 akan berstatus beta, tidak diaktifkan secara default.

Sumber: opennet.ru

Tambah komentar