Rust 1.82 dirilis. Browser anyar adhedhasar Rust. Nggunakake Rust ing Volvo

Basa pemrograman tujuan umum Rust 1.82, didegaké déning proyèk Mozilla nanging saiki dikembangaké ing sangisoré organisasi nirlaba independen Rust Foundation, wis dirilis. Basa kasebut fokus ing safety memori lan nyedhiyakake sarana kanggo nggayuh paralelisme proyek sing dhuwur nalika ngindhari panggunaan kolektor sampah lan runtime (runtime dikurangi dadi initialization dhasar lan pangopènan perpustakaan standar).

Cara nangani memori Rust nylametake pangembang saka kesalahan nalika manipulasi penunjuk lan nglindhungi masalah sing muncul amarga penanganan memori tingkat rendah, kayata ngakses area memori sawise dibebasake, null pointer dereferencing, overruns buffer, etc. Kanggo nyebarake perpustakaan, nyedhiyakake mbangun lan ngatur dependensi, proyek kasebut ngembangake manajer paket Cargo. Repositori crates.io didhukung kanggo hosting perpustakaan.

Keamanan memori diwenehake ing Rust ing wektu kompilasi liwat mriksa referensi, nglacak kepemilikan obyek, nglacak umur obyek (skop), lan netepake akurasi akses memori sajrone eksekusi kode. Rust uga menehi pangayoman marang overflows integer, mbutuhake initialization prentah saka nilai variabel sadurunge nggunakake, Ngalahake kasalahan luwih apik ing perpustakaan standar, ditrapake konsep referensi immutable lan variabel minangka standar, nawakake typing statis kuwat kanggo nyilikake kasalahan logis.

Inovasi utama:

  • Printah "info" wis ditambahake menyang manajer paket kargo kanggo nampilake informasi babagan paket ing gudang.
  • Dhukungan ditambahake kanggo sintaks "nggunakake<..>" ing "Sifat impl", sing nemtokake informasi babagan jinis sing didhelikake. Contone, "impl Trait + use<'x, T>" nemtokake manawa mung parameter "x" lan "T" sing diidini digunakake ing jinis sing didhelikake.
  • Sintaksis kapisah kanggo nggawe penunjuk mentah wis diusulake, ngganti makro sing digunakake sadurunge: makro "addr_of!(expr)" diganti karo operator "&raw const expr", lan makro "addr_of_mut!(expr)" wis diganti. dening operator expr "&raw mut". struct Dikemas {not_aligned_field: i32,} fn utama () {ayo p = Dikemas {not_aligned_field: 1_82}; // Cara lawas kanggo nggawe pointer mentah supaya ptr = std :: ptr :: addr_of! (p.not_aligned_field); // Cara anyar kanggo nggawe pitunjuk mentah ayo ptr = & mentahan const p.not_aligned_field; let val = ora aman {ptr.read_unaaligned()}; }
  • Sampeyan bisa nemtokake fungsi lan konstanta sing aman kanthi umur 'statis' ing blok njaba kanthi atribut "ora aman" (sadurunge, kabeh unsur ing "eksternal ora aman" mung bisa duwe atribut "ora aman"): extern unsafe { pub safe statis TAU : f64; pub aman fn sqrt(x: f64) -> f64; pub ora aman fn strlen(p: *const u8) -> gunakake; }
  • Atribut no_mangle, link_section lan export_name, sing bisa nyebabake prilaku sing ora ditemtokake, saiki dianggep ora aman lan mbutuhake gendera "ora aman" sing jelas, contone: #[unsafe(no_mangle)] pub fn my_global_function() {}
  • Pencocokan pola ngidini jinis kosong dilewati, kayata "enum Void {}" utawa struktur kanthi kolom kosong sing katon. nggunakake std :: Ngonversi :: Infallible; pub fn unwrap_without_panic (x: Hasil ) -> T { ayo Ok(x) = x; // "Err" bisa dilewati x }
  • Jinis kanggo nomer floating point (f32 lan f64) duwe prilaku standar nalika ngolah angka NaN non-numerik (0.0 / 0.0), lan uga ngidini panggunaan operasi floating point ing const fn.
  • Sisipan perakitan nyedhiyakake kemampuan kanggo nggunakake operan kanthi atribut "const" kanggo langsung nggunakake angka integer tanpa nyimpen ing register. const MSG: & str = "Halo, donya!\n"; ora aman { inti :: arch :: asm!( “mov rdx, {LEN} // instruksi 'mov rdx, 14′” bakal diasilake, LEN = const MSG.len(), … ); }
  • Ngatasi ekspresi kanthi atribut "statis" diidini ing konteks sing aman tanpa nemtokake blok sing ora aman (operator "& raw mut" lan "& raw const" ora mengaruhi nilai operan lan mung nggawe pointer menyang: mut statis STATIC_MUT: Ketik = Ketik:: anyar( ); extern "C" { statis EXTERN_STATIC: Tipe; } fn utama () { ayo static_mut_ptr = & mentah mut STATIC_MUT; ayo extern_static_ptr = & mentahan const EXTERN_STATIC; }
  • Bagean anyar saka API wis dipindhah menyang kategori stabil, kalebu cara lan implementasine sifat wis stabil:
    • std :: thread :: Builder :: spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]:: is_sorted
    • [T]:: diurutake
    • [T]:: is_sorted_by_key
    • Iterator:: is_sorted
    • Iterator:: is_sorted_by
    • Iterator:: is_sorted_by_key
    • std::masa depan::Siap::menyang_inner
    • std::iter::repeat_n
    • impl DoubleEndedIterator kanggo Njupuk

      Source: opennet.ru

Add a comment