Rilis Bahasa Pemrograman Rust 1.58

Rilis bahasa pemrograman tujuan umum Rust 1.58, yang didirikan oleh proyek Mozilla, tetapi sekarang dikembangkan di bawah naungan organisasi nirlaba independen Rust Foundation, telah diterbitkan. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau waktu proses (waktu proses dikurangi menjadi inisialisasi dasar dan pemeliharaan perpustakaan standar).

Manajemen memori otomatis Rust menyelamatkan pengembang dari kesalahan saat memanipulasi pointer dan melindungi dari masalah yang muncul karena manipulasi 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.

Inovasi utama:

  • Dalam blok pemformatan baris, selain kemampuan yang sebelumnya tersedia untuk mengganti variabel yang dicantumkan secara eksplisit setelah baris berdasarkan nomor dan nama, kemampuan untuk mengganti pengidentifikasi arbitrer dengan menambahkan ekspresi β€œ{identifier}” ke baris juga diterapkan. Misalnya: // Konstruksi yang didukung sebelumnya: println!("Halo, {}!", get_person()); println!("Halo, {0}!", get_person()); println!("Halo, {orang}!", orang = get_person()); // sekarang Anda dapat menentukan let person = get_person(); println!("Halo, {orang}!");

    Pengidentifikasi juga dapat ditentukan secara langsung dalam opsi pemformatan. let (lebar, presisi) = get_format(); for (nama, skor) di get_scores() { println!("{name}: {score:width$.precision$}"); }

    Substitusi baru berfungsi di semua makro yang mendukung definisi format string, kecuali makro β€œpanik!”. dalam bahasa Rust versi 2015 dan 2018, di mana panik!("{ident}") diperlakukan sebagai string biasa (di Rust 2021 substitusi berfungsi).

  • Perilaku struktur std::process::Command pada platform Windows telah diubah sehingga ketika menjalankan perintah, demi alasan keamanan, tidak lagi mencari file yang dapat dieksekusi di direktori saat ini. Direktori saat ini dikecualikan karena dapat digunakan untuk mengeksekusi kode berbahaya jika program dijalankan di direktori yang tidak tepercaya (CVE-2021-3013). Logika deteksi baru yang dapat dieksekusi melibatkan pencarian direktori Rust, direktori aplikasi, direktori sistem Windows, dan direktori yang ditentukan dalam variabel lingkungan PATH.
  • Pustaka standar telah menambah jumlah fungsi bertanda "#[must_use]" untuk mengeluarkan peringatan jika nilai yang dikembalikan diabaikan, yang membantu mengidentifikasi kesalahan yang disebabkan oleh asumsi suatu fungsi akan mengubah nilai daripada mengembalikan nilai baru.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • Metadata::is_symlink
    • Jalur::is_symlink
    • {integer}::saturating_div
    • Opsi::unwrap_unchecked
    • Hasil::unwrap_unchecked
    • Hasil::unwrap_err_unchecked
  • Atribut β€œconst”, yang menentukan kemungkinan menggunakannya dalam konteks apa pun alih-alih konstanta, digunakan dalam fungsi:
    • Durasi::baru
    • Durasi::diperiksa_tambahkan
    • Durasi::saturating_add
    • Durasi::checked_sub
    • Durasi::saturating_sub
    • Durasi::checked_mul
    • Durasi::jenuh_mul
    • Durasi::checked_div
  • Diizinkan dereferensi pointer "*const T" dalam konteks "const".
  • Di manajer paket Cargo, bidang Rust_version telah ditambahkan ke metadata paket, dan opsi β€œ--message-format” telah ditambahkan ke perintah β€œcargo install”.
  • Kompiler mengimplementasikan dukungan untuk mekanisme perlindungan CFI (Control Flow Integrity), yang menambahkan pemeriksaan sebelum setiap panggilan tidak langsung untuk mendeteksi beberapa bentuk perilaku tidak terdefinisi yang berpotensi menyebabkan pelanggaran terhadap urutan eksekusi normal (aliran kontrol) sebagai akibat dari penggunaan eksploitasi yang mengubah pointer yang disimpan dalam memori pada fungsi.
  • Kompiler telah menambahkan dukungan untuk format perbandingan cakupan LLVM versi 5 dan 6, yang digunakan untuk mengevaluasi cakupan kode selama pengujian.
  • Di kompiler, persyaratan untuk versi minimum LLVM dinaikkan menjadi LLVM 12.
  • Dukungan tingkat ketiga untuk platform x86_64-unknown-none telah diterapkan. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.

Selain itu, kami dapat mencatat publikasi oleh Microsoft tentang rilis perpustakaan Rust untuk Windows 0.30, yang memungkinkan Anda menggunakan bahasa Rust untuk mengembangkan aplikasi untuk OS Windows. Set ini mencakup dua paket peti (windows dan windows-sys), yang melaluinya Anda dapat mengakses Win API di program Rust. Kode untuk dukungan API dihasilkan secara dinamis dari metadata yang menjelaskan API, yang memungkinkan Anda menerapkan dukungan tidak hanya untuk panggilan Win API yang ada, tetapi juga untuk panggilan yang akan muncul di masa mendatang. Versi baru menambahkan dukungan untuk platform target UWP (Universal Windows Platform) dan mengimplementasikan tipe Handle dan Debug.

Sumber: opennet.ru

Tambah komentar