Rust 1.66 Programming Language Release

Ang pagpagawas sa Rust 1.66 nga kinatibuk-ang katuyoan nga programming language, nga gitukod sa proyekto sa Mozilla, apan karon naugmad ubos sa pagdumala sa independenteng non-profit nga organisasyon nga Rust Foundation, gimantala. Ang lengguwahe nagtutok sa kaluwasan sa panumduman ug naghatag sa mga paagi aron makab-ot ang taas nga paralelismo sa trabaho samtang naglikay sa paggamit sa usa ka tigkolekta sa basura ug runtime (ang runtime gikunhoran ngadto sa batakang pagsugod ug pagmentinar sa standard library).

Ang mga pamaagi sa pagdumala sa panumduman sa Rust nagluwas sa developer gikan sa mga sayup sa pagmaniobra sa mga pointer ug pagpanalipod batok sa mga problema nga motumaw tungod sa ubos nga lebel sa pagdumala sa panumduman, sama sa pag-access sa usa ka lugar sa panumduman human kini mapagawas, pagtangtang sa mga null pointer, pag-overrun sa buffer, ug uban pa. Sa pag-apod-apod sa mga librarya, paghatag og mga pagtukod ug pagdumala sa mga dependency, ang proyekto nagpalambo sa Cargo package manager. Gisuportahan ang crates.io repository alang sa pag-host sa mga librarya.

Ang kaluwasan sa panumduman gihatag sa Rust sa oras sa pag-compile pinaagi sa pagsusi sa reference, pagsubay sa pagpanag-iya sa butang, pagsubay sa mga kinabuhi sa butang (scopes), ug pagtimbang-timbang sa pagkahusto sa pag-access sa memorya sa panahon sa pagpatuman sa code. Naghatag usab ang Rust og proteksyon batok sa pag-awas sa integer, nanginahanglan mandatory nga pagsugod sa mga variable nga kantidad sa wala pa gamiton, pagdumala sa mga sayup nga mas maayo sa standard nga librarya, gipadapat ang konsepto sa dili mausab nga mga pakisayran ug mga variable nga default, nagtanyag kusog nga static nga pag-type aron maminusan ang mga lohikal nga sayup.

Panguna nga mga inobasyon:

  • Sa mga enumerasyon nga adunay integer nga representasyon (ang attribute nga "#[repr(Int)]"), ang tin-aw nga timailhan sa discriminant (variant number sa enumeration) gitugotan, bisan kung ang enumeration adunay mga field. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Gidugang nga function core::hint::black_box nga nagbalik lang sa nadawat nga kantidad. Tungod kay ang compiler naghunahuna nga kini nga function naghimo sa usa ka butang, ang black_box function mahimong gamiton sa pag-disable sa compiler optimizations alang sa mga loops sa paghimo sa code performance testing o sa pagsusi sa namugna nga machine code (aron ang compiler dili isipon ang code nga wala magamit ug tangtangon kini). Pananglitan, sa pananglitan sa ubos, ang black_box(v.as_ptr()) nagpugong sa compiler sa paghunahuna nga ang vector v wala gigamit. gamita ang std::hint::black_box; fn push_cap(v: &mut Vec) { para sa i sa 0..4 { v.push(i); black_box(v.as_ptr()); }}
  • Ang tagdumala sa pakete sa "kargamento" nagtanyag sa "pagtangtang" nga sugo, nga nagtugot kanimo sa pagtangtang sa mga dependency gikan sa Cargo.toml manifest gikan sa command line.
  • Usa ka bag-ong bahin sa API ang gibalhin sa kategorya nga stable, lakip ang mga pamaagi ug pagpatuman sa mga kinaiya nga na-stabilize:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BtreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Idugang ang mga pagpatuman sa AsFd alang sa mga tipo sa lock sa stdio kung mogamit sa WASI.
    • impl TryFrom > para sa Kahon<[T; N]>
    • kinauyokan::hint::black_box
    • Gidugayon::try_from_secs_{f32,f64}
    • Opsyon:: unzip
    • std::os::fd
  • Ang mga han-ay nga "..X" ug "..=X" gitugotan sa mga templates.
  • Sa pagtukod sa atubangan nga tumoy sa rustc compiler ug sa LLVM backend, LTO (Link Time Optimization) ug BOLT (Binary Optimization and Layout Tool) optimization modes gigamit aron madugangan ang performance sa resulta nga code ug makunhuran ang konsumo sa memorya.
  • Gipatuman ang lebel 5 nga suporta alang sa armv5te-none-eabi ug thumbvXNUMXte-none-eabi nga mga plataporma. Ang ikatulo nga lebel nagpasabot sa batakang suporta, apan walay automated nga pagsulay, ang pagmantala sa opisyal nagtukod ug nagsusi sa abilidad sa pagtukod sa code.
  • Gidugang nga suporta alang sa pag-link sa macOS Generic Libraries.

Dugang pa, atong mamatikdan ang paglakip sa GCC codebase sa front-end compiler sa Rust nga pinulongan (gccrs). Ang frontend gilakip sa sanga sa GCC 13, nga ipagawas sa Mayo 2023. Sugod sa GCC 13, ang standard GCC toolkit mahimong magamit sa pag-compile sa Rust nga mga programa nga dili kinahanglan nga i-install ang rustc compiler nga gitukod gamit ang LLVM developments. Ang pagpatuman sa Rust sa GCC 13 anaa sa beta status, dili ma-enable pinaagi sa default.

Source: opennet.ru

Idugang sa usa ka comment