Keluaran bahasa pengaturcaraan Rust 1.58

Pengeluaran bahasa pengaturcaraan tujuan umum Rust 1.58, yang diasaskan oleh projek Mozilla, tetapi kini dibangunkan di bawah naungan organisasi bukan untung bebas Rust Foundation, telah diterbitkan. Bahasa ini memfokuskan pada keselamatan memori, menyediakan pengurusan memori automatik dan menyediakan cara untuk mencapai keselarian tugas yang tinggi tanpa menggunakan pengumpul sampah atau masa jalan (masa jalan dikurangkan kepada permulaan asas dan penyelenggaraan perpustakaan standard).

Pengurusan memori automatik Rust menyelamatkan pembangun daripada ralat semasa memanipulasi penunjuk dan melindungi daripada masalah yang timbul akibat manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, menimpa lebihan, dsb. Untuk mengedarkan perpustakaan, menyediakan binaan dan mengurus kebergantungan, projek membangunkan pengurus pakej Kargo. Repositori crates.io disokong untuk mengehos perpustakaan.

Inovasi utama:

  • Dalam blok pemformatan rentetan, sebagai tambahan kepada keupayaan yang tersedia sebelum ini untuk menggantikan pembolehubah yang disenaraikan secara eksplisit selepas rentetan mengikut nombor dan nama, keupayaan untuk menggantikan pengecam arbitrari dengan menambahkan ungkapan "{pengenal}" pada rentetan dilaksanakan. Contohnya: // Pembinaan yang disokong sebelum ini: println!("Hello, {}!", get_person()); println!("Helo, {0}!", get_person()); println!("Hello, {orang}!", orang = get_person()); // kini anda boleh menentukan let person = get_person(); println!("Hello, {orang}!");

    Pengecam juga boleh ditentukan secara langsung dalam pilihan pemformatan. biarkan (lebar, ketepatan) = get_format(); untuk (nama, skor) dalam get_scores() { println!("{nama}: {skor:lebar$.precision$}"); }

    Penggantian baharu berfungsi dalam semua makro yang menyokong definisi format rentetan, kecuali makro "panik!". dalam versi 2015 dan 2018 bahasa Rust, di mana panik!("{ident}") dianggap sebagai rentetan biasa (dalam Rust 2021 penggantian berfungsi).

  • Tingkah laku std::process::Struktur arahan pada platform Windows telah diubah supaya apabila melaksanakan arahan, atas sebab keselamatan, ia tidak lagi mencari fail boleh laku dalam direktori semasa. Direktori semasa dikecualikan kerana ia boleh digunakan untuk melaksanakan kod hasad jika program dijalankan dalam direktori yang tidak dipercayai (CVE-2021-3013). Logik pengesanan boleh laku baharu melibatkan pencarian direktori Rust, direktori aplikasi, direktori sistem Windows dan direktori yang dinyatakan dalam pembolehubah persekitaran PATH.
  • Pustaka standard telah mengembangkan bilangan fungsi yang ditandakan "#[must_use]" untuk mengeluarkan amaran jika nilai pulangan diabaikan, yang membantu mengenal pasti ralat yang disebabkan oleh menganggap fungsi akan menukar nilai dan bukannya mengembalikan nilai baharu.
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Pilihan::unwrap_unchecked
    • Keputusan::unwrap_unchecked
    • Keputusan::unwrap_err_unchecked
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi:
    • Tempoh::baru
    • Tempoh::checked_add
    • Tempoh::saturating_add
    • Tempoh::checked_sub
    • Tempoh::saturating_sub
    • Tempoh::checked_mul
    • Tempoh::menepu_mul
    • Tempoh::checked_div
  • Dibenarkan penyahrujukan penunjuk "*const T" dalam konteks "const".
  • Dalam pengurus pakej kargo, medan rust_version telah ditambahkan pada metadata pakej dan pilihan "--message-format" telah ditambahkan pada arahan "cargo install".
  • Pengkompil melaksanakan sokongan untuk mekanisme perlindungan CFI (Control Flow Integrity), yang menambahkan semakan sebelum setiap panggilan tidak langsung untuk mengesan beberapa bentuk tingkah laku yang tidak ditentukan yang berpotensi membawa kepada pelanggaran perintah pelaksanaan biasa (aliran kawalan) akibat daripada penggunaan eksploitasi yang menukar penunjuk yang disimpan dalam ingatan pada fungsi.
  • Pengkompil telah menambah sokongan untuk versi 5 dan 6 format perbandingan liputan LLVM, yang digunakan untuk menilai liputan kod semasa ujian.
  • Dalam pengkompil, keperluan untuk versi minimum LLVM dinaikkan kepada LLVM 12.
  • Tahap ketiga sokongan untuk platform x86_64-unknown-none telah dilaksanakan. Tahap ketiga melibatkan sokongan asas, tetapi tanpa ujian automatik, menerbitkan binaan rasmi atau menyemak sama ada kod itu boleh dibina.

Selain itu, kami boleh ambil perhatian penerbitan oleh Microsoft tentang keluaran perpustakaan Rust untuk Windows 0.30, yang membolehkan anda menggunakan bahasa Rust untuk membangunkan aplikasi untuk OS Windows. Set ini termasuk dua pakej peti (windows dan windows-sys), di mana anda boleh mengakses Win API dalam program Rust. Kod untuk sokongan API dijana secara dinamik daripada metadata yang menerangkan API, yang membolehkan anda melaksanakan sokongan bukan sahaja untuk panggilan Win API sedia ada, tetapi untuk panggilan yang akan muncul pada masa hadapan. Versi baharu menambah sokongan untuk platform sasaran UWP (Universal Windows Platform) dan melaksanakan jenis Handle dan Debug.

Sumber: opennet.ru

Tambah komen