Rilis Bahasa Pemrograman Rust 1.57

Rilis bahasa pemrograman sistem Rust 1.57, 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:

  • Penggunaan makro “panik!” telah distabilkan. dalam konteks yang dibuat selama kompilasi, seperti deklarasi "const fn". Selain itu, selain menggunakan "panik!" deklarasi const mengizinkan penggunaan makro “assert!”. dan beberapa API perpustakaan standar lainnya. Stabilisasi belum mencakup seluruh infrastruktur pemformatan, jadi dalam bentuknya saat ini makro “panik!” hanya dapat digunakan dengan string statis (panik!(“...")) atau dengan nilai interpolasi tunggal "&str" saat mengganti (panik!("{}", a)), yang harus dibatasi pada penggantian "{ }" tanpa penentu format dan tipe lainnya. Di masa depan, penerapan makro dalam konteks konstan akan diperluas, tetapi kemampuan yang distabilkan sudah cukup untuk melakukan pemeriksaan penegasan pada tahap kompilasi: const _: () = menegaskan!(std::mem::size_of:: () == 64); const _: () = menegaskan!(std::mem::size_of:: () == 8);
  • Manajer paket Cargo mengizinkan penggunaan profil dengan nama arbitrer, tidak terbatas pada "dev", "release", "test" dan "bench". Misalnya, untuk mengaktifkan pengoptimalan pada tahap penautan (LTO) hanya ketika rakitan produk akhir dibuat, Anda dapat membuat profil “produksi” di Cargo.toml dan menambahkan tanda “lto = true” ke dalamnya. Namun, saat menentukan profil Anda sendiri, Anda harus menentukan profil yang ada untuk mewarisi pengaturan default dari profil tersebut. Contoh di bawah ini membuat profil “produksi” yang melengkapi profil “rilis” dengan menyertakan tanda “lto = true”. Profil itu sendiri diaktifkan dengan memanggil kargo dengan opsi “--profile production”, dan artefak perakitan akan ditempatkan di direktori “target/produksi”. [profil.produksi] mewarisi = "rilis" lto = benar
  • Penggunaan try_reserve untuk tipe Vec, String, HashMap, HashSet dan VecDeque telah distabilkan, yang memungkinkan Anda untuk mencadangkan ruang terlebih dahulu untuk sejumlah elemen tertentu dari tipe tertentu untuk mengurangi frekuensi operasi alokasi memori dan menghindari crash selama operasi karena kekurangan memori.
  • Diperbolehkan menentukan makro dengan kurung kurawal dalam ekspresi seperti "m!{ .. }.method()" dan "m!{ .. }?".
  • Eksekusi fungsi File::read_to_end dan read_to_string telah dioptimalkan.
  • Dukungan untuk spesifikasi Unicode telah diperbarui ke versi 14.0.
  • Memperluas 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.
  • Menambahkan backend eksperimental untuk pembuatan kode menggunakan libgccjit.
  • Bagian baru dari API telah dipindahkan ke kategori stabil, termasuk metode dan penerapan sifat yang telah distabilkan:
    • [T; N]::as_mut_slice
    • [T; N]::sebagai_irisan
    • koleksi::TryReserveError
    • HashMap::coba_reserve
    • HashSet::coba_cadangan
    • String::coba_cadangan
    • String::coba_reserve_exact
    • Vec::coba_reserve
    • Vec::coba_reserve_exact
    • VecDeque::coba_reserve
    • VecDeque::coba_reserve_exact
    • Iterator::peta_sementara
    • iter::MapWhile
    • proc_macro::is_tersedia
    • Perintah::get_program
    • Perintah::get_args
    • Perintah::get_envs
    • Perintah::get_current_dir
    • PerintahArgs
    • PerintahEnvs
  • Atribut “const”, yang menentukan apakah dapat digunakan dalam konteks apa pun selain konstanta, digunakan dalam fungsi petunjuk::unreachable_unchecked.
  • Dukungan tingkat ketiga telah diterapkan untuk armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi dan armv7a-kmc- platform solid_asp3-eabihf. Tingkat ketiga melibatkan dukungan dasar, tetapi tanpa pengujian otomatis, penerbitan versi resmi, atau pemeriksaan apakah kode dapat dibuat.

Sumber: opennet.ru

Tambah komentar