Keluaran bahasa pengaturcaraan Rust 1.65

Bahasa pengaturcaraan tujuan umum Rust 1.65, yang diasaskan oleh projek Mozilla tetapi kini dibangunkan di bawah naungan organisasi bebas tanpa untung Rust Foundation, telah dikeluarkan. Bahasa ini memberi tumpuan kepada keselamatan ingatan dan menyediakan cara untuk mencapai keselarian kerja yang tinggi sambil mengelakkan penggunaan pengumpul sampah dan masa jalan (masa jalan dikurangkan kepada permulaan asas dan penyelenggaraan perpustakaan standard).

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

Keselamatan memori disediakan dalam Rust pada masa penyusunan melalui semakan rujukan, menjejaki pemilikan objek, menjejaki jangka hayat objek (skop) dan menilai ketepatan akses memori semasa pelaksanaan kod. Rust juga menyediakan perlindungan terhadap limpahan integer, memerlukan permulaan mandatori nilai pembolehubah sebelum digunakan, mengendalikan ralat dengan lebih baik dalam perpustakaan standard, menggunakan konsep rujukan tidak berubah dan pembolehubah secara lalai, menawarkan penaipan statik yang kuat untuk meminimumkan ralat logik.

Inovasi utama:

  • Sokongan untuk Jenis Bersekutu Generik (GAT) telah ditambah, yang memungkinkan untuk mencipta alias jenis yang dikaitkan dengan jenis lain dan membenarkan pembina jenis dikaitkan dengan ciri. trait Foo { taip Bar<'x>; }
  • Ungkapan "let ... else" dilaksanakan, yang membolehkan anda menyemak keadaan padanan corak terus di dalam ungkapan "let" dan melaksanakan kod arbitrari jika corak tidak sepadan. biarkan Ok(count) = u64::from_str(count_str) else { panik!("Tidak dapat menghuraikan integer: '{count_str}'"); };
  • Ia dibenarkan untuk menggunakan pernyataan rehat untuk keluar dari blok yang dinamakan lebih awal, menggunakan nama blok (label) untuk menentukan blok yang akan ditamatkan. let result = 'block: { do_thing(); if condition_not_met() { break 'blok 1; } do_next_thing(); if condition_not_met() { break 'blok 2; } do_last_thing(); 3};
  • Untuk Linux, menambahkan keupayaan untuk menyimpan maklumat penyahpepijatan secara berasingan (split-debuginfo), yang sebelum ini hanya tersedia untuk platform macOS. Menentukan pilihan "-Csplit-debuginfo=unpacked" akan menyimpan data debuginfo dalam format DWARF ke dalam beberapa fail objek berasingan dengan sambungan ".dwo". Menentukan "-Csplit-debuginfo=packed" akan mencipta satu pakej dalam format ".dwp" yang merangkumi semua data debuginfo untuk projek itu. Untuk menyepadukan debuginfo terus ke bahagian .debug_* objek ELF, anda boleh menggunakan pilihan "-Csplit-debuginfo=off".
  • Bahagian baharu API telah dialihkan ke kategori stabil, termasuk kaedah dan pelaksanaan ciri telah distabilkan:
    • std::backtrace::backtrace
    • Bound::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Atribut "const", yang menentukan kemungkinan menggunakannya dalam sebarang konteks dan bukannya pemalar, digunakan dalam fungsi <*const T&>::offset_from dan <*mut T>::offset_from
  • Sebagai sebahagian daripada peringkat akhir pemindahan pelaksanaan protokol LSP (Language Server Protocol) kepada penganalisis karat, pelaksanaan Rust Language Server (RLS) yang sudah lapuk telah digantikan dengan pelayan rintisan yang mengeluarkan amaran mencadangkan beralih kepada menggunakan karat. -penganalisis.
  • Semasa menyusun, sokongan untuk penggunaan sebaris kod perantaraan MIR didayakan, yang mempercepatkan penyusunan pakej peti biasa sebanyak 3-10%.
  • Untuk mempercepatkan binaan berjadual, pengurus pakej Kargo menyediakan pengisihan kerja yang menunggu dalam baris gilir.

Selain itu, temu bual tentang penggunaan bahasa Rust di Volvo untuk pembangunan komponen untuk sistem maklumat automotif boleh diambil perhatian. Tiada rancangan untuk menulis semula kod sedia ada dan diuji dalam Rust, tetapi untuk kod baharu, Rust ialah salah satu pilihan pilihan untuk meningkatkan kualiti pada kos yang lebih rendah. Kumpulan kerja berkaitan karat juga telah diwujudkan dalam persatuan automotif AUTOSAR (AUTomotive Open System ARchitecture) dan SAE (Society of Automotive Engineers).

Di samping itu, David Kleidermacher, VP of Engineering di Google, bercakap tentang terjemahan Rust bagi kod yang digunakan dalam platform Android untuk mengurus kunci penyulitan, serta penggunaan Rust dalam pelaksanaan DNS melalui protokol HTTPS, dalam timbunan untuk UWB- chips (Ultra-Wideband) dan dalam rangka kerja virtualisasi (Android Virtualization Framework) yang dikaitkan dengan cip Tensor G2. Untuk Android, tindanan baharu untuk Bluetooth dan Wi-Fi juga sedang dibangunkan, ditulis semula dalam Rust. Strategi umum adalah untuk meningkatkan keselamatan secara progresif, pertama dengan memindahkan komponen perisian yang paling tidak selamat dan penting ke Rust, dan kemudian melanjutkan ke subsistem lain yang dikaitkan dengannya. Tahun lepas, Rust telah dimasukkan dalam senarai bahasa yang dibenarkan untuk pembangunan platform Android.

Sumber: opennet.ru

Tambah komen