Keluaran bahasa pengaturcaraan Rust 1.36

diterbitkan keluaran bahasa pengaturcaraan sistem Karat 1.36, diasaskan oleh projek Mozilla. 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.

Pengurusan memori automatik Rust menyelamatkan pembangun daripada memanipulasi penunjuk dan melindungi daripada masalah yang timbul daripada manipulasi memori peringkat rendah, seperti mengakses kawasan memori selepas ia dibebaskan, membatalkan penunjuk nol, overrun penimbal, dsb. Untuk mengedarkan perpustakaan, memastikan pemasangan dan mengurus kebergantungan, projek membangunkan pengurus pakej Cargo, yang membolehkan anda mendapatkan perpustakaan yang anda perlukan untuk program dalam satu klik. Repositori disokong untuk mengehos perpustakaan crates.io.

Utama inovasi:

  • Sifat stabil Masa depan, yang mewakili nilai yang penilaiannya mungkin belum selesai semasa menggunakan blok async / .await. Nilai tak segerak yang ditakrifkan menggunakan Masa Hadapan memungkinkan untuk terus melaksanakan kerja berguna dalam utas, sambil pada masa yang sama menunggu selesai pengiraan nilai tertentu;
  • Perpustakaan menjadi stabil peruntukkan, yang menyediakan petunjuk dan koleksi pintar untuk mengurus nilai yang diperuntukkan memori. Peruntukan memori dalam std kini menggunakan jenis satu perkara, yang dieksport semula daripada alloc. Penggunaan berasingan alloc masuk akal dalam aplikasi yang tidak terikat dengan std (β€œ#![no_std]”), serta dalam perpustakaan yang direka untuk digunakan dalam program serupa tanpa std;
  • Untuk memintas semakan untuk permulaan nilai yang betul dicadangkan jenis perantaraan MaybeUnit, yang boleh digunakan sebagai ganti fungsi mem::uninitialized sebagai alternatif yang lebih selamat. Fungsi mem::uninitialized adalah mudah untuk mencipta tatasusunan dengan cepat, tetapi ia mengelirukan pengkompil kerana ia nampaknya telah dimulakan, tetapi pada hakikatnya nilai itu kekal tidak dimulakan. MaybeUninit membenarkan anda untuk secara eksplisit menunjukkan kepada pengkompil bahawa nilai itu tidak dimulakan, untuk mengambil kira kemungkinan tingkah laku yang tidak ditentukan yang dikaitkan dengan ini, dan juga untuk mengatur semakan dalam program melalui "maybe_t:" dan permulaan langkah demi langkah, menandakan siapnya menggunakan panggilan β€œ.assume_init()”. Dengan kemunculan MaybeUninit, fungsi mem::uninitialized telah ditamatkan dan tidak disyorkan untuk digunakan;
  • Teknik NLL (Non-Lexical Lifetimes), yang mengembangkan sistem untuk merekodkan jangka hayat pembolehubah yang dipinjam, telah distabilkan untuk bahasa Rust 2015 (pada mulanya, NLL hanya disokong oleh Rust 2018). Daripada melakukan jangka hayat pada tahap leksikal, NLL melakukannya pada tahap set penunjuk dalam graf aliran pelaksanaan. Pendekatan ini membolehkan anda meningkatkan kualiti menyemak peminjaman pembolehubah (pemeriksa pinjaman) dan membenarkan pelaksanaan beberapa jenis kod yang betul, penggunaan yang sebelum ini membawa kepada ralat. Tingkah laku baharu juga menjadikan penyahpepijatan lebih mudah;
  • Pelaksanaan baharu tatasusunan bersekutu disertakan Peta Hash, berdasarkan aplikasi struktur Meja Swiss (dimuatkan secara automatik hashbrown::HashMap, melainkan dinyatakan sebaliknya secara eksplisit, seperti std::HashMap, yang berdasarkan SipHash 1-3). Antara muka perisian kekal sama, dan perbezaan yang ketara kepada pembangun berpunca daripada peningkatan prestasi dan pengurangan penggunaan memori;
  • Dalam kargo pengurus pakej tambah pilihan "--luar talian", yang membolehkan operasi tanpa mengakses rangkaian, di mana hanya pakej yang dicache dalam sistem tempatan digunakan semasa memasang kebergantungan. Jika kebergantungan tiada dalam cache setempat, ralat akan dilemparkan. Untuk pramuat kebergantungan ke dalam cache setempat sebelum pergi ke luar talian, anda boleh menggunakan arahan "pengambilan kargo";
  • Melaksanakan keupayaan untuk memanggil makro "dbg!" menunjukkan beberapa hujah;
  • Atribut "const", yang menentukan kemungkinan menggunakan dalam mana-mana konteks dan bukannya pemalar, digunakan untuk kaedah
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::juntai dan
    NonNull::cast;

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

Sumber: opennet.ru

Tambah komen