Rilis Bahasa Pemrograman Rust 1.64

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

  • Persyaratan untuk lingkungan Linux di kompiler, manajer paket Cargo, dan pustaka standar libstd telah ditingkatkan - persyaratan minimum untuk Glibc telah ditingkatkan dari versi 2.11 menjadi 2.17, dan kernel Linux dari versi 2.6.32 menjadi 3.2. Pembatasan ini juga berlaku untuk executable aplikasi Rust yang dibuat dengan libstd. Kit distribusi RHEL 7, SLES 12-SP5, Debian 8 dan Ubuntu 14.04 memenuhi persyaratan baru. Dukungan untuk RHEL 6, SLES 11-SP4, Debian 7 dan Ubuntu 12.04 akan dihentikan. Pengguna yang menggunakan executable buatan Rust di lingkungan dengan kernel Linux yang lebih lama didorong untuk memutakhirkan sistem mereka, tetap menggunakan rilis kompiler yang lebih lama, atau mempertahankan fork libstd mereka sendiri dengan lapisan untuk menjaga kompatibilitas.

    Salah satu alasan penghentian dukungan untuk sistem Linux lama adalah terbatasnya sumber daya untuk terus menjaga kompatibilitas dengan lingkungan lama. Dukungan untuk Glibc lama memerlukan penggunaan alat lama saat memeriksa sistem integrasi berkelanjutan, mengingat meningkatnya persyaratan versi di LLVM dan utilitas kompilasi silang. Peningkatan persyaratan versi kernel disebabkan oleh kemampuan untuk menggunakan panggilan sistem baru di libstd tanpa perlu memelihara lapisan untuk memastikan kompatibilitas dengan kernel lama.

  • Sifat IntoFuture telah distabilkan, yang menyerupai IntoIterator, tetapi berbeda dari yang terakhir dengan menggunakan loop β€œ.await” alih-alih β€œfor… in…”. Jika digabungkan dengan IntoFuture, kata kunci ".await" tidak hanya dapat mengharapkan sifat Masa Depan, tetapi juga tipe lain yang dapat dikonversi ke Masa Depan.
  • Utilitas penganalisis karat disertakan dalam kumpulan utilitas yang disediakan dengan rilis Rust. Utilitas ini juga tersedia untuk instalasi menggunakan Rustup (komponen Rustup menambahkan penganalisa karat).
  • Manajer paket Cargo menyertakan pewarisan ruang kerja untuk menghilangkan duplikasi nilai bidang umum antar paket, seperti versi Rust dan URL repositori. Juga menambahkan dukungan untuk membangun beberapa platform target sekaligus (Anda sekarang dapat menentukan lebih dari satu parameter di opsi β€œ--target”).
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • masa depan::IntoFuture
    • nomor::NonZero*::checked_mul
    • nomor::NonZero*::checked_pow
    • nomor::NonZero*::jenuh_mul
    • nomor::NonZero*::saturating_pow
    • nomor::NonZeroI*::abs
    • nomor::NonZeroI*::checked_abs
    • nomor::NonZeroI*::overflowing_abs
    • nomor::NonZeroI*::saturating_abs
    • nomor::NonZeroI*::unsigned_abs
    • nomor::NonZeroI*::wrapping_abs
    • nomor::NonZeroU*::checked_add
    • nomor::NonZeroU*::checked_next_power_of_two
    • nomor::NonZeroU*::saturating_add
    • os::unix::proses::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Tipe yang kompatibel dengan C, yang sebelumnya distabilkan di modul std::ffi, telah ditambahkan ke pustaka inti dan alokasi:
    • inti::ffi::CStr
    • inti::ffi::FromBytesWithNulError
    • mengalokasikan::ffi::CString
    • mengalokasikan::ffi::FromVecWithNulError
    • mengalokasikan::ffi::IntoStringError
    • alokasikan::ffi::NulError
  • Tipe C yang sebelumnya distabilkan di modul std::os::raw telah ditambahkan ke modul core::ffi dan std::ffi (misalnya, tipe c_uint dan c_ulong telah diusulkan untuk tipe C uint dan ulong):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Penangan tingkat rendah telah distabilkan untuk digunakan dengan mekanisme Poll (di masa depan direncanakan untuk menyediakan API yang disederhanakan yang tidak memerlukan penggunaan struktur tingkat rendah seperti Pull dan Pin):

    • masa depan::poll_fn
    • tugas::siap!
  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam fungsi irisan::dari_raw_parts.
  • Untuk menyimpan data dengan lebih kompak, tata letak memori struktur Ipv4Addr, Ipv6Addr, SocketAddrV4 dan SocketAddrV6 telah diubah. Mungkin ada masalah kompatibilitas dengan paket peti tunggal yang menggunakan std::mem::transmute untuk manipulasi struktur tingkat rendah.
  • Pembuatan kompiler karat untuk platform Windows menggunakan pengoptimalan PGO (optimasi yang dipandu profil), yang memungkinkan peningkatan kinerja kompilasi kode sebesar 10-20%.
  • Kompiler telah menerapkan peringatan baru tentang bidang yang tidak digunakan dalam struktur tertentu.

Selain itu, Anda dapat melihat laporan status tentang pengembangan implementasi alternatif kompiler bahasa Rust, yang disiapkan oleh proyek gccrs (GCC Rust) dan disetujui untuk dimasukkan dalam GCC. Setelah mengintegrasikan frontend, alat GCC standar dapat digunakan untuk mengkompilasi program dalam bahasa Rust tanpa perlu menginstal kompiler Rustc, yang dibuat menggunakan pengembangan LLVM. Selama pengembangan berjalan sesuai rencana, dan jika tidak ada masalah yang tidak terduga, frontend Rust akan diintegrasikan ke dalam rilis GCC 13 yang dijadwalkan pada Mei tahun depan. Implementasi Rust GCC 13 akan berada dalam status beta, belum diaktifkan secara default.

Sumber: opennet.ru

Tambah komentar