Rilis Bahasa Pemrograman Rust 1.36

diterbitkan rilis bahasa pemrograman sistem Karat 1.36, didirikan oleh proyek Mozilla. Bahasa ini berfokus pada keamanan memori, menyediakan manajemen memori otomatis, dan menyediakan sarana untuk mencapai paralelisme tugas yang tinggi tanpa menggunakan pengumpul sampah atau runtime.

Manajemen memori otomatis Rust membebaskan pengembang dari manipulasi penunjuk dan melindungi dari masalah yang timbul dari manipulasi memori tingkat rendah, seperti akses memori setelah bebas, dereferensi penunjuk nol, buffer overruns, dan sejenisnya. Manajer paket sedang dikembangkan untuk mendistribusikan perpustakaan, memastikan perakitan dan mengelola ketergantungan oleh proyek. Muatan, memungkinkan Anda mendapatkan perpustakaan yang diperlukan untuk program dalam satu klik. Repositori didukung untuk menghosting perpustakaan peti.io.

Utama inovasi:

  • Sifat stabil Masa depan, yang mewakili nilai yang evaluasinya mungkin belum selesai saat menggunakan blok async / .await. Nilai asinkron yang ditentukan menggunakan Future memungkinkan untuk terus menjalankan pekerjaan yang berguna di thread, sekaligus menunggu selesainya perhitungan nilai tertentu;
  • Perpustakaan stabil mengalokasikan, yang menyediakan penunjuk dan koleksi cerdas untuk mengelola nilai yang dialokasikan memori. Alokasi memori di std sekarang menggunakan tipe Hal, yang diekspor kembali dari alokasi. Penggunaan alokasi secara terpisah masuk akal dalam aplikasi yang tidak terikat dengan std (β€œ#![no_std]”), serta di perpustakaan yang dirancang untuk digunakan dalam program serupa tanpa std;
  • Untuk melewati pemeriksaan inisialisasi nilai yang benar diajukan tipe perantara MungkinUnit, yang dapat digunakan sebagai pengganti fungsi mem::uninitialized sebagai alternatif yang lebih aman. Fungsi mem::uninitialized berguna untuk membuat array dengan cepat, namun menyesatkan kompiler karena tampaknya telah diinisialisasi, namun kenyataannya nilainya tetap tidak diinisialisasi. MaybeUninit memungkinkan Anda untuk secara eksplisit menunjukkan kepada kompiler bahwa nilainya tidak diinisialisasi, untuk memperhitungkan kemungkinan perilaku tidak terdefinisi yang terkait dengan ini, dan juga untuk mengatur pemeriksaan dalam program melalui "maybe_t:" dan inisialisasi langkah demi langkah, menandai penyelesaiannya menggunakan panggilan β€œ.assume_init()”. Dengan hadirnya MaybeUninit, fungsi mem::uninitialized sudah tidak digunakan lagi dan tidak direkomendasikan untuk digunakan;
  • Teknik NLL (Non-Lexical Lifetimes), yang memperluas sistem pencatatan umur variabel yang dipinjam, telah distabilkan untuk bahasa Rust 2015 (awalnya, NLL hanya didukung oleh Rust 2018). Daripada melakukan seumur hidup pada level leksikal, NLL melakukannya pada level kumpulan pointer dalam grafik alur eksekusi. Pendekatan ini memungkinkan Anda untuk meningkatkan kualitas pemeriksaan peminjaman variabel (pemeriksa peminjaman) dan memungkinkan eksekusi beberapa jenis kode yang benar, yang penggunaannya sebelumnya menyebabkan kesalahan. Perilaku baru ini juga membuat proses debug menjadi lebih mudah;
  • Implementasi baru dari array asosiatif disertakan Peta Hash, berdasarkan penerapan struktur Tabel Swiss (dimuat secara otomatis hash brown::HashMap, kecuali dinyatakan lain secara eksplisit, seperti std::HashMap, yang didasarkan pada SipHash 1-3). Antarmuka perangkat lunak tetap sama, dan perbedaan yang terlihat oleh pengembang adalah peningkatan kinerja dan pengurangan konsumsi memori;
  • Di manajer paket kargo ditambahkan opsi β€œ--offline”, yang memungkinkan operasi tanpa mengakses jaringan, di mana hanya paket yang di-cache di sistem lokal yang digunakan saat menginstal dependensi. Jika ketergantungan tidak ada dalam cache lokal, kesalahan akan terjadi. Untuk melakukan pramuat dependensi ke dalam cache lokal sebelum offline, Anda dapat menggunakan perintah β€œpengambilan kargo”;
  • Menerapkan kemampuan untuk memanggil makro β€œdbg!” menunjukkan beberapa argumen;
  • Atribut β€œconst”, yang menentukan kemungkinan penggunaan dalam konteks apa pun alih-alih konstanta, digunakan untuk metode
    Tata letak::dari_size_align_tidak dicentang,
    mem::kebutuhan_drop,
    NonNull::menggantung dan
    NonNull::pemeran;

  • Sebagian API baru telah dipindahkan ke kategori stabil, termasuk metode yang telah distabilkan
    tugas::Waker, tugas::Poll,
    VecDeque::putar_kiri, VecDeque::putar_kanan,
    Baca::read_vectored, Tulis::write_vectored,
    Iterator::disalin,
    BorrowMut (untuk string) dan str::as_mut_ptr.

Sumber: opennet.ru

Tambah komentar